跳转到主内容
极星编程网:以代码为星,赴技术山海!

AdMob插页式广告的缓存有效期与最佳实践

admob插页式广告加载后仅在1小时内有效,超时未展示将导致广告失效、曝光不计费;开发者需在一小时内调用show(),或定时刷新广告以保障收益和用户体验。 在Android平台集成AdMob插页式广告(com.google.android.gms.ads.interstitial.InterstitialAd)时,一个常见但易被忽视的关键点是: 广告对象并非“永久有效” 。即使mInterstitialAd != null,也不代表该广告仍可正常展示并产生有效曝光。 根据 Google官方文档 明确说明: ✅ 预加载的插页式广告最长缓存有效期为60分钟 ; ❌ 超过1小时后调用show(),虽可能成功弹出(取决于SDK内部状态),但该次展示 不会被计为有效广告曝光(impression) ,亦不参与结算,且可能违反AdMob政策,影响账户健康度。 正确的生命周期管理实践 建议采用“按需加载 + 时效性校验 + 自动刷新”三重机制:
// 示例:带时效校验的安全展示方法 private long mAdLoadTime = -1; // 加载广告时记录时间戳 InterstitialAd.load(this, adUnitId, adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { mInterstitialAd = interstitialAd; mAdLoadTime = System.currentTimeMillis(); // 记录加载时刻 Log.d("AdMob", "Interstitial loaded at: " + mAdLoadTime); } // ... onError 等回调 }); // 安全展示逻辑 public void showInterstitialIfReady() { if (mInterstitialAd == null || System.currentTimeMillis() - mAdLoadTime > 60 * 60 * 1000L) { // 超过1小时 Log.w("AdMob", "Ad expired or not ready — reloading..."); loadInterstitialAd(); // 主动重新加载 return; } mInterstitialAd.show(this); }
⚠️ 注意事项与最佳建议 禁止长期持有广告实例 :切勿将InterstitialAd作为全局静态变量长期持有,尤其在Activity重建、进程后台驻留等场景下极易导致过期广告残留; 避免“一次加载、多次复用” :每个InterstitialAd实例仅应调用一次show(),展示后即应置为null,并触发下一次加载; 结合用户行为智能预加载 :例如在用户完成关卡、提交表单后立即加载下一条广告,确保其在下次关键节点(如返回主界面)前已就绪且未超时; 监控加载失败与过期率 :通过日志或埋点统计show()前因超时而触发重加载的比例,若频繁发生,需优化加载时机或检查网络环境。 ? 补充提示:自2023年起,AdMob SDK已强化对过期广告的自动清理逻辑,但仍不替代开发者主动管理。依赖mInterstitialAd != null作为唯一判断条件,是导致无效曝光和收入损失的典型开发误区。 遵循一小时时效原则,不仅能提升广告填充率与eCPM,更是保障应用合规运营、维护AdMob账号长期稳定的基础要求。

相关文章