插页广告(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
相关产品推荐
相关产品推荐

