From 48653367a424b47d0aa8b816039a49eacb73dd0d Mon Sep 17 00:00:00 2001 From: Mateusz Fraczek Date: Wed, 11 Oct 2023 22:00:38 +0200 Subject: [PATCH 1/2] Add campaign support --- .../SegmentFirebase/FirebaseDestination.swift | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Sources/SegmentFirebase/FirebaseDestination.swift b/Sources/SegmentFirebase/FirebaseDestination.swift index eab5763..1a5dc44 100644 --- a/Sources/SegmentFirebase/FirebaseDestination.swift +++ b/Sources/SegmentFirebase/FirebaseDestination.swift @@ -100,9 +100,14 @@ public class FirebaseDestination: DestinationPlugin { let name = formatFirebaseEventNames(event.event) var parameters: [String: Any]? = nil if let properties = event.properties?.dictionaryValue { - parameters = returnMappedFirebaseParameters(properties) + parameters = returnMappedFirebaseParameters(properties, for: FirebaseDestination.mappedKeys) } - + + if let campaign = event.context?.dictionaryValue?["campaign"] as? [String: Any] { + let campaignParameters = returnMappedFirebaseParameters(campaign, for: FirebaseDestination.campaignMappedKeys) + parameters = (parameters ?? [:]).merging(campaignParameters) { (current, _) in current } + } + FirebaseAnalytics.Analytics.logEvent(name, parameters: parameters) analytics?.log(message: "Firebase logEventWithName \(name) parameters \(String(describing: parameters))") return event @@ -149,24 +154,24 @@ extension FirebaseDestination { throw(error) } } - - func returnMappedFirebaseParameters(_ properties: [String: Any]) -> [String: Any] { - - + + func returnMappedFirebaseParameters(_ properties: [String: Any], for keys: [String: String]) -> [String: Any] { + + var mappedValues = properties - - for (key, firebaseKey) in FirebaseDestination.mappedKeys { + + for (key, firebaseKey) in keys { if var data = properties[key] { mappedValues.removeValue(forKey: key) if let castData = data as? [String: Any] { - data = returnMappedFirebaseParameters(castData) + data = returnMappedFirebaseParameters(castData, for: keys) } else if let castArray = data as? [Any] { var updatedArray = [Any]() for item in castArray { if let castDictionary = item as? [String: Any] { - updatedArray.append(returnMappedFirebaseParameters(castDictionary)) + updatedArray.append(returnMappedFirebaseParameters(castDictionary, for: keys)) } else { updatedArray.append(item) } @@ -233,6 +238,11 @@ private extension FirebaseDestination { "order_id": FirebaseAnalytics.AnalyticsParameterTransactionID, "currency": FirebaseAnalytics.AnalyticsParameterCurrency] + static let campaignMappedKeys = ["source": "utm_source", + "medium": "utm_medium", + "name": "utm_campaign", + "term": "utm_term", + "content": "utm_content"] } From 3fa90adb18bf45d85a52cb63cb201ed7900702db Mon Sep 17 00:00:00 2001 From: Mateusz Fraczek Date: Thu, 12 Oct 2023 08:36:53 +0200 Subject: [PATCH 2/2] Update parameters --- Sources/SegmentFirebase/FirebaseDestination.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Sources/SegmentFirebase/FirebaseDestination.swift b/Sources/SegmentFirebase/FirebaseDestination.swift index 1a5dc44..8690508 100644 --- a/Sources/SegmentFirebase/FirebaseDestination.swift +++ b/Sources/SegmentFirebase/FirebaseDestination.swift @@ -238,11 +238,11 @@ private extension FirebaseDestination { "order_id": FirebaseAnalytics.AnalyticsParameterTransactionID, "currency": FirebaseAnalytics.AnalyticsParameterCurrency] - static let campaignMappedKeys = ["source": "utm_source", - "medium": "utm_medium", - "name": "utm_campaign", - "term": "utm_term", - "content": "utm_content"] + static let campaignMappedKeys = ["source": FirebaseAnalytics.AnalyticsParameterSource, + "medium": FirebaseAnalytics.AnalyticsParameterMedium, + "name": FirebaseAnalytics.AnalyticsParameterCampaign, + "term": FirebaseAnalytics.AnalyticsParameterTerm, + "content": FirebaseAnalytics.AnalyticsParameterContent] }