You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开屏跳转后插屏广告(Interstitial ads)展示频次偏低问题排查求助

问题根因分析
  • 回调注册顺序错误:SplashActivity中先调用Ads.preload(),该方法第一行就将adsCallback置为null,之后才调用setAdsCallBack()注册回调。如果广告加载速度快,在回调注册完成前就加载结束,adsLoaded()回调不会触发,isAdsOpen无法被置为true,只能等待8s超时才跳转主页面,此时广告大概率已失效或未加载完成,无法展示。
  • 广告重试计数无重置逻辑:requestInterAdCount是单例全局变量,仅在加载失败时累加,没有在每次调用preload()时重置的逻辑。只要某次加载重试达到2次上限,后续所有的预加载请求都不会再触发重试,直接加载失败。
  • 状态变量语义错误:mAdIsLoading命名为「广告加载中」,但实际在广告加载成功后才被置为true,加载失败时永远保持初始值false。如果广告加载失败,即使后续有新的广告加载完成,也可能因为状态异常无法触发展示。
  • 超时跳转后无兜底展示逻辑:8s超时跳转主页面时,若广告仍在加载中,主页面onCreate调用showInter()时会直接判断无可用广告,不会等待加载完成后再展示,直接错过本次展示机会。
  • 单例广告缓存未做有效性校验:全局缓存的mInterstitialAd没有过期校验逻辑,上一次启动残留的过期广告会占用缓存,导致新的广告无法加载,调用show时直接失败。
修复方案
  1. 调整回调注册顺序:SplashActivity中先调用setAdsCallBack()注册回调,再调用preload()预加载广告,避免回调丢失。
// 修正SplashActivity onCreate中的调用顺序
Ads.setAdsCallBack(this)
Ads.preload(this, BuildConfig.ADS_INTERSTITIAL)
  1. 预加载时重置重试计数和状态:修改preload()方法,每次预加载时重置重试计数、旧的广告缓存和状态变量。
fun preload(context: Context, adsId: String) {
    // 先重置所有状态
    requestInterAdCount = 0
    mInterstitialAd = null
    mAdIsLoading = false
    loadAd(context, adsId)
}
  1. 修正状态变量逻辑:将mAdIsLoading重命名为mInterstitialAdReady,明确语义为广告已就绪可展示,加载开始时标记为加载中,加载成功标记为就绪,加载失败/展示结束标记为未就绪。
  2. 增加广告加载完成后自动展示逻辑:主页面调用showInter()时如果广告还在加载中,可临时注册回调,等广告加载完成后自动触发展示,避免错过展示窗口。
  3. 增加广告有效性判断:调用showInter()时除了判断缓存是否为空,还可以增加加载时间校验,超过2小时的广告直接判定为过期,清空缓存后重新加载。

内容的提问来源于stack exchange,提问作者Binary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:45:05