@@ -100,9 +100,14 @@ public class FirebaseDestination: DestinationPlugin {
100
100
let name = formatFirebaseEventNames ( event. event)
101
101
var parameters : [ String : Any ] ? = nil
102
102
if let properties = event. properties? . dictionaryValue {
103
- parameters = returnMappedFirebaseParameters ( properties)
103
+ parameters = returnMappedFirebaseParameters ( properties, for : FirebaseDestination . mappedKeys )
104
104
}
105
-
105
+
106
+ if let campaign = event. context? . dictionaryValue ? [ " campaign " ] as? [ String : Any ] {
107
+ let campaignParameters = returnMappedFirebaseParameters ( campaign, for: FirebaseDestination . campaignMappedKeys)
108
+ parameters = ( parameters ?? [ : ] ) . merging ( campaignParameters) { ( current, _) in current }
109
+ }
110
+
106
111
FirebaseAnalytics . Analytics. logEvent ( name, parameters: parameters)
107
112
analytics? . log ( message: " Firebase logEventWithName \( name) parameters \( String ( describing: parameters) ) " )
108
113
return event
@@ -149,24 +154,24 @@ extension FirebaseDestination {
149
154
throw ( error)
150
155
}
151
156
}
152
-
153
- func returnMappedFirebaseParameters( _ properties: [ String : Any ] ) -> [ String : Any ] {
154
-
155
-
157
+
158
+ func returnMappedFirebaseParameters( _ properties: [ String : Any ] , for keys : [ String : String ] ) -> [ String : Any ] {
159
+
160
+
156
161
var mappedValues = properties
157
-
158
- for (key, firebaseKey) in FirebaseDestination . mappedKeys {
162
+
163
+ for (key, firebaseKey) in keys {
159
164
if var data = properties [ key] {
160
165
161
166
mappedValues. removeValue ( forKey: key)
162
167
163
168
if let castData = data as? [ String : Any ] {
164
- data = returnMappedFirebaseParameters ( castData)
169
+ data = returnMappedFirebaseParameters ( castData, for : keys )
165
170
} else if let castArray = data as? [ Any ] {
166
171
var updatedArray = [ Any] ( )
167
172
for item in castArray {
168
173
if let castDictionary = item as? [ String : Any ] {
169
- updatedArray. append ( returnMappedFirebaseParameters ( castDictionary) )
174
+ updatedArray. append ( returnMappedFirebaseParameters ( castDictionary, for : keys ) )
170
175
} else {
171
176
updatedArray. append ( item)
172
177
}
@@ -233,6 +238,11 @@ private extension FirebaseDestination {
233
238
" order_id " : FirebaseAnalytics . AnalyticsParameterTransactionID,
234
239
" currency " : FirebaseAnalytics . AnalyticsParameterCurrency]
235
240
241
+ static let campaignMappedKeys = [ " source " : FirebaseAnalytics . AnalyticsParameterSource,
242
+ " medium " : FirebaseAnalytics . AnalyticsParameterMedium,
243
+ " name " : FirebaseAnalytics . AnalyticsParameterCampaign,
244
+ " term " : FirebaseAnalytics . AnalyticsParameterTerm,
245
+ " content " : FirebaseAnalytics . AnalyticsParameterContent]
236
246
}
237
247
238
248
0 commit comments