Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-19 14:16:53 +03:00
parent 228c0c8af4
commit 82fa3edf45
18 changed files with 97 additions and 61 deletions

View file

@ -1,20 +1,15 @@
package com.tangem.common
import com.tangem.utils.SupportedLanguages
/**
[REDACTED_AUTHOR]
*/
object TangemBlogUrlBuilder {
fun build(post: Post): String {
val code = SupportedLanguages.getCurrentSupportedLanguageCode()
.takeIf { code ->
code == SupportedLanguages.RUSSIAN || code == SupportedLanguages.ENGLISH
}
?: SupportedLanguages.ENGLISH
return "https://tangem.com/$code/blog/post/${post.path}/"
suspend fun build(post: Post): String {
return TangemSiteUrlBuilder.url(
path = "/blog/post/${post.path}/",
campaign = "articles",
)
}
sealed interface Post {
@ -28,5 +23,13 @@ object TangemBlogUrlBuilder {
data object SeedNotifySecond : Post {
override val path: String = "tangem-resolves-log-issue"
}
data object SeedPhraseRiskySolution : Post {
override val path: String = "seed-phrase-a-risky-solution"
}
data object WhatWalletToChoose : Post {
override val path: String = "mobile-wallet"
}
}
}

View file

@ -0,0 +1,42 @@
package com.tangem.common
import android.content.res.Resources
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import java.util.Locale
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
object TangemSiteUrlBuilder {
suspend fun getUtmTags(campaign: String?): String {
val langCode = Locale.getDefault().language
val utmCampaignPart = campaign?.let { "&utm_campaign=$it-$langCode" }.orEmpty()
val utmContent = deviceLang()?.let { "&utm_content=devicelang-$it" }.orEmpty()
val appInstanceIdPart = getAppInstanceId()?.let { "&app_instance_id=$it" }.orEmpty()
return "utm_source=tangem-app&utm_medium=app$utmCampaignPart$utmContent$appInstanceIdPart"
}
suspend fun url(path: String, campaign: String): String {
val normalizedPath = path.trim('/')
return "https://tangem.com/$normalizedPath?${getUtmTags(campaign)}"
}
private fun deviceLang(): String? {
return runCatching {
Resources.getSystem().configuration.locales.get(0).toLanguageTag()
}.getOrNull()
}
private suspend fun getAppInstanceId(): String? {
return suspendCoroutine { cont ->
Firebase.analytics.appInstanceId
.addOnSuccessListener { id ->
cont.resume(id)
}
.addOnFailureListener {
cont.resume(null)
}
}
}
}