
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账号长期稳定的基础要求。










