Unity插屏广告在Fragment中正常运行但Activity中无法显示如何解决
问题排查与解决方案
你使用的插屏广告调用代码如下:
if (UnityAds.isReady(constants.interstitial)) { Log.d(TAG, "showAd: ad ready and showing...") UnityAds.show(activity, constants.interstitial) }

完全相同的代码在Activity中运行异常:
请对照以下几点排查问题:
- 初始化时机不匹配
Fragment的生命周期晚于宿主Activity的初始化,因此你在Fragment中调用广告代码时,UnityAds已经完成了初始化,isReady可以正常返回状态。如果在Activity中你把这段代码放在onCreate、onStart等生命周期早期节点调用,此时UnityAds还未完成初始化,isReady会一直返回false,广告无法弹出。建议将调用逻辑移到Activity的onResume之后执行,或者给UnityAds设置初始化完成监听器,在回调中再判断广告就绪状态。 - 上下文参数错误
Fragment中使用的activity参数是已经完成初始化的宿主Activity实例,复制到Activity中后如果错误传入了Application上下文、或者未完全初始化的Activity实例,会导致UnityAds无法正常挂载广告页面。请将调用代码中的上下文参数替换为当前Activity实例,示例:
// 此处替换为你当前Activity的类名即可 UnityAds.show(this@YourActivityName, constants.interstitial)
- 线程调用不符合要求
UnityAds.isReady和UnityAds.show方法必须在Android UI线程调用,如果在Activity中你是在子线程中执行这段代码,会导致调用不生效。 - Manifest配置缺失
请检查承载广告的Activity是否在AndroidManifest.xml中配置了UnityAds要求的android:configChanges属性,否则广告页面加载时触发的配置变更会导致Activity重建,广告加载中断。
内容的提问来源于stack exchange,提问作者Arun Goenka
相关产品推荐
相关产品推荐

