Android google admob Timeout for show call succeed 问题解决

项目场景:

项目中需要接入 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"

        

这个坑困扰了大半天,特意记录下~

你可能感兴趣的:(Android开发,Android疑难杂症,android)