Art*_*pov 13 android google-analytics firebase firebase-analytics android-jetpack-compose
我想在仅撰写的应用程序中跟踪屏幕视图,因此没有活动、片段,只有可组合的功能。
我应该何时以及如何调用屏幕跟踪(例如 Firebase)?
因为可组合函数的主体在每次重组时执行,所以副作用也可能被重复调用,而这些都不意味着真正的“视图”,可组合函数可以是不可见的或只是可测量的。
Adr*_*n K 13
例如,您可以使用LaunchedEffect
或与常量键一起使用,以便在可组合项进入合成时(以及在退出时)准确执行副作用,忽略重组。DisposableEffect
Unit
DisposableEffect
// 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)
如果您想发送基于生命周期事件的分析事件,您可以使用 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)
归档时间: |
|
查看次数: |
5492 次 |
最近记录: |