1+ @file:JvmName(" analyticsAndroid" )
2+ package dev.gitlive.firebase.analytics
3+
4+ import android.os.Bundle
5+ import android.os.IBinder
6+ import android.os.Parcelable
7+ import android.util.Size
8+ import android.util.SizeF
9+ import com.google.firebase.analytics.analytics
10+ import com.google.firebase.analytics.setConsent
11+ import dev.gitlive.firebase.Firebase
12+ import dev.gitlive.firebase.FirebaseApp
13+ import kotlinx.coroutines.tasks.await
14+ import java.io.Serializable
15+
16+ actual val Firebase .analytics: FirebaseAnalytics
17+ get() = FirebaseAnalytics (com.google.firebase.Firebase .analytics)
18+
19+ actual fun Firebase.analytics (app : FirebaseApp ) =
20+ FirebaseAnalytics (com.google.firebase.Firebase .analytics)
21+
22+ actual class FirebaseAnalytics (val android : com.google.firebase.analytics.FirebaseAnalytics ) {
23+ actual fun logEvent (name : String , parameters : Map <String , Any >? ) {
24+ android.logEvent(name, parameters?.toBundle())
25+ }
26+ actual fun setUserProperty (name : String , value : String ) {
27+ android.setUserProperty(name, value)
28+ }
29+ actual fun setUserId (id : String ) {
30+ android.setUserId(id)
31+ }
32+ actual fun resetAnalyticsData () {
33+ android.resetAnalyticsData()
34+ }
35+ actual fun setDefaultEventParameters (parameters : Map <String , String >) {
36+ android.setDefaultEventParameters(parameters.toBundle())
37+ }
38+
39+ actual fun setAnalyticsCollectionEnabled (enabled : Boolean ) {
40+ android.setAnalyticsCollectionEnabled(enabled)
41+ }
42+
43+ actual fun setSessionTimeoutInterval (sessionTimeoutInterval : Long ) {
44+ android.setSessionTimeoutDuration(sessionTimeoutInterval)
45+ }
46+
47+ actual suspend fun getSessionId (): Long? = android.sessionId.await()
48+
49+ actual fun setConsent (consentSettings : Map <ConsentType , ConsentStatus >) {
50+ consentSettings.entries.associate {
51+ it.key to when (it.value) {
52+ ConsentStatus .GRANTED -> com.google.firebase.analytics.FirebaseAnalytics .ConsentStatus .GRANTED
53+ ConsentStatus .DENIED -> com.google.firebase.analytics.FirebaseAnalytics .ConsentStatus .DENIED
54+ }
55+ }.let { androidConsentSettings ->
56+ android.setConsent {
57+ androidConsentSettings.entries.forEach {
58+ when (it.key) {
59+ ConsentType .AD_PERSONALIZATION ->
60+ this .adPersonalization = it.value
61+
62+ ConsentType .AD_STORAGE ->
63+ this .adStorage = it.value
64+
65+ ConsentType .AD_USER_DATA ->
66+ this .adUserData = it.value
67+
68+ ConsentType .ANALYTICS_STORAGE ->
69+ this .analyticsStorage = it.value
70+ }
71+ }
72+
73+ }
74+ }
75+ }
76+
77+ actual enum class ConsentType {
78+ AD_PERSONALIZATION ,
79+ AD_STORAGE ,
80+ AD_USER_DATA ,
81+ ANALYTICS_STORAGE
82+ }
83+
84+ actual enum class ConsentStatus {
85+ GRANTED ,
86+ DENIED
87+ }
88+ }
89+
90+ actual class FirebaseAnalyticsException (message : String ): Exception(message)
91+
92+ private fun Map <String , Any >.toBundle () = Bundle ().apply {
93+ forEach { (key, value) ->
94+ when (value::class ) {
95+ String ::class -> putString(key, value as String )
96+ Int ::class -> putInt(key, value as Int )
97+ Long ::class -> putLong(key, value as Long )
98+ Double ::class -> putDouble(key, value as Double )
99+ Boolean ::class -> putBoolean(key, value as Boolean )
100+ }
101+
102+ }
103+ }
0 commit comments