项目场景:
项目中需要接入 google admob sdk 实现广告商业化
问题描述
在接入Institial ad 时,onAdLoaded 成功回调,但是onAdFailedToShowFullScreenContent 也回调了错误信息 “Timeout for show call succeed.”
InterstitialAd.load(activity,"ca-app-pub-3940256099942544/1033173712",AdRequest.Builder().build(),object : InterstitialAdLoadCallback() {override fun onAdLoaded(interstitialAd: InterstitialAd) {super.onAdLoaded(interstitialAd)Log.i("nh_ad", "admob interstitial onAdLoaded")// 加载成功interAd = interstitialAd// 设置广告事件回调interAd?.fullScreenContentCallback = object : FullScreenContentCallback() {override fun onAdImpression() {super.onAdImpression()Log.i("nh_ad", "admob interstitial onAdImpression")}override fun onAdShowedFullScreenContent() {super.onAdShowedFullScreenContent()Log.i("nh_ad", "admob interstitial onAdShowedFullScreenContent")}override fun onAdClicked() {super.onAdClicked()Log.i("nh_ad", "admob interstitial onAdClicked")}override fun onAdDismissedFullScreenContent() {super.onAdDismissedFullScreenContent()Log.i("nh_ad", "admob interstitial onAdDismissedFullScreenContent")interAd = null}override fun onAdFailedToShowFullScreenContent(adError: AdError) {super.onAdFailedToShowFullScreenContent(adError)Log.e("nh_ad", "admob interstitial onAdFailedToShowFullScreenContent error:${adError.message}")interAd = null}}}override fun onAdFailedToLoad(loadAdError: LoadAdError) {super.onAdFailedToLoad(loadAdError)Log.e("nh_ad", "admob interstitial onAdFailedToLoad error:${loadAdError.message}")interAd = null// 加载失败}})
原因分析:
问题困扰很久, 使用官网 Demo 可以正常显示结果的,网络上搜索不到相关问题。
后来对比了下 官网 Demo 和自己项目的差异,不同点在于我项目是在子进程加载和显示广告的,
尝试去掉子进程后,果然不再报错,基本可以确定这个就是和多进程有关。。
但是搜索 Admob sdk 技术文档,里面并没有接口是设置支持多进程的。。又陷入了无助中
于是我翻阅了 Admob sdk 的源码,看到了用于展示广告的 AdActivity 在 Sdk AndroidManifest 里的声明为:
猜想,能否在自己App的 AndroidManiest里重新声明这个AdActivity 并且加上支持多进程属性?
解决方案:
在 App 的 AndroidManifest 里重新声明 Admob 的广告 Activity,增加支持多进程属性 android:multiprocess = "true"
<activityandroid:name="com.google.android.gms.ads.AdActivity"android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"android:exported="false"android:multiprocess="true"android:theme="@android:style/Theme.Translucent"tools:ignore="MissingClass" />
这个坑困扰了大半天,特意记录下~