Last active
February 20, 2022 13:26
-
-
Save st-small/4bdc5f582a86d244a91cd0abb808c938 to your computer and use it in GitHub Desktop.
AnalyticsManager
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) | |
} | |
import FirebaseAnalytics | |
struct FirebaseAnalyticsProvider: AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) { | |
Analytics.logEvent(name, parameters: metadata) | |
} | |
} | |
class AnalyticsManager { | |
private var provider: AnalyticsProvider? | |
static var shared = AnalyticsManager() | |
private init() {} | |
func configure(provider: AnalyticsProvider) { | |
self.provider = provider | |
} | |
func track(eventName: String, metadata: [String: Any]?) { | |
guard let provider = provider else { | |
print("Analytics provider not provided.") | |
return | |
} | |
provider.sendAnalyticsEvent(named: eventName, metadata: metadata) | |
} | |
} | |
// Somewhere else in the code - AppDelegate, perhaps. | |
AnalyticsManager.shared.configure(provider: FirebaseAnalyticsProvider()) | |
AnalyticsManager.shared.track(eventName: "user_clicked_forgot_password", | |
metadata: ["userID": "aryamansharda"]) | |
class LocalAnalyticsProvider: AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) { | |
print("\(name): \(metadata)") | |
} | |
} | |
// AppDelegate | |
#if DEBUG | |
AnalyticsManager.shared.configure(provider: LocalAnalyticsProvider()) | |
#else | |
AnalyticsManager.shared.configure(provider: FirebaseAnalyticsProvider()) | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment