Skip to content

Commit 35df799

Browse files
author
Bas Buijsen
committed
add setConsent
1 parent 744b704 commit 35df799

File tree

6 files changed

+128
-18
lines changed

6 files changed

+128
-18
lines changed

firebase-analytics/src/androidMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.gitlive.firebase.analytics
22

33
import android.os.Bundle
44
import com.google.firebase.analytics.analytics
5+
import com.google.firebase.analytics.setConsent
56
import dev.gitlive.firebase.Firebase
67
import kotlinx.coroutines.tasks.await
78

@@ -39,6 +40,46 @@ actual class FirebaseAnalytics(val android: com.google.firebase.analytics.Fireba
3940
}
4041

4142
actual suspend fun getSessionId(): Long? = android.sessionId.await()
43+
44+
actual fun setConsent(consentSettings: Map<ConsentType, ConsentStatus>) {
45+
consentSettings.entries.associate {
46+
it.key to when (it.value) {
47+
ConsentStatus.GRANTED -> com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.GRANTED
48+
ConsentStatus.DENIED -> com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED
49+
}
50+
}.let { androidConsentSettings ->
51+
android.setConsent {
52+
androidConsentSettings.entries.forEach {
53+
when (it.key) {
54+
ConsentType.AD_PERSONALIZATION ->
55+
this.adUserData = it.value
56+
57+
ConsentType.AD_STORAGE ->
58+
this.adUserData = it.value
59+
60+
ConsentType.AD_USER_DATA ->
61+
this.adUserData = it.value
62+
63+
ConsentType.ANALYTICS_STORAGE ->
64+
this.adUserData = it.value
65+
}
66+
}
67+
68+
}
69+
}
70+
}
71+
72+
actual enum class ConsentType {
73+
AD_PERSONALIZATION,
74+
AD_STORAGE,
75+
AD_USER_DATA,
76+
ANALYTICS_STORAGE
77+
}
78+
79+
actual enum class ConsentStatus {
80+
GRANTED,
81+
DENIED
82+
}
4283
}
4384

4485
actual class FirebaseAnalyticsException(message: String): Exception(message)

firebase-analytics/src/commonMain/kotlin/dev/gitlive/firebase/analytics/AnalyticEventConstants.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,4 @@ val FirebaseAnalytics.UserProperty: FirebaseAnalyticsUserProperty
120120
object FirebaseAnalyticsUserProperty {
121121
const val ALLOW_AD_PERSONALIZATION_SIGNALS: String = "allow_personalized_ads"
122122
const val SIGN_UP_METHOD: String = "sign_up_method"
123-
}
123+
}

firebase-analytics/src/commonMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ expect class FirebaseAnalytics {
1414
suspend fun getSessionId(): Long?
1515
fun resetAnalyticsData()
1616
fun setDefaultEventParameters(parameters: Map<String, String>)
17+
fun setConsent(consentSettings: Map<ConsentType, ConsentStatus>)
18+
19+
enum class ConsentType {
20+
AD_PERSONALIZATION,
21+
AD_STORAGE,
22+
AD_USER_DATA,
23+
ANALYTICS_STORAGE
24+
}
25+
26+
enum class ConsentStatus {
27+
GRANTED,
28+
DENIED
29+
}
1730
}
1831

1932
expect class FirebaseAnalyticsException

firebase-analytics/src/iosMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.gitlive.firebase.analytics
22

33
import cocoapods.FirebaseAnalytics.FIRAnalytics
4+
import cocoapods.FirebaseAnalytics.setConsent
45
import dev.gitlive.firebase.Firebase
56
import dev.gitlive.firebase.FirebaseException
67
import kotlinx.coroutines.CompletableDeferred
@@ -48,6 +49,25 @@ actual class FirebaseAnalytics(val ios: FIRAnalytics.Companion) {
4849
}.toMap()
4950
ios.setDefaultEventParameters(mappedParameters)
5051
}
52+
53+
actual fun setConsent(consentSettings: Map<ConsentType, ConsentStatus>) {
54+
val mappedConsentSettings: Map<Any?, *> = consentSettings.map {
55+
it.key.name to it.value.name
56+
}.toMap()
57+
ios.setConsent(mappedConsentSettings)
58+
}
59+
60+
actual enum class ConsentType {
61+
AD_PERSONALIZATION,
62+
AD_STORAGE,
63+
AD_USER_DATA,
64+
ANALYTICS_STORAGE
65+
}
66+
67+
actual enum class ConsentStatus {
68+
GRANTED,
69+
DENIED
70+
}
5171
}
5272

5373
actual class FirebaseAnalyticsException(message: String): FirebaseException(message)

firebase-analytics/src/jsMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ actual class FirebaseAnalytics(val js: dev.gitlive.firebase.analytics.externals.
2121
name: String,
2222
parameters: Map<String, String>?
2323
) {
24-
jsLogEvent(js, name, parameters)
24+
dev.gitlive.firebase.analytics.externals.logEvent(js, name, parameters)
2525
}
2626

2727
actual fun logEvent(
@@ -34,29 +34,54 @@ actual class FirebaseAnalytics(val js: dev.gitlive.firebase.analytics.externals.
3434
}
3535

3636
actual fun setUserProperty(name: String, value: String) {
37-
jsSetUserProperty(js, name, value)
37+
dev.gitlive.firebase.analytics.externals.setUserProperty(js, name, value)
3838
}
3939

4040
actual fun setUserId(id: String) {
41-
jsSetUserId(js, id)
41+
dev.gitlive.firebase.analytics.externals.setUserId(js, id)
4242
}
4343

4444
actual fun setAnalyticsCollectionEnabled(enabled: Boolean) {
45-
jsSetAnalyticsCollectionEnabled(js, enabled)
45+
dev.gitlive.firebase.analytics.externals.setAnalyticsCollectionEnabled(js, enabled)
4646
}
4747

4848
actual fun setSessionTimeoutInterval(sessionTimeoutInterval: Long) {
49-
jsSetSessionTimeoutInterval(js, sessionTimeoutInterval)
49+
dev.gitlive.firebase.analytics.externals.setSessionTimeoutInterval(js, sessionTimeoutInterval)
5050
}
5151

52-
actual suspend fun getSessionId(): Long? = rethrow { jsGetSessionId(js).await() }
52+
actual suspend fun getSessionId(): Long? = rethrow { dev.gitlive.firebase.analytics.externals.getSessionId(js).await() }
5353

5454
actual fun resetAnalyticsData() {
55-
jsResetAnalyticsData(js)
55+
dev.gitlive.firebase.analytics.externals.resetAnalyticsData(js)
5656
}
5757

5858
actual fun setDefaultEventParameters(parameters: Map<String, String>) {
59-
jsSetDefaultEventParameters(js, parameters)
59+
dev.gitlive.firebase.analytics.externals.setDefaultEventParameters(js, parameters)
60+
}
61+
62+
actual fun setConsent(consentSettings: Map<ConsentType, ConsentStatus>) {
63+
val consent = dev.gitlive.firebase.analytics.externals.ConsentSettings()
64+
consentSettings.forEach {
65+
when (it.key) {
66+
ConsentType.AD_PERSONALIZATION -> consent.ad_personalization = it.value.name
67+
ConsentType.AD_STORAGE -> consent.ad_storage = it.value.name
68+
ConsentType.AD_USER_DATA -> consent.ad_user_data = it.value.name
69+
ConsentType.ANALYTICS_STORAGE -> consent.analytics_storage = it.value.name
70+
}
71+
}
72+
dev.gitlive.firebase.analytics.externals.setConsent(js, consent)
73+
}
74+
75+
actual enum class ConsentType {
76+
AD_PERSONALIZATION,
77+
AD_STORAGE,
78+
AD_USER_DATA,
79+
ANALYTICS_STORAGE
80+
}
81+
82+
actual enum class ConsentStatus {
83+
GRANTED,
84+
DENIED
6085
}
6186
}
6287

firebase-analytics/src/jsMain/kotlin/dev/gitlive/firebase/analytics/externals/analytics.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,24 @@ import kotlin.js.Promise
66

77
external fun getAnalytics(app: FirebaseApp? = definedExternally): FirebaseAnalytics
88

9-
external fun jsLogEvent(app: FirebaseAnalytics, name: String, parameters: Map<String, String>?)
10-
external fun jsSetUserProperty(app: FirebaseAnalytics, name: String, value: String)
11-
external fun jsSetUserId(app: FirebaseAnalytics, id: String)
12-
external fun jsResetAnalyticsData(app: FirebaseAnalytics)
13-
external fun jsSetDefaultEventParameters(app: FirebaseAnalytics, parameters: Map<String, String>)
14-
external fun jsSetAnalyticsCollectionEnabled(app: FirebaseAnalytics, enabled: Boolean)
15-
external fun jsSetSessionTimeoutInterval(app: FirebaseAnalytics, sessionTimeoutInterval: Long)
16-
external fun jsGetSessionId(app: FirebaseAnalytics): Promise<Long?>
9+
external fun logEvent(app: FirebaseAnalytics, name: String, parameters: Map<String, String>?)
10+
external fun setUserProperty(app: FirebaseAnalytics, name: String, value: String)
11+
external fun setUserId(app: FirebaseAnalytics, id: String)
12+
external fun resetAnalyticsData(app: FirebaseAnalytics)
13+
external fun setDefaultEventParameters(app: FirebaseAnalytics, parameters: Map<String, String>)
14+
external fun setAnalyticsCollectionEnabled(app: FirebaseAnalytics, enabled: Boolean)
15+
external fun setSessionTimeoutInterval(app: FirebaseAnalytics, sessionTimeoutInterval: Long)
16+
external fun getSessionId(app: FirebaseAnalytics): Promise<Long?>
17+
external fun setConsent(app: FirebaseAnalytics, consentSettings: ConsentSettings)
1718

18-
external interface FirebaseAnalytics
19+
external interface FirebaseAnalytics
20+
21+
external class ConsentSettings() {
22+
var ad_personalization: String?
23+
var ad_storage: String?
24+
var ad_user_data: String?
25+
var analytics_storage: String?
26+
var functionality_storage: String?
27+
var personalization_storage: String?
28+
var security_storage: String?
29+
}

0 commit comments

Comments
 (0)