From f054cc2b77dfb74a6e772a6cfca3b3b37be39dba Mon Sep 17 00:00:00 2001 From: mike-dydx <149746839+mike-dydx@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:45:04 -0500 Subject: [PATCH] add `screen_view` event for better firebase analytics integration (#106) --- .../_Tracking/AppsFlyerTracking.swift | 2 +- .../_Tracking/TransformerTracker.swift | 3 ++- .../_ViewController/TrackingViewController.swift | 2 +- .../_Tracker/_Shared/CompositeTracking.swift | 4 ++-- .../_Tracker/_Shared/DebugTracking.swift | 2 +- .../Utilities/_Tracker/_Shared/Tracking.swift | 15 +++++++++------ .../dydxV4/_Tracking/dydxAmplitudeTracking.swift | 3 ++- .../dydxV4/_Tracking/dydxCompositeTracking.swift | 15 ++++++++++++--- 8 files changed, 30 insertions(+), 16 deletions(-) diff --git a/AppsFlyerStaticInjections/AppsFlyerStaticInjections/_Tracking/AppsFlyerTracking.swift b/AppsFlyerStaticInjections/AppsFlyerStaticInjections/_Tracking/AppsFlyerTracking.swift index c01a48da..8e7b89c5 100644 --- a/AppsFlyerStaticInjections/AppsFlyerStaticInjections/_Tracking/AppsFlyerTracking.swift +++ b/AppsFlyerStaticInjections/AppsFlyerStaticInjections/_Tracking/AppsFlyerTracking.swift @@ -30,7 +30,7 @@ public class AppsFlyerTracking: TransformerTracker { } } - override open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + override open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { // Only track the ones required by growth } diff --git a/PlatformParticles/PlatformParticles/_Tracking/TransformerTracker.swift b/PlatformParticles/PlatformParticles/_Tracking/TransformerTracker.swift index feca5e68..4d8ba66a 100644 --- a/PlatformParticles/PlatformParticles/_Tracking/TransformerTracker.swift +++ b/PlatformParticles/PlatformParticles/_Tracking/TransformerTracker.swift @@ -10,6 +10,7 @@ import ParticlesKit import Utilities open class TransformerTracker: NSObject & TrackingProtocol { + open var userInfo: [String: String?]? public var excluded: Bool = false @@ -25,7 +26,7 @@ open class TransformerTracker: NSObject & TrackingProtocol { } } - open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { if !excluded { if let path = transform(path: path)?.trim() { if let action = action { diff --git a/PlatformParticles/PlatformParticles/_ViewController/TrackingViewController.swift b/PlatformParticles/PlatformParticles/_ViewController/TrackingViewController.swift index c54c0dbd..21c60f27 100644 --- a/PlatformParticles/PlatformParticles/_ViewController/TrackingViewController.swift +++ b/PlatformParticles/PlatformParticles/_ViewController/TrackingViewController.swift @@ -35,7 +35,7 @@ open class TrackingViewController: NavigableViewController, TrackingViewProtocol open func logView(path: String?, data: [String: Any]?, from: String?, time: Date?) { if let path = path, trackingData?.path != path { trackingData = TrackingData(path: path, data: data) - Tracking.shared?.view(path, data: data, from: from, time: time) + Tracking.shared?.view(path, data: data, from: from, time: time, revenue: nil, contextViewController: self) } } } diff --git a/Utilities/Utilities/_Tracker/_Shared/CompositeTracking.swift b/Utilities/Utilities/_Tracker/_Shared/CompositeTracking.swift index 1087233d..66a2d4fc 100644 --- a/Utilities/Utilities/_Tracker/_Shared/CompositeTracking.swift +++ b/Utilities/Utilities/_Tracker/_Shared/CompositeTracking.swift @@ -39,9 +39,9 @@ open class CompositeTracking: NSObject & TrackingProtocol { } } - open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { for tracking: TrackingProtocol in trackings { - tracking.view(path, action: action, data: data, from: from, time: time, revenue: revenue) + tracking.view(path, action: action, data: data, from: from, time: time, revenue: revenue, contextViewController: nil) } } diff --git a/Utilities/Utilities/_Tracker/_Shared/DebugTracking.swift b/Utilities/Utilities/_Tracker/_Shared/DebugTracking.swift index 38c41fa5..ec6a3c64 100644 --- a/Utilities/Utilities/_Tracker/_Shared/DebugTracking.swift +++ b/Utilities/Utilities/_Tracker/_Shared/DebugTracking.swift @@ -13,7 +13,7 @@ public class DebugTracking: NSObject & TrackingProtocol { public var excluded: Bool = false - public func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + public func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { if let path = path { let action = action ?? "" let from = from ?? "" diff --git a/Utilities/Utilities/_Tracker/_Shared/Tracking.swift b/Utilities/Utilities/_Tracker/_Shared/Tracking.swift index 35cecf53..a0eb3cc1 100644 --- a/Utilities/Utilities/_Tracker/_Shared/Tracking.swift +++ b/Utilities/Utilities/_Tracker/_Shared/Tracking.swift @@ -11,23 +11,26 @@ import Foundation public protocol TrackingProtocol: NSObjectProtocol { var userInfo: [String: String?]? { get set } var excluded: Bool { get set } - func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) + func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) func leave(_ path: String?) func log(event: String, data: [String: Any]?, revenue: NSNumber?) } public extension TrackingProtocol { + func view(_ path: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { + view(path, action: nil, data: data, from: from, time: time, revenue: revenue, contextViewController: contextViewController) + } func view(_ path: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { - view(path, action: nil, data: data, from: from, time: time, revenue: revenue) + view(path, action: nil, data: data, from: from, time: time, revenue: revenue, contextViewController: nil) } func view(_ path: String?, data: [String: Any]?, from: String?, time: Date?) { - view(path, action: nil, data: data, from: from, time: time, revenue: nil) + view(path, action: nil, data: data, from: from, time: time, revenue: nil, contextViewController: nil) } - func view(_ path: String?, data: [String: Any]?, from: String?) { - view(path, action: nil, data: data, from: from, time: nil, revenue: nil) + func view(_ path: String?, data: [String: Any]?, from: String?, contextViewController: UIViewController?) { + view(path, action: nil, data: data, from: from, time: nil, revenue: nil, contextViewController: nil) } func view(_ path: String?, data: [String: Any]?) { - view(path, action: nil, data: data, from: nil, time: nil, revenue: nil) + view(path, action: nil, data: data, from: nil, time: nil, revenue: nil, contextViewController: nil) } func log(event: String, data: [String: Any]?) { log(event: event, data: data, revenue: nil) diff --git a/dydxV4/dydxV4/_Tracking/dydxAmplitudeTracking.swift b/dydxV4/dydxV4/_Tracking/dydxAmplitudeTracking.swift index b4f2b360..1c840bc4 100644 --- a/dydxV4/dydxV4/_Tracking/dydxAmplitudeTracking.swift +++ b/dydxV4/dydxV4/_Tracking/dydxAmplitudeTracking.swift @@ -7,9 +7,10 @@ // import AmplitudeInjections +import UIKit public class dydxAmplitudeTracking: AmplitudeTracking { - override open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + override open func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { // Only track the ones required by growth } diff --git a/dydxV4/dydxV4/_Tracking/dydxCompositeTracking.swift b/dydxV4/dydxV4/_Tracking/dydxCompositeTracking.swift index c922105e..4f4078e7 100644 --- a/dydxV4/dydxV4/_Tracking/dydxCompositeTracking.swift +++ b/dydxV4/dydxV4/_Tracking/dydxCompositeTracking.swift @@ -11,6 +11,7 @@ import Utilities import dydxStateManager import Combine import Cartera +import FirebaseAnalytics enum UserProperty: String { case walletAddress @@ -79,13 +80,21 @@ public class dydxCompositeTracking: CompositeTracking { - override public func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?) { + override public func view(_ path: String?, action: String?, data: [String: Any]?, from: String?, time: Date?, revenue: NSNumber?, contextViewController: UIViewController?) { if let transformed = transform(events: viewEvents, path: path), let event = parser.asString(transformed["event"]) { - super.view(path, action: action, data: data, from: from, time: time, revenue: nil) + super.view(path, action: action, data: data, from: from, time: time, revenue: nil, contextViewController: contextViewController) let info = parser.asDictionary(transformed["info"]) ?? data ?? [String: Any]() log(event: event, data: info, revenue: revenue) } else { - super.view(path, action: action, data: data, from: from, time: time, revenue: revenue) + super.view(path, action: action, data: data, from: from, time: time, revenue: revenue, contextViewController: contextViewController) + } + if let contextViewController { + + log(event: AnalyticsEventScreenView, + data: [ + AnalyticsParameterScreenName: path as Any, + AnalyticsParameterScreenClass: String(describing: type(of: contextViewController)) + ]) } if let transformed = transform(events: onboardingEvents, path: path), let event = parser.asString(transformed["event"]) { var info = parser.asDictionary(transformed["info"]) ?? data ?? [String: Any]()