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

AdMob激励广告加载失败求助:遵循官方教程仍报错

解决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'

第三步:排查额外细节

  1. 打印具体错误码:在onRewardedAdFailedToLoad里把错误码打出来,能更精准定位问题:

    @Override
    public void onRewardedAdFailedToLoad(int errorCode) {
        super.onRewardedAdFailedToLoad(errorCode);
        Log.i(TAG, "广告加载失败,错误码:" + errorCode);
    }
    

    比如错误码3是无填充(但测试ID应该不会出现这个),错误码0是内部错误,升级SDK通常能解决。

  2. 检查设备Google Play Services版本:确保测试设备上的Google Play Services是最新的,旧版本会导致AdMob SDK无法正常初始化。

  3. 确认测试ID正确性:你用的测试ID都是官方提供的,这部分没问题,不用改。

额外优化建议

为了避免内存泄漏,在Activity销毁时记得销毁广告实例:

@Override
protected void onDestroy() {
    if (rewardedAd != null) {
        rewardedAd.destroy(this);
        rewardedAd = null;
    }
    super.onDestroy();
}

按照上面的步骤调整后,应该就能正常加载测试激励广告了。别灰心,这个问题是新手用AdMob时的常见坑,调整后很快就能解决!

内容的提问来源于stack exchange,提问作者Mauricio Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:02:45