Skip to content

Commit dca0c81

Browse files
committed
Analytics improvements
1 parent afe72f5 commit dca0c81

File tree

1 file changed

+97
-6
lines changed

1 file changed

+97
-6
lines changed

Sources/SkipFirebaseAnalytics/SkipFirebaseAnalytics.swift

Lines changed: 97 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: LGPL-3.0-only WITH LGPL-3.0-linking-exception
22
#if !SKIP_BRIDGE
33
#if SKIP
4+
import Foundation
45
import SkipFirebaseCore
56
import kotlinx.coroutines.tasks.await
67

@@ -14,14 +15,104 @@ public final class Analytics {
1415
self.analytics = analytics
1516
}
1617

17-
// public static func analytics() -> Analytics {
18-
// Analytics(analytics: com.google.firebase.analytics.FirebaseAnalytics.getInstance())
19-
// }
18+
private static var instance: com.google.firebase.analytics.FirebaseAnalytics {
19+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(skip.foundation.ProcessInfo.processInfo.androidContext)
20+
}
2021

21-
public static func logEvent(_ name: String, parameters: [String: Any] = [:]) {
22+
private static func toBundle(_ parameters: [String: Any]?) -> android.os.Bundle? {
23+
guard let parameters = parameters else { return nil }
2224
let bundle = android.os.Bundle()
23-
// TODO: add parameters to bundle
24-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(skip.foundation.ProcessInfo.processInfo.androidContext).logEvent(name, bundle)
25+
for (key, value) in parameters {
26+
if let s = value as? String {
27+
bundle.putString(key, s)
28+
} else if let b = value as? Bool {
29+
bundle.putBoolean(key, b)
30+
} else if let i = value as? Int {
31+
bundle.putLong(key, Int64(i))
32+
} else if let l = value as? Int64 {
33+
bundle.putLong(key, l)
34+
} else if let d = value as? Double {
35+
bundle.putDouble(key, d)
36+
} else if let f = value as? Float {
37+
bundle.putFloat(key, f)
38+
} else {
39+
bundle.putString(key, "\(value)")
40+
}
41+
}
42+
return bundle
43+
}
44+
45+
public static func logEvent(_ name: String, parameters: [String: Any]? = nil) {
46+
instance.logEvent(name, toBundle(parameters ?? [:]))
47+
}
48+
49+
public static func setUserProperty(_ value: String?, forName name: String) {
50+
instance.setUserProperty(name, value)
51+
}
52+
53+
public static func setUserID(_ userID: String?) {
54+
instance.setUserId(userID)
55+
}
56+
57+
public static func setAnalyticsCollectionEnabled(_ enabled: Bool) {
58+
instance.setAnalyticsCollectionEnabled(enabled)
59+
}
60+
61+
public static func setDefaultEventParameters(_ parameters: [String: Any]?) {
62+
instance.setDefaultEventParameters(toBundle(parameters))
63+
}
64+
65+
public static func resetAnalyticsData() {
66+
instance.resetAnalyticsData()
67+
}
68+
69+
public static func appInstanceID() async -> String? {
70+
return instance.getAppInstanceId().await()
71+
}
72+
73+
public static func sessionID() async throws -> Int64 {
74+
let id = instance.getSessionId().await()
75+
return id as Int64
76+
}
77+
78+
public static func setSessionTimeoutInterval(_ seconds: TimeInterval) {
79+
instance.setSessionTimeoutDuration(Int64(seconds * 1000.0))
80+
}
81+
82+
public static func setConsent(_ consentSettings: [ConsentType: ConsentStatus]) {
83+
let map = java.util.HashMap<com.google.firebase.analytics.FirebaseAnalytics.ConsentType, com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus>()
84+
for (type, status) in consentSettings {
85+
map.put(type.platformValue, status.platformValue)
86+
}
87+
instance.setConsent(map)
88+
}
89+
}
90+
91+
public enum ConsentType {
92+
case adPersonalization
93+
case adStorage
94+
case adUserData
95+
case analyticsStorage
96+
97+
public var platformValue: com.google.firebase.analytics.FirebaseAnalytics.ConsentType {
98+
switch self {
99+
case .adPersonalization: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_PERSONALIZATION
100+
case .adStorage: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_STORAGE
101+
case .adUserData: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_USER_DATA
102+
case .analyticsStorage: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE
103+
}
104+
}
105+
}
106+
107+
public enum ConsentStatus {
108+
case granted
109+
case denied
110+
111+
public var platformValue: com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus {
112+
switch self {
113+
case .granted: return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.GRANTED
114+
case .denied: return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED
115+
}
25116
}
26117
}
27118

0 commit comments

Comments
 (0)