11// SPDX-License-Identifier: LGPL-3.0-only WITH LGPL-3.0-linking-exception
22#if !SKIP_BRIDGE
33#if SKIP
4+ import Foundation
45import SkipFirebaseCore
56import 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