diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 00e2ae0a86..b4783eda19 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -10,6 +10,7 @@ import com.orhanobut.logger.Logger import com.tangem.Log import com.tangem.LogFormat import com.tangem.blockchain.common.BlockchainSdkConfig +import com.tangem.blockchain.common.ExceptionHandler import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.core.analytics.Analytics @@ -31,6 +32,7 @@ import com.tangem.features.tokendetails.featuretoggles.TokenDetailsFeatureToggle import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles import com.tangem.tap.common.analytics.AnalyticsFactory import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder +import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler import com.tangem.tap.common.analytics.handlers.amplitude.AmplitudeAnalyticsHandler import com.tangem.tap.common.analytics.handlers.appsFlyer.AppsFlyerAnalyticsHandler import com.tangem.tap.common.analytics.handlers.firebase.FirebaseAnalyticsHandler @@ -157,6 +159,9 @@ class TapApplication : Application(), ImageLoaderFactory { @Inject lateinit var scanCardProcessor: ScanCardProcessor + @Inject + lateinit var blockchainExceptionHandler: BlockchainExceptionHandler + override fun onCreate() { super.onCreate() @@ -280,6 +285,7 @@ class TapApplication : Application(), ImageLoaderFactory { jsonConverter = MoshiConverter.sdkMoshiConverter, ) factory.build(Analytics, buildData) + ExceptionHandler.append(blockchainExceptionHandler) } private fun initFeedbackManager( diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt index 47623e1f10..28744c2332 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt @@ -157,5 +157,7 @@ sealed class AnalyticsParam { const val ERROR_KEY = "Error Key" const val CREATION_TYPE = "Creation type" const val DAPP_NAME = "DApp Name" + const val BLOCKCHAIN_EXCEPTION_HOST = "exception_host" + const val BLOCKCHAIN_SELECTED_HOST = "selected_host" } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/BlockchainExceptionEvent.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/BlockchainExceptionEvent.kt new file mode 100644 index 0000000000..385ab3e517 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/BlockchainExceptionEvent.kt @@ -0,0 +1,17 @@ +package com.tangem.tap.common.analytics.events + +import com.tangem.core.analytics.models.AnalyticsEvent + +class BlockchainExceptionEvent( + selectedHost: String, + exceptionHost: String, + error: String, +) : AnalyticsEvent( + category = "BlockchainSdk", + event = "Exception", + params = mapOf( + AnalyticsParam.BLOCKCHAIN_SELECTED_HOST to selectedHost, + AnalyticsParam.BLOCKCHAIN_EXCEPTION_HOST to exceptionHost, + AnalyticsParam.ERROR_DESCRIPTION to error, + ), +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/handlers/BlockchainExceptionHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/handlers/BlockchainExceptionHandler.kt new file mode 100644 index 0000000000..b227a5f1f1 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/handlers/BlockchainExceptionHandler.kt @@ -0,0 +1,20 @@ +package com.tangem.tap.common.analytics.handlers + +import com.tangem.blockchain.common.ExceptionHandlerOutput +import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.tap.common.analytics.events.BlockchainExceptionEvent +import javax.inject.Inject + +class BlockchainExceptionHandler @Inject constructor( + private val analyticsHandler: AnalyticsEventHandler, +) : ExceptionHandlerOutput { + override fun handleApiSwitch(currentHost: String, nextHost: String, message: String) { + analyticsHandler.send( + BlockchainExceptionEvent( + selectedHost = nextHost, + exceptionHost = currentHost, + error = message, + ), + ) + } +} \ No newline at end of file