如何使用 Jetpack Compose UI 正确跟踪 Android 上的屏幕视图?

Art*_*pov 13 android google-analytics firebase firebase-analytics android-jetpack-compose

我想在仅撰写的应用程序中跟踪屏幕视图,因此没有活动、片段,只有可组合的功能。

我应该何时以及如何调用屏幕跟踪(例如 Firebase)?

因为可组合函数的主体在每次重组时执行,所以副作用也可能被重复调用,而这些都不意味着真正的“视图”,可组合函数可以是不可见的或只是可测量的。

Adr*_*n K 13

例如,您可以使用LaunchedEffect或与常量键一起使用,以便在可组合项进入合成时(以及在退出时)准确执行副作用,忽略重组。DisposableEffectUnitDisposableEffect

// I don't think PascalCase would suit this method, as it suggests an on-screen element
@SuppressLint("ComposableNaming") 
@Composable
fun trackScreenView(name: String) {
    DisposableEffect(Unit){
        Log.d("SCREENTRACKING", "screen enter : $name")
        onDispose { Log.d("SCREENTRACKING", "screen exit : $name") }
    }
}

@Composable
fun Screen1() {
    trackScreenView("Screen 1")
    // your screen content here
}

@Composable
fun Screen2() {
    trackScreenView("Screen 2")
    // your screen content here
}
Run Code Online (Sandbox Code Playgroud)


car*_*ich 5

如果您想发送基于生命周期事件的分析事件,您可以使用 LifecycleObserver。要在 Compose 中侦听这些事件,请在需要时使用 DisposableEffect 来注册和取消注册观察者。

@Composable
fun TrackedScreen(
    name: String,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
) {
    DisposableEffect(lifecycleOwner) {
        val observer = LifecycleEventObserver { _, event ->
            if (event == Lifecycle.Event.ON_START) {
                Firebase.analytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) {
                    param(FirebaseAnalytics.Param.SCREEN_NAME, name)
                }
            }
        }

        lifecycleOwner.lifecycle.addObserver(observer)

        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

@Composable
fun HomeScreen() {
    TrackedScreen("Home")
   
    /* Home screen content */
}
Run Code Online (Sandbox Code Playgroud)