From 8d068531f22701829a5cf058a47b99624e0321c3 Mon Sep 17 00:00:00 2001 From: Orfeo Date: Sun, 10 Nov 2024 09:29:07 +0000 Subject: [PATCH 1/2] Fix screenview analytics --- .../olpaka/core/FirebaseAnalytics.wasmJs.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/composeApp/src/wasmJsMain/kotlin/org/cyanotic/olpaka/core/FirebaseAnalytics.wasmJs.kt b/composeApp/src/wasmJsMain/kotlin/org/cyanotic/olpaka/core/FirebaseAnalytics.wasmJs.kt index de0c2f7..c2b3c8f 100644 --- a/composeApp/src/wasmJsMain/kotlin/org/cyanotic/olpaka/core/FirebaseAnalytics.wasmJs.kt +++ b/composeApp/src/wasmJsMain/kotlin/org/cyanotic/olpaka/core/FirebaseAnalytics.wasmJs.kt @@ -27,9 +27,9 @@ actual class FirebaseAnalytics : Analytics { ) val app = initializeApp(configuration) analytics = getAnalytics(app) - } catch (e: Exception){ + } catch (e: Exception) { Napier.w("Exception while configuring analytics") - } catch (e: Error){ + } catch (e: Error) { Napier.w("Error while configuring analytics") } @@ -37,12 +37,17 @@ actual class FirebaseAnalytics : Analytics { } actual override fun screenView(screenName: String) { - analytics?.let { logEvent(it, screenName) } - + event("screen_view", mapOf("screen_name" to screenName)) } actual override fun event(eventName: String, properties: Map) { - analytics?.let { logEvent(it, eventName, properties.toJsAny()) } + analytics?.let { + logEvent( + analytics = it, + eventName = eventName, + properties = properties.toJsAny() + ) + } } } From 156164f59ad016036ea5fe9c53e5eaa219067602 Mon Sep 17 00:00:00 2001 From: Orfeo Date: Sun, 10 Nov 2024 11:10:29 +0000 Subject: [PATCH 2/2] Configure Bugsnag Desktop --- .github/workflows/create_release.yaml | 3 ++- composeApp/build.gradle.kts | 10 +++++++--- .../src/desktopMain/kotlin/org/cyanotic/olpaka/main.kt | 7 +++++++ gradle/libs.versions.toml | 3 +++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/create_release.yaml b/.github/workflows/create_release.yaml index b89173d..ecc4c58 100644 --- a/.github/workflows/create_release.yaml +++ b/.github/workflows/create_release.yaml @@ -36,9 +36,10 @@ jobs: - name: Build Web app env: + BASE_HREF: ${{ vars.BASE_HREF }} + BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} FIREBASE_WEB_CONFIG_JSON: ${{ secrets.FIREBASE_WEB_CONFIG_JSON }} VERSION_NAME: ${{ vars.OLPAKA_VERSION }} - BASE_HREF: ${{ vars.BASE_HREF }} run: | ./gradlew :composeApp:wasmJsBrowserDistribution --quiet -Pbuildkonfig.flavor=release diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 4fd9192..d59a2d9 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -23,18 +23,20 @@ buildkonfig { val versionName = System.getenv("VERSION_NAME") ?: "local" val analyticsMeasurementId = System.getenv("ANALYTICS_MEASUREMENT_ID") ?: "" val analyticsApiSecret = System.getenv("ANALYTICS_API_SECRET") ?: "" + val bugsnagApiKey = System.getenv("BUGSNAG_API_KEY") ?: "" val firebaseWebConfig = System.getenv("FIREBASE_WEB_CONFIG_JSON") ?: "" val decodedWebConfig = Base64.getDecoder().decode(firebaseWebConfig).decodeToString() defaultConfigs { buildConfigField(BOOLEAN, "allowClearPreferences", "false") + buildConfigField(STRING, "analyticsApiSecret", analyticsApiSecret) + buildConfigField(STRING, "analyticsMeasurementId", analyticsMeasurementId) buildConfigField(STRING, "appVersion", versionName) buildConfigField(STRING, "appVariant", "release") - buildConfigField(STRING, "loggingLevel", "warning") - buildConfigField(STRING, "analyticsMeasurementId", analyticsMeasurementId) - buildConfigField(STRING, "analyticsApiSecret", analyticsApiSecret) + buildConfigField(STRING, "bugsnagApiKey", bugsnagApiKey) buildConfigField(STRING, "firebaseWebConfigJson", decodedWebConfig) + buildConfigField(STRING, "loggingLevel", "warning") } defaultConfigs("debug") { buildConfigField(STRING, "appVariant", "debug") @@ -135,6 +137,8 @@ kotlin { desktopMain.dependencies { implementation(compose.desktop.currentOs) + implementation(libs.bugsnag) + implementation(libs.kotlinx.coroutines.swing) implementation(libs.ktor.client.okhttp) diff --git a/composeApp/src/desktopMain/kotlin/org/cyanotic/olpaka/main.kt b/composeApp/src/desktopMain/kotlin/org/cyanotic/olpaka/main.kt index 1df9aa1..9d247c7 100644 --- a/composeApp/src/desktopMain/kotlin/org/cyanotic/olpaka/main.kt +++ b/composeApp/src/desktopMain/kotlin/org/cyanotic/olpaka/main.kt @@ -4,11 +4,18 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Window import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.application +import com.bugsnag.Bugsnag +import com.cyanotic.olpaka.BuildKonfig import olpaka.composeapp.generated.resources.Res import olpaka.composeapp.generated.resources.desktop_icon import org.jetbrains.compose.resources.painterResource fun main() = application { + if(BuildKonfig.bugsnagApiKey.isNotBlank()) { + val bugsnag = Bugsnag(BuildKonfig.bugsnagApiKey) + bugsnag.setAppVersion(BuildKonfig.appVersion) + bugsnag.setReleaseStage(BuildKonfig.appVariant) + } Window( onCloseRequest = ::exitApplication, icon = painterResource(Res.drawable.desktop_icon), diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1224b4e..b75f348 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] androidx-lifecycle = "2.8.2" androidx-navigation = "2.8.0-alpha10" +bugsnag = "3.+" buildKonfig = "0.15.2" compose-plugin = "1.7.0-beta02" coroutines = "1.9.0" @@ -21,6 +22,8 @@ androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", nam androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-navigation-compose = { group = "org.jetbrains.androidx.navigation", name = "navigation-compose", version.ref = "androidx-navigation" } +bugsnag = { group = "com.bugsnag", name="bugsnag", version.ref="bugsnag"} + koin-compose = { group = "io.insert-koin", name = "koin-compose", version.ref = "koin-compose" } koin-compose-viewmodel = { group = "io.insert-koin", name = "koin-compose-viewmodel", version.ref = "koin-compose" }