Sta*_*per 8 navigation android admob android-jetpack-compose
我在我的应用程序中使用 admob AppOpenAd,根据他们的要求,我需要仅在没有横幅广告的屏幕顶部展示他们的广告。因此,在显示应用程序打开广告之前,我将用户导航到启动屏幕,显示广告,当用户关闭广告时,我将他重定向回所需的屏幕。
我在这里使用了 admob 文档来识别生命周期事件,并检查用户是否恢复了应用程序: https://developers.google.com/admob/android/app-open ?hl=en#lifecycleobserver
所以当我需要展示广告时,我会这样做:
activity.runOnUiThread { _navController?.navigate(adSplashRoute) }
isShowingAd = true
appOpenAd?.show(activity)
Run Code Online (Sandbox Code Playgroud)
当用户完成添加后,我将他重定向回来:
override fun onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
// Set the reference to null so isAdAvailable() returns false.
Log.d(TAG, "Ad dismissed fullscreen content.")
appOpenAd = null
isShowingAd = false
activity.runOnUiThread { _navController?.popBackStack() }
onShowAdCompleteListener.onShowAdComplete()
loadAd(activity)
}
Run Code Online (Sandbox Code Playgroud)
我使用AppOpenAdManager
在 te 类中创建的专用新类MainActivity
并使用以下命令注入它hilt
:
@Inject
lateinit var appOpenManager: AppOpenAdManager
Run Code Online (Sandbox Code Playgroud)
并将其传递给onCreate
内部方法中的可组合项MainActivity
:
setContent {
val darkTheme = shouldUseDarkTheme(uiState)
MainAppTheme(darkTheme = darkTheme) {
MainAppComposable(appOpenManager = appOpenManager)
}
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中,MainAppComposable
我有一个“appState”对象,就像在谷歌示例应用程序中一样,NowInAndroid
我创建了一个navController
对象,然后将其传递给类AppOpenAdManager
:
val appState = rememberMainAppState(
activity = LocalContext.current.findActivity(),
appOpenManager = appOpenManager,
)
appOpenManager.setNavController(appState.navController)
Run Code Online (Sandbox Code Playgroud)
我认为这完成了我的主要实现,而且它确实有效,并且对于 95% 的用户来说都可以正常工作。由于某种原因,我无法理解为什么,我在生产的 crashlytics 报告中看到,有时应用程序会因以下错误而崩溃:
Fatal Exception: java.lang.IllegalStateException: no event down from INITIALIZED in component NavBackStackEntry(424f7fd8-c853-473e-a959-d5a14f1e3b48) destination=Destination(0x71c279e0) route=splash_route
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.kt:126)
at androidx.lifecycle.LifecycleRegistry.setCurrentState(LifecycleRegistry.kt:106)
at androidx.navigation.NavBackStackEntry.updateState(NavBackStackEntry.kt:193)
at androidx.navigation.NavBackStackEntry.setMaxLifecycle(NavBackStackEntry.kt:166)
at androidx.navigation.NavController.updateBackStackLifecycle$navigation_runtime_release(NavController.kt:1087)
at androidx.navigation.NavController.dispatchOnDestinationChanged(NavController.kt:991)
at androidx.navigation.NavController.navigate(NavController.kt:1843)
at androidx.navigation.NavController.navigate(NavController.kt:1785)
at androidx.navigation.NavController.navigate(NavController.kt:2186)
at androidx.navigation.NavController.navigate$default(NavController.kt:2181)
Run Code Online (Sandbox Code Playgroud)
我尝试重现它,但对我来说一切正常并且不会发生错误。我在这里的其他一些答案中提到,当屏幕跳过诸如“销毁”之类的生命周期事件时,就会发生这种情况,但我无法理解为什么以及如何修复它。
有任何想法吗?
归档时间: |
|
查看次数: |
789 次 |
最近记录: |