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

Admob Android 激励广告异常:用户提前关闭/跳过广告后轮盘仍转动

问题根因

你当前的代码中,触发轮盘转动的giraruleta()逻辑被放在了onAdDismissedFullScreenContent回调中,该回调的触发时机是只要广告页面关闭就会执行,无论用户是提前关闭、点击跳过,还是看完广告后正常关闭,这就是为什么没看完广告也会触发轮盘转动的原因。
而主流激励广告SDK中,用户完整看完广告、可以获得对应奖励的回调是OnUserEarnedRewardListener的onUserEarnedReward方法,你当前这个方法是空实现,没有做任何奖励触发的逻辑判断。
另外代码还存在回调设置顺序错误的问题:FullScreenContentCallback需要在调用rewardedAd.show()之前设置,否则可能出现部分场景下回调不生效的问题。

修复方案

步骤1:新增全局标记位

在当前类的成员变量位置新增一个布尔标记,用来记录用户是否完成了广告观看:

// 记录用户是否完整看完广告获得奖励
private boolean isAdRewarded = false;

步骤2:调整回调逻辑

修改点击事件的代码,调整回调顺序、补充奖励判定逻辑:

b_anuncio.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (rewardedAd != null) {
            // 先设置广告全屏回调,再调用show方法
            rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                @Override
                public void onAdShowedFullScreenContent() {
                    // 广告展示时先重置奖励标记,避免之前的标记影响本次判断
                    isAdRewarded = false;
                }

                @Override
                public void onAdFailedToShowFullScreenContent(AdError adError) {
                    rewardedAd = null;
                    // 广告展示失败可以按需加提示逻辑
                }

                @Override
                public void onAdDismissedFullScreenContent() {
                    // 广告关闭时,只有确认用户获得奖励才触发轮盘转动
                    if (isAdRewarded) {
                        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                giraruleta();
                            }
                        }, 1000);
                    }
                    // 无论有没有拿到奖励,都重新加载下一次的广告
                    createAndLoadRewardedAd();
                    rewardedAd = null;
                }
            });

            // 展示广告,监听奖励发放回调
            rewardedAd.show(getActivity(), new OnUserEarnedRewardListener() {
                @Override
                public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
                    // 用户完整看完广告,标记为可获得奖励
                    isAdRewarded = true;
                }
            });
        }
    }
});

imageRoulette.setImageDrawable(getResources().getDrawable(R.drawable.roulette_10));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:03