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
相关产品推荐
相关产品推荐

