mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Ensure we never call posthog.identify
if user did not consent, because it sends request <server>/decide/?v=2
to the analytic server.
This commit is contained in:
parent
3ab465ea93
commit
5de386c3c9
@ -31,6 +31,7 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
@ -60,6 +61,9 @@ class DefaultVectorAnalytics @Inject constructor(
|
|||||||
private var userConsent: Boolean? = null
|
private var userConsent: Boolean? = null
|
||||||
private var analyticsId: String? = null
|
private var analyticsId: String? = null
|
||||||
|
|
||||||
|
// Cache for the properties to send
|
||||||
|
private var pendingUserProperties: UserProperties? = null
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
observeUserConsent()
|
observeUserConsent()
|
||||||
observeAnalyticsId()
|
observeAnalyticsId()
|
||||||
@ -112,6 +116,7 @@ class DefaultVectorAnalytics @Inject constructor(
|
|||||||
|
|
||||||
private suspend fun identifyPostHog() {
|
private suspend fun identifyPostHog() {
|
||||||
val id = analyticsId ?: return
|
val id = analyticsId ?: return
|
||||||
|
if (!userConsent.orFalse()) return
|
||||||
if (id.isEmpty()) {
|
if (id.isEmpty()) {
|
||||||
Timber.tag(analyticsTag.value).d("reset")
|
Timber.tag(analyticsTag.value).d("reset")
|
||||||
posthog?.reset()
|
posthog?.reset()
|
||||||
@ -126,7 +131,7 @@ class DefaultVectorAnalytics @Inject constructor(
|
|||||||
.onEach { consent ->
|
.onEach { consent ->
|
||||||
Timber.tag(analyticsTag.value).d("User consent updated to $consent")
|
Timber.tag(analyticsTag.value).d("User consent updated to $consent")
|
||||||
userConsent = consent
|
userConsent = consent
|
||||||
optOutPostHog()
|
initOrStopPostHog()
|
||||||
initOrStopSentry()
|
initOrStopSentry()
|
||||||
}
|
}
|
||||||
.launchIn(globalScope)
|
.launchIn(globalScope)
|
||||||
@ -141,8 +146,20 @@ class DefaultVectorAnalytics @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun optOutPostHog() {
|
private suspend fun initOrStopPostHog() {
|
||||||
userConsent?.let { posthog?.optOut(!it) }
|
userConsent?.let { _userConsent ->
|
||||||
|
when (_userConsent) {
|
||||||
|
true -> {
|
||||||
|
posthog?.optOut(false)
|
||||||
|
identifyPostHog()
|
||||||
|
pendingUserProperties?.let { doUpdateUserProperties(it) }
|
||||||
|
pendingUserProperties = null
|
||||||
|
}
|
||||||
|
false -> {
|
||||||
|
posthog?.optOut(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun capture(event: VectorAnalyticsEvent) {
|
override fun capture(event: VectorAnalyticsEvent) {
|
||||||
@ -160,7 +177,17 @@ class DefaultVectorAnalytics @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun updateUserProperties(userProperties: UserProperties) {
|
override fun updateUserProperties(userProperties: UserProperties) {
|
||||||
posthog?.identify(REUSE_EXISTING_ID, userProperties.getProperties()?.toPostHogUserProperties(), IGNORED_OPTIONS)
|
if (userConsent == true) {
|
||||||
|
doUpdateUserProperties(userProperties)
|
||||||
|
} else {
|
||||||
|
pendingUserProperties = userProperties
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun doUpdateUserProperties(userProperties: UserProperties) {
|
||||||
|
posthog
|
||||||
|
?.takeIf { userConsent == true }
|
||||||
|
?.identify(REUSE_EXISTING_ID, userProperties.getProperties()?.toPostHogUserProperties(), IGNORED_OPTIONS)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Map<String, Any?>?.toPostHogProperties(): Properties? {
|
private fun Map<String, Any?>?.toPostHogProperties(): Properties? {
|
||||||
|
Loading…
Reference in New Issue
Block a user