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

Admob 21.4.0:onUserEarnedReward未调用,激励视频关闭按钮不可点击求助

解决Admob 21.4.0激励视频广告回调失效&关闭按钮无法点击问题

我之前在使用Admob 21.4.0版本时也碰到过几乎一模一样的问题——明明严格跟着官方文档走,却出现onUserEarnedReward不触发、关闭按钮点不动只能按返回键退出的情况。结合当时的排查经验,给你几个核心的排查方向:

1. 检查依赖配置是否完整且无冲突

确保你的build.gradle里的Admob依赖是完整的,而且没有和其他广告库或Google服务库版本冲突:

// 确保依赖是21.4.0版本,且无重复引入
implementation 'com.google.android.gms:play-services-ads:21.4.0'

另外,检查AndroidManifest.xml里的元数据是否正确配置了Admob应用ID,有没有拼写错误:

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="你的应用ID"/>

2. 确认广告生命周期的回调注册逻辑

激励视频广告的回调必须在广告加载前就完成注册,而且要确保持有广告实例的对象(比如Activity/Fragment)没有被意外销毁。我当时就是因为在加载广告后才设置回调,导致根本没绑定上:

// 正确顺序:先创建回调,再加载广告
val rewardAdLoadCallback = object : RewardAdLoadCallback() {
    override fun onAdLoaded(rewardAd: RewardAd) {
        // 广告加载成功后,设置全屏内容回调
        rewardAd.setFullScreenContentCallback(object : FullScreenContentCallback() {
            override fun onAdDismissedFullScreenContent() {
                // 广告关闭后的清理逻辑
            }

            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
                // 广告展示失败处理
            }
        })
        // 展示广告时必须绑定奖励回调
        rewardAd.show(activity) { rewardItem ->
            // 这里就是onUserEarnedReward的触发逻辑,别遗漏!
            val rewardAmount = rewardItem.amount
            val rewardType = rewardItem.type
            // 处理用户奖励发放
        }
    }

    override fun onAdFailedToLoad(loadAdError: LoadAdError) {
        // 广告加载失败处理
    }
}

// 加载广告
RewardAd.load(
    context,
    "你的激励视频广告ID",
    AdRequest.Builder().build(),
    rewardAdLoadCallback
)

Java代码同理,要确保OnUserEarnedRewardListener被正确设置,不能省略这个监听器。

3. 排查测试广告的特殊情况

有时候用测试广告ID时会出现一些异常(虽然官方说测试广告和正式广告逻辑一致,但偶尔会有例外)。你可以尝试切换到正式广告ID测试,或者检查测试设备是否正确添加到Admob后台的测试设备列表中。

4. 检查Activity的生命周期处理

如果广告在Fragment中加载,要确保Fragment生命周期和Activity同步,比如在onDestroyView时销毁广告实例,避免内存泄漏导致回调失效:

override fun onDestroyView() {
    super.onDestroyView()
    rewardAd?.fullScreenContentCallback = null
    rewardAd = null
}

另外,避免当前Activity设置singleInstance等特殊启动模式,否则广告窗口可能无法获取焦点,导致关闭按钮无法点击。

5. 清除Admob缓存并重启设备

这个方法听起来简单,但有时候确实能解决奇怪的问题。你可以先清除应用缓存,重启设备后再重新测试广告——我当时排查完所有代码逻辑都没问题,清缓存重启后关闭按钮就恢复正常了。


内容的提问来源于stack exchange,提问作者韩江云

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:55:16