Updated on 2026-08-14
This commit is contained in:
parent
f2bf27ee5f
commit
3e79411138
7 changed files with 62 additions and 1 deletions
|
|
@ -0,0 +1,24 @@
|
|||
package com.tangem.tap.common.analytics.handlers.firebase
|
||||
|
||||
import com.google.firebase.analytics.ktx.analytics
|
||||
import com.google.firebase.ktx.Firebase
|
||||
import com.tangem.core.analytics.AppInstanceIdProvider
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import timber.log.Timber
|
||||
import kotlin.coroutines.resume
|
||||
|
||||
internal class FirebaseAppInstanceIdProvider : AppInstanceIdProvider {
|
||||
|
||||
override suspend fun getAppInstanceId(): String? = suspendCancellableCoroutine { continuation ->
|
||||
Firebase.analytics.appInstanceId
|
||||
.addOnSuccessListener { continuation.resume(it) }
|
||||
.addOnFailureListener {
|
||||
Timber.w("Fail to get appInstanceId")
|
||||
continuation.resume(null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getAppInstanceIdSync(): String? {
|
||||
return Firebase.analytics.appInstanceId.result
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
package com.tangem.tap.di.analytics
|
||||
|
||||
import com.tangem.core.analytics.AppInstanceIdProvider
|
||||
import com.tangem.core.analytics.utils.AnalyticsContextProxy
|
||||
import com.tangem.domain.analytics.ChangeCardAnalyticsContextUseCase
|
||||
import com.tangem.tap.common.analytics.DefaultAnalyticsContextProxy
|
||||
import com.tangem.tap.common.analytics.DefaultChangeCardAnalyticsContextUseCase
|
||||
import com.tangem.tap.common.analytics.handlers.firebase.FirebaseAppInstanceIdProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -23,4 +25,8 @@ internal object AnalyticsModule {
|
|||
@Provides
|
||||
@Singleton
|
||||
fun provideAnalyticsContextProxy(): AnalyticsContextProxy = DefaultAnalyticsContextProxy()
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAppInstanceIdProvider(): AppInstanceIdProvider = FirebaseAppInstanceIdProvider()
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package com.tangem.core.analytics
|
||||
|
||||
interface AppInstanceIdProvider {
|
||||
|
||||
suspend fun getAppInstanceId(): String?
|
||||
|
||||
fun getAppInstanceIdSync(): String?
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.tangem.core.analytics
|
||||
|
||||
class DummyAppInstanceIdProvider : AppInstanceIdProvider {
|
||||
|
||||
override suspend fun getAppInstanceId(): String? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getAppInstanceIdSync(): String? {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
|
@ -23,6 +23,7 @@ dependencies {
|
|||
implementation(projects.core.ui)
|
||||
implementation(projects.core.featuretoggles)
|
||||
implementation(projects.core.navigation)
|
||||
implementation(projects.core.analytics)
|
||||
implementation(projects.core.analytics.models)
|
||||
implementation(projects.common.routing)
|
||||
implementation(projects.common.ui)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.tangem.features.details.component.preview
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.tangem.core.analytics.DummyAppInstanceIdProvider
|
||||
import com.tangem.core.decompose.navigation.DummyRouter
|
||||
import com.tangem.core.navigation.url.DummyUrlOpener
|
||||
import com.tangem.features.details.component.DetailsComponent
|
||||
|
|
@ -18,6 +19,7 @@ internal class PreviewDetailsComponent : DetailsComponent {
|
|||
ItemsBuilder(
|
||||
router = DummyRouter(),
|
||||
urlOpener = DummyUrlOpener(),
|
||||
appInstanceIdProvider = DummyAppInstanceIdProvider(),
|
||||
).buildAll(isWalletConnectAvailable = true, onSupportClick = {})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.features.details.utils
|
||||
|
||||
import com.tangem.common.routing.AppRoute
|
||||
import com.tangem.core.analytics.AppInstanceIdProvider
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.navigation.Router
|
||||
import com.tangem.core.navigation.url.UrlOpener
|
||||
|
|
@ -19,6 +20,7 @@ import javax.inject.Inject
|
|||
internal class ItemsBuilder @Inject constructor(
|
||||
private val router: Router,
|
||||
private val urlOpener: UrlOpener,
|
||||
private val appInstanceIdProvider: AppInstanceIdProvider,
|
||||
) {
|
||||
|
||||
fun buildAll(isWalletConnectAvailable: Boolean, onSupportClick: () -> Unit): ImmutableList<DetailsItemUM> =
|
||||
|
|
@ -50,7 +52,7 @@ internal class ItemsBuilder @Inject constructor(
|
|||
block = BlockUM(
|
||||
text = resourceReference(R.string.details_buy_wallet),
|
||||
iconRes = R.drawable.ic_tangem_24,
|
||||
onClick = { urlOpener.openUrl(BUY_TANGEM_URL) },
|
||||
onClick = { urlOpener.openUrl(buildBuyLink()) },
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -103,6 +105,12 @@ internal class ItemsBuilder @Inject constructor(
|
|||
),
|
||||
)
|
||||
|
||||
private fun buildBuyLink(): String {
|
||||
return appInstanceIdProvider.getAppInstanceIdSync()?.let {
|
||||
"$BUY_TANGEM_URL&app_instance_id=$it"
|
||||
} ?: BUY_TANGEM_URL
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val BUY_TANGEM_URL = "https://buy.tangem.com/?utm_source=tangem&utm_medium=app"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue