Admob插屏广告实现问题:已完成账户及广告单元配置但广告无法显示
解决AdMob插屏广告无法显示的问题
嘿,我一眼就瞅出问题所在了——你在调用loadAd()之后立刻就执行show(),但AdMob的插屏广告加载是异步操作,它不会瞬间完成,这时候广告还没准备好,自然没法显示出来。
核心问题分析
loadAd()方法是在后台线程完成广告请求和加载的,你必须等广告加载成功的回调触发后,再调用show()才有效。直接同步调用show()相当于在广告还没准备好的时候就强行展示,肯定会失败。
修正后的代码示例
给你的代码加上广告加载状态监听,只有加载成功后再展示:
private InterstitialAd interstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxxxx"); // 替换成你的真实广告单元ID // 设置广告监听器,监听加载状态 interstitialAd.setAdListener(new AdListener() { @Override public void onAdLoaded() { // 广告加载完成,确认状态后展示 if (interstitialAd.isLoaded()) { interstitialAd.show(); } } @Override public void onAdFailedToLoad(int errorCode) { // 加载失败时打印错误码,方便排查问题 Log.d("AdMobDebug", "插屏广告加载失败,错误码:" + errorCode); // 这里可以根据错误码做重试逻辑,比如网络错误时重新加载 } }); // 发起广告加载请求 AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // 如果是真机测试,记得加上真机的测试设备ID,避免产生无效流量 // .addTestDevice("你的真机测试设备ID") .build(); interstitialAd.loadAd(adRequest); }
额外检查项
除了代码问题,还有几个地方要确认:
- 确保
build.gradle(Module级)里的AdMob依赖是最新版本:implementation 'com.google.android.gms:play-services-ads:22.6.0' - 检查AdMob后台的广告单元是否已经激活,账户是否通过审核(新账户可能需要等待审核)
- 确认
AndroidManifest.xml里配置了正确的应用ID:<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/> <!-- 替换成你的应用ID --> - 测试时务必使用测试设备或测试广告单元,避免触发AdMob的政策限制
内容的提问来源于stack exchange,提问作者a.i.a softwaredivision
相关产品推荐
相关产品推荐

