AdMob激励广告加载失败求助:遵循官方教程仍报错
我完全懂你卡了两周的那种挫败感——AdMob的初始化坑确实容易让人挠头,咱们一步步把这个问题解决掉!
首先看你日志里的E/Ads: Google Mobile Ads SDK initialization functionality unavailable for this session,这是关键提示:你在AdMob SDK还没完成初始化的时候就发起了广告加载请求。MobileAds.initialize()是异步操作,不会阻塞主线程,你在onCreate里直接调用loadAd(),此时SDK可能还没准备好,自然会加载失败。
第一步:调整初始化与广告加载的顺序
把loadAd()移到初始化完成的回调里,确保SDK准备就绪后再加载广告:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reward); MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) { // 只有初始化完成后,才加载广告 loadAd(); } }); // 移除这里的loadAd()调用! }
第二步:升级Play Services Ads版本
你用的com.google.android.gms:play-services-ads:18.2.0版本比较旧了,旧版本存在一些初始化相关的已知问题。建议升级到稳定的新版本(比如22.0.0,注意和其他依赖版本兼容),在build.gradle里修改:
implementation 'com.google.android.gms:play-services-ads:22.0.0'
第三步:排查额外细节
打印具体错误码:在
onRewardedAdFailedToLoad里把错误码打出来,能更精准定位问题:@Override public void onRewardedAdFailedToLoad(int errorCode) { super.onRewardedAdFailedToLoad(errorCode); Log.i(TAG, "广告加载失败,错误码:" + errorCode); }比如错误码
3是无填充(但测试ID应该不会出现这个),错误码0是内部错误,升级SDK通常能解决。检查设备Google Play Services版本:确保测试设备上的Google Play Services是最新的,旧版本会导致AdMob SDK无法正常初始化。
确认测试ID正确性:你用的测试ID都是官方提供的,这部分没问题,不用改。
额外优化建议
为了避免内存泄漏,在Activity销毁时记得销毁广告实例:
@Override protected void onDestroy() { if (rewardedAd != null) { rewardedAd.destroy(this); rewardedAd = null; } super.onDestroy(); }
按照上面的步骤调整后,应该就能正常加载测试激励广告了。别灰心,这个问题是新手用AdMob时的常见坑,调整后很快就能解决!
内容的提问来源于stack exchange,提问作者Mauricio Castro

