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

插页广告(Interstitial Ad)加载完成却无法显示的技术求助

插页广告加载完成但无法显示的排查与修复

我来帮你捋捋代码里的问题和常见的坑,这些大概率就是插页广告加载完成却没法显示的原因:

1. 错误的广告展示时机

你在onAdClosed()回调里直接调用mInterstitialAd.show(),这是核心问题!onAdClosed()是广告关闭时触发的回调,此时你刚发起新的广告加载请求,新广告根本还没加载完成就强制调用展示,肯定会失败。

这个回调的正确作用应该是仅负责重新加载下一个广告,而广告展示的逻辑应该放在广告加载成功的回调里,或者由用户的操作(比如按钮点击)来触发。

2. 缺少关键的广告状态监听

你的代码只实现了onAdClosed(),完全没监听onAdLoaded()(广告加载成功)和onAdFailedToLoad()(广告加载失败),这导致你根本无法确认广告是否真的加载完成,也没法排查加载失败的原因。

修复后的代码示例

我帮你重构了代码,补充了必要的回调和正确的逻辑:

private InterstitialAd mInterstitialAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    
    StartAppSDK.init(this, "200155885", true);
    MobileAds.initialize(this, "ca-app-pub-6093358640755241~9410174132");
    
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ca-app-pub-6093358640755241/8773192961");
    
    // 设置完整的广告监听器,覆盖关键状态回调
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            // 广告加载成功,这里可以选择直接展示,或者等待用户操作
            Log.d("AdDebug", "插页广告加载完成,可随时展示");
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            // 广告加载失败,打印错误码方便排查
            Log.e("AdError", "广告加载失败,错误码:" + errorCode);
            // 加载失败后自动重试
            loadInterstitialAd();
        }

        @Override
        public void onAdClosed() {
            // 广告关闭后,立即加载下一个广告
            loadInterstitialAd();
        }
    });
    
    // 初始化加载第一个广告
    loadInterstitialAd();
}

// 封装加载广告的方法,避免重复代码
private void loadInterstitialAd() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice("22E1DBBDDEBAD8E53600D097657EFF08")
            .build();
    mInterstitialAd.loadAd(adRequest);
}

// 示例:通过用户点击按钮触发广告展示
public void showAdWhenUserClicks(View view) {
    if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
        mInterstitialAd.show();
    } else {
        Log.d("AdDebug", "广告还没加载好,先触发重新加载");
        loadInterstitialAd();
    }
}

额外排查要点

除了代码逻辑,你还可以检查这些点:

  • 确认测试设备ID正确:查看Logcat中Google Ads SDK输出的测试设备ID,确保你添加的22E1DBBDDEBAD8E53600D097657EFF08和日志里的一致。
  • 检查广告单元ID:确认插页广告的Ad Unit ID没有写错,和AdMob后台配置的一致。
  • 确保上下文有效:展示广告时要保证当前Activity处于活跃状态,不要在Activity销毁后调用show()。
  • 权限检查:AndroidManifest里要添加INTERNET和ACCESS_NETWORK_STATE权限,广告加载和展示依赖这些权限。

如果广告还是无法展示,查看Logcat的错误日志,错误码对应的常见原因:

  • 错误码1:网络连接问题
  • 错误码2:暂无广告填充
  • 错误码3:广告单元ID无效或配置错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:14