Ошибка видеорекламы 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 ответ:
Это известная проблема с видео с вознаграждением 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()); }