Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-20 18:27:58 +04:00
parent 85bb0d4214
commit 7c9f58f088
6 changed files with 22 additions and 32 deletions

View file

@ -3,7 +3,9 @@ package com.tangem.tap.common.analytics.handlers.amplitude
import com.tangem.core.analytics.api.AnalyticsHandler
import com.tangem.core.analytics.api.AnalyticsUserIdHandler
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.tap.common.analytics.AnalyticsEventsLogger
import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder
import com.tangem.wallet.BuildConfig
class AmplitudeAnalyticsHandler(
private val client: AmplitudeAnalyticsClient,
@ -29,10 +31,20 @@ class AmplitudeAnalyticsHandler(
class Builder : AnalyticsHandlerBuilder {
override fun build(data: AnalyticsHandlerBuilder.Data): AnalyticsHandler {
return AmplitudeAnalyticsHandler(
client = if (data.logConfig.isAmplitudeLogEnabled) {
AmplitudeLogClient(data.jsonConverter)
client = if (BuildConfig.TESTER_MENU_ENABLED) {
AmplitudeClient(
application = data.application,
key = requireNotNull(data.config.amplitudeApiKeyDev) {
"Amplitude api key not found in ${BuildConfig.BUILD_TYPE}"
},
logger = AnalyticsEventsLogger(name = ID, jsonConverter = data.jsonConverter),
)
} else {
AmplitudeClient(data.application, data.config.amplitudeApiKey)
AmplitudeClient(
application = data.application,
key = data.config.amplitudeApiKey,
logger = null,
)
},
)
}

View file

@ -5,7 +5,9 @@ import com.amplitude.api.Amplitude
import com.amplitude.api.AmplitudeClient
import com.tangem.core.analytics.api.EventLogger
import com.tangem.core.analytics.api.UserIdHolder
import com.tangem.tap.common.analytics.AnalyticsEventsLogger
import com.tangem.utils.converter.Converter
import com.tangem.wallet.BuildConfig
import org.json.JSONObject
/**
@ -16,6 +18,7 @@ interface AmplitudeAnalyticsClient : EventLogger, UserIdHolder
internal class AmplitudeClient(
application: Application,
key: String,
private val logger: AnalyticsEventsLogger?,
) : AmplitudeAnalyticsClient {
private val client: AmplitudeClient = Amplitude.getInstance()
@ -23,6 +26,7 @@ internal class AmplitudeClient(
init {
client.initialize(application, key)
client.enableForegroundTracking(application)
client.enableLogging(BuildConfig.TESTER_MENU_ENABLED)
}
override fun setUserId(userId: String) {
@ -34,6 +38,7 @@ internal class AmplitudeClient(
}
override fun logEvent(event: String, params: Map<String, String>) {
logger?.logEvent(event, params)
client.logEvent(event, ParamsToJSONObjectConverter().convert(params))
}
}

View file

@ -1,28 +0,0 @@
package com.tangem.tap.common.analytics.handlers.amplitude
import com.tangem.common.json.MoshiJsonConverter
import com.tangem.tap.common.analytics.AnalyticsEventsLogger
/**
[REDACTED_AUTHOR]
*/
internal class AmplitudeLogClient(
jsonConverter: MoshiJsonConverter,
) : AmplitudeAnalyticsClient {
private val logger: AnalyticsEventsLogger = AnalyticsEventsLogger(AmplitudeAnalyticsHandler.ID, jsonConverter)
private var userId: String? = null
override fun setUserId(userId: String) {
this.userId = userId
}
override fun clearUserId() {
this.userId = null
}
override fun logEvent(event: String, params: Map<String, String>) {
logger.logEvent(event, params)
}
}

View file

@ -10,6 +10,7 @@ data class EnvironmentConfig(
val mercuryoWidgetId: String = "",
val mercuryoSecret: String = "",
val amplitudeApiKey: String = "",
val amplitudeApiKeyDev: String? = null,
val appsFlyerApiKey: String = "",
val appsAppId: String = "",
val blockchainSdkConfig: BlockchainSdkConfig = BlockchainSdkConfig(),

View file

@ -28,6 +28,7 @@ internal object GeneratedEnvironmentConfigConverter {
mercuryoSecret = GeneratedEnvironmentConfig.mercuryoSecret,
blockchainSdkConfig = createBlockchainSdkConfig(),
amplitudeApiKey = GeneratedEnvironmentConfig.amplitudeApiKey,
amplitudeApiKeyDev = GeneratedEnvironmentConfig.amplitudeApiKeyDev,
appsFlyerApiKey = AppsFlyer.appsFlyerDevKey,
appsAppId = AppsFlyer.appsFlyerAppID,
walletConnectProjectId = GeneratedEnvironmentConfig.walletConnectProjectId,

View file

@ -15,7 +15,6 @@ object NetworkLogConfig {
object AnalyticsHandlersLogConfig {
val isFirebaseLogEnabled: Boolean = BuildConfig.LOG_ENABLED
val isAmplitudeLogEnabled: Boolean = BuildConfig.LOG_ENABLED
val isAppsflyerLogEnabled: Boolean = BuildConfig.LOG_ENABLED
val isCustomerIoLogEnabled: Boolean = BuildConfig.LOG_ENABLED
}