Created
February 10, 2022 07:18
-
-
Save aryamansharda/c0b5399de9fde061e9d46b61887be527 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
// 1 | |
protocol AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) | |
} | |
// 2 | |
import FirebaseAnalytics | |
struct FirebaseAnalyticsProvider: AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) { | |
Analytics.logEvent(name, parameters: metadata) | |
} | |
} | |
// 3 | |
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()) | |
// 4 | |
AnalyticsManager.shared.track(eventName: "user_clicked_forgot_password", | |
metadata: ["userID": "aryamansharda"]) | |
// 5 | |
class LocalAnalyticsProvider: AnalyticsProvider { | |
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) { | |
print("\(name): \(metadata)") | |
} | |
} | |
// 6 | |
// 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