点击按钮跳转下一个Activity时如何正常展示插屏广告
问题根因
当前代码的点击事件中,showInterAd() 和跳转下页的startActivity()是并行执行的,调用展示广告的方法后,下一个Activity立刻启动并覆盖当前窗口,广告还没完成渲染展示就被压到后台,所以只有返回回到MainActivity时广告才会弹出。
修复方案
- 移除点击事件中直接跳转的逻辑,将跳转操作放到广告的回调方法中,保证广告关闭/展示失败后再执行页面跳转
- 修正广告关闭回调的跳转目标,原回调中跳回MainActivity的逻辑不符合需求
- 广告展示完成后重新加载下一次插屏广告,保证后续点击可以正常展示
修改后核心代码
class MainActivity : AppCompatActivity() { lateinit var mAdView : AdView private var mInterstitialAd: InterstitialAd? = null // 声明跳转目标页常量,避免重复编写 private val targetActivityCls = com.tango.changapp.wLista::class.java override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) loadBannerAd() loadInterAd() val wLista = findViewById<Button>(R.id.Lista) wLista.setOnClickListener{ // 移除直接跳转逻辑,仅调用广告展示方法 showInterAd() } } private fun showInterAd() { if(mInterstitialAd != null){ mInterstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback(){ override fun onAdFailedToShowFullScreenContent(p0: AdError) { super.onAdFailedToShowFullScreenContent(p0) // 广告展示失败也执行跳转,避免用户卡住 jumpToTarget() // 重新加载下一次广告 loadInterAd() } override fun onAdDismissedFullScreenContent() { super.onAdDismissedFullScreenContent() // 用户关闭广告后跳转目标页 jumpToTarget() // 重新加载下一次广告 loadInterAd() } } mInterstitialAd?.show(this) }else{ // 广告未加载完成,直接跳转 jumpToTarget() } } // 封装跳转逻辑,复用代码 private fun jumpToTarget() { startActivity(Intent(this, targetActivityCls)) } private fun loadInterAd() { val adRequest = AdRequest.Builder().build() InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest, object : InterstitialAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { mInterstitialAd = null } override fun onAdLoaded(interstitialAd: InterstitialAd) { mInterstitialAd = interstitialAd } }) } // 原有loadBannerAd等其他逻辑保持不变 }
内容的提问来源于stack exchange,提问作者iFroxt
相关产品推荐
相关产品推荐

