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

如何确保iOS应用中AdMob广告的userDidEarnRewardHandler回调正常触发

激励广告奖励回调未触发排查方案
  • 验证广告实例有效性
    激励广告属于一次性消费资源,单例缓存的Ad.shared.rewardedAd在完成一次展示后就会自动失效,即便实例不为空也无法正常触发奖励回调。你需要在每次广告展示结束(无论用户是否看完)、或展示失败后,立即调用广告加载接口请求新的激励广告实例,保证后续调用present时使用的是新的有效实例。
  • 修正代码语法与内存引用问题
    你提供的代码存在两处可优化点:一是child.("Coins")多了多余的点符号,属于语法错误需要删除;二是回调块未使用弱引用,可能因循环引用或视图控制器提前销毁导致后续逻辑不执行,修正后的代码参考如下:
if let ad = Ad.shared.rewardedAd {
    ad.present(fromRootViewController: self, userDidEarnRewardHandler: { [weak self] in
        guard let self = self else { return }
        // 先打印日志确认回调是否触发
        print("用户完成广告,发放奖励")
        self.dbRef.child("Users").child("Coins").setValue(ServerValue.increment(1))
    })
}

同时需要确认present方法与回调内的数据库操作都在主线程执行,避免跨线程调用导致SDK回调派发失败。

  • 检查广告平台配置规则
    首先确认你使用的是平台官方提供的测试广告单元ID,部分平台的测试激励广告需要手动点击弹窗的「确认领取奖励」按钮才会触发回调,而非广告播放结束就自动触发。如果你的后台开启了激励广告服务端验证,客户端默认不会触发userDidEarnRewardHandler,需要对接服务端验证接口完成校验后再自行处理奖励发放逻辑。
  • 补充全流程监听定位问题
    实现广告SDK提供的所有生命周期代理回调,包括广告加载失败、广告展示失败、广告关闭、奖励发放失败等回调,通过日志定位具体故障环节:比如是广告本身展示失败,还是奖励发放环节被平台拦截。

内容的提问来源于stack exchange,提问作者Sofian Tragha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:57:03