Updated on 2026-08-14

This commit is contained in:
Tangem 2023-02-17 13:40:03 +03:00
parent 61bd233942
commit 69fe86f07c
8 changed files with 70 additions and 11 deletions

View file

@ -61,7 +61,10 @@ sealed class AnalyticsParam {
} }
companion object Key { companion object Key {
const val BatchId = "Batch" const val Batch = "Batch"
const val ProductType = "Product Type"
const val Firmware = "Firmware"
const val Currency = "Currency"
const val ErrorDescription = "Error Description" const val ErrorDescription = "Error Description"
const val ErrorCode = "Error Code" const val ErrorCode = "Error Code"
const val ErrorKey = "Error Key" const val ErrorKey = "Error Key"

View file

@ -19,14 +19,14 @@ sealed class Basic(
event = "Signed in", event = "Signed in",
params = mapOf( params = mapOf(
"State" to state.value, "State" to state.value,
"Currency" to currency.value, AnalyticsParam.Currency to currency.value,
AnalyticsParam.BatchId to batch, AnalyticsParam.Batch to batch,
), ),
) )
class ToppedUp(currency: AnalyticsParam.CardCurrency) : Basic( class ToppedUp(currency: AnalyticsParam.CardCurrency) : Basic(
event = "Topped up", event = "Topped up",
params = mapOf("Currency" to currency.value), params = mapOf(AnalyticsParam.Currency to currency.value),
) )
class ScanError(error: Throwable) : Basic( class ScanError(error: Throwable) : Basic(

View file

@ -51,7 +51,7 @@ sealed class Onboarding(
class ButtonBuyCrypto(currency: AnalyticsParam.CurrencyType) : Topup( class ButtonBuyCrypto(currency: AnalyticsParam.CurrencyType) : Topup(
event = "Button - Buy Crypto", event = "Button - Buy Crypto",
params = mapOf("Currency" to currency.value), params = mapOf(AnalyticsParam.Currency to currency.value),
) )
class ButtonShowWalletAddress : Topup("Button - Show the Wallet Address") class ButtonShowWalletAddress : Topup("Button - Show the Wallet Address")

View file

@ -1,7 +1,7 @@
package com.tangem.tap.common.analytics.paramsInterceptor package com.tangem.tap.common.analytics.paramsInterceptor
import com.tangem.core.analytics.api.ParamsInterceptor
import com.tangem.core.analytics.AnalyticsEvent import com.tangem.core.analytics.AnalyticsEvent
import com.tangem.core.analytics.api.ParamsInterceptor
import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.AnalyticsParam
/** /**
@ -16,6 +16,6 @@ class BatchIdParamsInterceptor(
override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true
override fun intercept(params: MutableMap<String, String>) { override fun intercept(params: MutableMap<String, String>) {
params[AnalyticsParam.BatchId] = batchId params[AnalyticsParam.Batch] = batchId
} }
} }

View file

@ -0,0 +1,56 @@
package com.tangem.tap.common.analytics.paramsInterceptor
import com.tangem.core.analytics.AnalyticsEvent
import com.tangem.core.analytics.api.ParamsInterceptor
import com.tangem.domain.common.ProductType
import com.tangem.domain.common.ScanResponse
import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter
import com.tangem.tap.common.analytics.events.AnalyticsParam
import com.tangem.tap.features.demo.DemoHelper
/**
[REDACTED_AUTHOR]
*/
class CardContextInterceptor(
private val scanResponse: ScanResponse?,
) : ParamsInterceptor {
override fun id(): String = CardContextInterceptor.id()
override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true
override fun intercept(params: MutableMap<String, String>) {
scanResponse ?: return
val card = scanResponse.card
params[AnalyticsParam.Batch] = card.batchId
params[AnalyticsParam.ProductType] = getProductType(scanResponse)
params[AnalyticsParam.Firmware] = card.firmwareVersion.stringValue
ParamCardCurrencyConverter().convert(scanResponse)?.let {
params[AnalyticsParam.Currency] = it.value
}
}
private fun getProductType(scanResponse: ScanResponse): String {
return when (scanResponse.productType) {
ProductType.Note -> "Note"
ProductType.Twins -> "Twin"
ProductType.Wallet -> "Wallet"
ProductType.SaltPay -> when (scanResponse.isSaltPayVisa()) {
true -> "Visa"
else -> "Visa Backup"
}
ProductType.Start2Coin -> "Start2Coin"
else -> when (DemoHelper.isDemoCard(scanResponse)) {
// TODO: separate demo cards
true -> "Demo Wallet | Demo Note"
else -> "Other"
}
}
}
companion object {
fun id(): String = CardContextInterceptor::class.java.simpleName
}
}

View file

@ -54,8 +54,8 @@ object Analytics : GlobalAnalyticsEventHandler {
paramsInterceptors[interceptor.id()] = interceptor paramsInterceptors[interceptor.id()] = interceptor
} }
override fun removeParamsInterceptor(interceptor: ParamsInterceptor): ParamsInterceptor? { override fun removeParamsInterceptor(interceptorId: String): ParamsInterceptor? {
return paramsInterceptors.remove(interceptor.id()) return paramsInterceptors.remove(interceptorId)
} }
override fun send(event: AnalyticsEvent) { override fun send(event: AnalyticsEvent) {

View file

@ -13,5 +13,5 @@ interface ParamsInterceptor {
interface ParamsInterceptorHolder { interface ParamsInterceptorHolder {
fun addParamsInterceptor(interceptor: ParamsInterceptor) fun addParamsInterceptor(interceptor: ParamsInterceptor)
fun removeParamsInterceptor(interceptor: ParamsInterceptor): ParamsInterceptor? fun removeParamsInterceptor(interceptorId: String): ParamsInterceptor?
} }

View file

@ -22,5 +22,5 @@ object NetworkLogConfig {
object AnalyticsHandlersLogConfig { object AnalyticsHandlersLogConfig {
val firebase: Boolean = false val firebase: Boolean = false
val appsFlyer: Boolean = false val appsFlyer: Boolean = false
val amplitude: Boolean = false val amplitude: Boolean = true
} }