Ошибка видеорекламы AdMob с вознаграждением (исключение)


Admob RewardedVideoAd иногда не показывает видео. В первый раз реклама всегда показывается. Во второй или третий раз реклама не показывается. В этом случае я получаю такой журнал:

03-24 13:08:26.754 4458-4458/net.dailytoys.afterthecrash W/Ads: Could not show rewarded video ad from adapter.
                                                                java.lang.NullPointerException: Attempt to read from field 'com.google.android.gms.ads.internal.client.bp hu.a' on a null object reference
                                                                    at com.google.ads.mediation.a.h(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):356)
                                                                    at com.google.android.gms.ads.internal.mediation.client.y.f(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):208)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):11)
                                                                    at android.os.Binder.transact(Binder.java:388)
                                                                    at com.google.android.gms.internal.zzeu.zzb(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadm.show(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadx.show(Unknown Source)
                                                                    at net.dailytoys.afterthecrash.ActionResolverAndroid$2.run(ActionResolverAndroid.java:86)
                                                                    at android.os.Handler.handleCallback(Handler.java:815)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                    at android.os.Looper.loop(Looper.java:194)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5877)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
03-24 13:08:26.755 4458-4458/net.dailytoys.afterthecrash W/Ads: Could not call showVideo.
                                                                android.os.RemoteException
                                                                    at com.google.android.gms.ads.internal.mediation.client.y.f(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):212)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):11)
                                                                    at android.os.Binder.transact(Binder.java:388)
                                                                    at com.google.android.gms.internal.zzeu.zzb(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadm.show(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadx.show(Unknown Source)
                                                                    at net.dailytoys.afterthecrash.ActionResolverAndroid$2.run(ActionResolverAndroid.java:86)
                                                                    at android.os.Handler.handleCallback(Handler.java:815)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                    at android.os.Looper.loop(Looper.java:194)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5877)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)

Мой метод init:

private void initAdMob () {
        MobileAds.initialize(this, AD_MOB_ID);
        mRewardedVideoBonusAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());

        mRewardedVideoBonusAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
            @Override
            public void onRewardedVideoAdLoaded() {
                System.out.println(adLogPrefix + " rewarded (bonus) loaded.");
            }

            @Override
            public void onRewardedVideoAdClosed() {
                System.out.println(adLogPrefix + " rewarded (bonus) closed.");
                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
            }

            @Override
            public void onRewarded(RewardItem rewardItem) {
                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
            }

            @Override
            public void onRewardedVideoAdFailedToLoad(int i) {
                actionResolverAndroid.logAnalyticEvent(AnalyticsKeys.AD_ERR_LOADING_REW_VIDEO);
                new Handler().postDelayed(
                        new Runnable() {
                            @Override
                            public void run() {
                                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
                            }
                        },
                        1000 * 15 // 15 seconds
                );
                System.out.println(adLogPrefix + " error loading rew (bonus).");
            }
        });
    }
Я сделал все так, как написано в официальной документации. В чем может быть проблема?
1 2

1 ответ:

Это известная проблема с видео с вознаграждением AdMob.

Рассмотрите возможность удаления запроса из Вознагражденного обратного вызова и оставьте его в закрытом обратном вызове, чтобы у вас не было обоих, и они не могли мешать друг другу.

@Override
public void onRewardedVideoAdClosed() {
    System.out.println(adLogPrefix + " rewarded (bonus) closed.");
    // REMOVE THIS LINE BELOW
    mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
}

@Override
public void onRewarded(RewardItem rewardItem) {
    mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
}