Skip to content

Commit 3cfb534

Browse files
authored
Add campaign support (#19)
* Add campaign support * Update parameters
1 parent a7548c6 commit 3cfb534

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

Sources/SegmentFirebase/FirebaseDestination.swift

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,14 @@ public class FirebaseDestination: DestinationPlugin {
100100
let name = formatFirebaseEventNames(event.event)
101101
var parameters: [String: Any]? = nil
102102
if let properties = event.properties?.dictionaryValue {
103-
parameters = returnMappedFirebaseParameters(properties)
103+
parameters = returnMappedFirebaseParameters(properties, for: FirebaseDestination.mappedKeys)
104104
}
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+
106111
FirebaseAnalytics.Analytics.logEvent(name, parameters: parameters)
107112
analytics?.log(message: "Firebase logEventWithName \(name) parameters \(String(describing: parameters))")
108113
return event
@@ -149,24 +154,24 @@ extension FirebaseDestination {
149154
throw(error)
150155
}
151156
}
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+
156161
var mappedValues = properties
157-
158-
for (key, firebaseKey) in FirebaseDestination.mappedKeys {
162+
163+
for (key, firebaseKey) in keys {
159164
if var data = properties[key] {
160165

161166
mappedValues.removeValue(forKey: key)
162167

163168
if let castData = data as? [String: Any] {
164-
data = returnMappedFirebaseParameters(castData)
169+
data = returnMappedFirebaseParameters(castData, for: keys)
165170
} else if let castArray = data as? [Any] {
166171
var updatedArray = [Any]()
167172
for item in castArray {
168173
if let castDictionary = item as? [String: Any] {
169-
updatedArray.append(returnMappedFirebaseParameters(castDictionary))
174+
updatedArray.append(returnMappedFirebaseParameters(castDictionary, for: keys))
170175
} else {
171176
updatedArray.append(item)
172177
}
@@ -233,6 +238,11 @@ private extension FirebaseDestination {
233238
"order_id": FirebaseAnalytics.AnalyticsParameterTransactionID,
234239
"currency": FirebaseAnalytics.AnalyticsParameterCurrency]
235240

241+
static let campaignMappedKeys = ["source": FirebaseAnalytics.AnalyticsParameterSource,
242+
"medium": FirebaseAnalytics.AnalyticsParameterMedium,
243+
"name": FirebaseAnalytics.AnalyticsParameterCampaign,
244+
"term": FirebaseAnalytics.AnalyticsParameterTerm,
245+
"content": FirebaseAnalytics.AnalyticsParameterContent]
236246
}
237247

238248

0 commit comments

Comments
 (0)