From 4ad1725c3bf96872b2fd8b48f3749f0f02e08922 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 12 Dec 2024 15:37:00 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../FirebaseAnalyticsEventConverter.kt | 33 +++++++++++++++++++ .../handlers/firebase/FirebaseClient.kt | 11 +++++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseAnalyticsEventConverter.kt diff --git a/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseAnalyticsEventConverter.kt b/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseAnalyticsEventConverter.kt new file mode 100644 index 0000000000..559fc3418b --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseAnalyticsEventConverter.kt @@ -0,0 +1,33 @@ +package com.tangem.tap.common.analytics.handlers.firebase + +internal class FirebaseAnalyticsEventConverter { + + fun convertEventName(event: String): String { + return convertString(event, FIREBASE_EVENT_NAME_MAX_LENGTH) + } + + fun convertEventParams(params: Map): Map { + return params.map { (key, value) -> + convertString(key, FIREBASE_EVENT_NAME_MAX_LENGTH) to convertString(value, FIREBASE_EVENT_VALUE_MAX_LENGTH) + }.toMap() + } + + private fun convertString(string: String, maxLength: Int): String { + return string + .replace(REPLACING_PATTERN.toRegex(), WORD_SEPARATOR) + .trim { it in TRIMMING_CHARACTERS } + .trimToLength(maxLength) + } + + private fun String.trimToLength(length: Int): String { + return if (this.length > length) this.substring(0, length) else this + } + + private companion object { + const val REPLACING_PATTERN = "[^\\w]+" + const val WORD_SEPARATOR = "_" + const val TRIMMING_CHARACTERS = WORD_SEPARATOR + const val FIREBASE_EVENT_NAME_MAX_LENGTH = 40 + const val FIREBASE_EVENT_VALUE_MAX_LENGTH = 100 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseClient.kt b/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseClient.kt index 20597e0fb9..7e4e5085bc 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseClient.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/handlers/firebase/FirebaseClient.kt @@ -18,12 +18,19 @@ internal class FirebaseClient : FirebaseAnalyticsClient { private val fbAnalytics = Firebase.analytics private val fbCrashlytics = Firebase.crashlytics + private val eventConverter = FirebaseAnalyticsEventConverter() + override fun logEvent(event: String, params: Map) { - fbAnalytics.logEvent(event, params.toBundle()) + fbAnalytics.logEvent( + eventConverter.convertEventName(event), + eventConverter.convertEventParams(params).toBundle(), + ) } override fun logErrorEvent(error: Throwable, params: Map) { - params.forEach { fbCrashlytics.setCustomKey(it.key, it.value) } + eventConverter.convertEventParams(params) + .forEach { fbCrashlytics.setCustomKey(it.key, it.value) } + fbCrashlytics.recordException(error) }