web-dev-qa-db-ja.com

Admobのリワードビデオ広告-メディエーションが機能しない

Admobから、FlurryとVungleのメディエーションを設定しました。広告をリクエストすると、Logcatに記載されているエラーが常に発生します。

Could not instantiate mediation adapter: com.google.ads.mediation.flurry.FlurryAdapter.
MediationAdapter is not a MediationRewardedVideoAdAdapter: com.vungle.mediation.VungleInterstitialAdapter

コードリファレンス

Gradle

dependencies {

compile files('libs/FlurryAnalytics-6.2.0.jar')
compile files('libs/FlurryAds-6.2.0.jar')
compile files('libs/flurryAndroidDFPandAdMobMediationAdapter-5.0.0.r1.jar')
compile files('libs/dagger-1.2.2.jar')
compile files('libs/javax.inject-1.jar')
compile files('libs/nineoldandroids-2.4.0.jar')
compile files('libs/vungle-publisher-adaptive-id-3.3.4.jar')
compile files('libs/VungleAdapter.jar')

compile 'com.Android.support:multidex:1.0.0'
compile 'com.google.Android.gms:play-services-ads:8.3.+'
compile 'com.google.Android.gms:play-services-analytics:8.3.+'
compile 'com.google.Android.gms:play-services-appindexing:8.3.+'
compile 'com.google.Android.gms:play-services-appinvite:8.3.+'
compile 'com.google.Android.gms:play-services-games:8.3.+'
compile 'com.google.Android.gms:play-services-identity:8.3.+'
compile 'com.google.Android.gms:play-services-plus:8.3.+'
compile project(':BaseGameUtils')
compile project(':facebook-Android-sdk-4.8.1')
compile files('libs/AudienceNetwork.jar')
compile files('libs/FacebookAdapter.jar')
}

Admobのセットアップ

以下に示すように、AdtypeをInterstitialとしてAdmobに設定しました enter image description here

コード

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
@Override
protected void onPause() {
    super.onPause();
    if(rewardedVideoAd!= null)
        rewardedVideoAd.pause();
    socialShareType=null;
}
@Override
protected void onResume() {
    super.onResume();
    if(rewardedVideoAd!=null)
        rewardedVideoAd.resume();
    // Refresh the state of the +1 button each time we receive focus.
    if(canShowGPlus1() && plusOneButton!=null) {
        plusOneButton.initialize("https://developers.google.com/+", PLUS_ONE_REQUEST_CODE);
    //  plusOneButton.initialize("https://play.google.com/store/apps/details?id=com.game.puzzle.game.ballmania.Android", PLUS_ONE_REQUEST_CODE);
    }
}
@Override
public void onDestroy() {
    if(rewardedVideoAd!=null)
        rewardedVideoAd.destroy();
    super.onDestroy();
    accessTokenTracker.stopTracking();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    rateMe();
    getActualScreenSize();

    // Initialize the SDK before executing any other operations,
    // especially, if you're using Facebook UI elements.
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);

    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                    System.out.println("FacebookCallback : Success");
                    //fbShareNow();
                }

                @Override
                public void onCancel() {
                    // App code
                    System.out.println("FacebookCallback : Cancel");
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                    System.out.println("FacebookCallback : Erroe");
                }
            });
    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            currentAccessToken=newAccessToken;
        }
    };

    currentAccessToken =  AccessToken.getCurrentAccessToken();

    c=AndroidLauncher.this;
    bld = new AlertDialog.Builder(this);

    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

    //initialize(new MainGame(this), config);

    // Create the layout
    layout = new RelativeLayout(this);

    // Do the stuff that initialize() would do for you
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    AdView admobView = createAdView();
    layout.addView(admobView);

    View gameView = initializeForView(new MainGame(this), config);
    layout.addView(gameView);

    showGPlus1(150, 150, 150, 150);

    setContentView(layout);

    if (isAppInstalledFromGooglePlay()) {
        iabSetup();
    }else{
        Arrays.fill(gemPurchased, Boolean.FALSE);
    }

    initializeGameServices();

    alarmSetup();


    setInterestial();
    setRewardedVideo();

    //getHash();

}
private void setRewardedVideo() {
    rewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
    rewardedVideoAd.setUserId("userId"); 
    AdRequest adRequest = new AdRequest.Builder().build();
    rewardedVideoAd.loadAd(AD_UNIT_ID_REWARDED_VIDEO_AD, adRequest);

    rewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            System.out.println("onRewardedVideoAdLoaded()");
            if (rewardedVideoAd.isLoaded()) {
                rewardedVideoAd.show();
            }
        }

        @Override
        public void onRewardedVideoAdOpened() {
            System.out.println("onRewardedVideoAdOpened()");

        }

        @Override
        public void onRewardedVideoStarted() {
            System.out.println("onRewardedVideoStarted()");

        }

        @Override
        public void onRewardedVideoAdClosed() {
            System.out.println("onRewardedVideoAdClosed()");

        }

        @Override
        public void onRewarded(RewardItem rewardItem) {
            System.out.println("onRewarded()");

        }

        @Override
        public void onRewardedVideoAdLeftApplication() {
            System.out.println("onRewardedVideoAdLeftApplication()");

        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            System.out.println("onRewardedVideoAdFailedToLoad()");

        }
    });
}

Logcat:

01-31 19:38:05.795    6634-6634/com.game.puzzle.game.ballmania.Android I/dalvikvm﹕ Could not find method Android.security.NetworkSecurityPolicy.getInstance, referenced from method com.google.Android.gms.ads.internal.t.e.a
01-31 19:38:06.085    6634-6735/com.game.puzzle.game.ballmania.Android D/dalvikvm﹕ DexOpt: --- BEGIN 'ads1706048048.jar' (bootstrap=0) ---
01-31 19:38:06.285    6634-6735/com.game.puzzle.game.ballmania.Android D/dalvikvm﹕ DexOpt: --- END 'ads1706048048.jar' (success) ---
01-31 19:38:06.285    6634-6735/com.game.puzzle.game.ballmania.Android D/dalvikvm﹕ DEX prep '/data/data/com.game.puzzle.game.ballmania.Android/cache/ads1706048048.jar': unzip in 0ms, rewrite 207ms
01-31 19:38:13.165    6634-6634/com.game.puzzle.game.ballmania.Android I/Ads﹕ Starting ad request.
01-31 19:38:13.175    6634-6634/com.game.puzzle.game.ballmania.Android I/Ads﹕ Use AdRequest.Builder.addTestDevice("B6155B00A6A175A4D29AE13C0F0FBD7B") to get test ads on this device.
01-31 19:38:16.665    6634-7074/com.game.puzzle.game.ballmania.Android W/Ads﹕ Could not instantiate mediation adapter: com.google.ads.mediation.flurry.FlurryAdapter. null
01-31 19:38:16.715    6634-7074/com.game.puzzle.game.ballmania.Android W/Ads﹕ Fail to instantiate adapter com.google.ads.mediation.flurry.FlurryAdapter
    Android.os.RemoteException
            at com.google.Android.gms.internal.zzev.zzah(Unknown Source)
            at com.google.Android.gms.internal.zzev.zzaf(Unknown Source)
            at com.google.Android.gms.internal.zzew$zza.onTransact(Unknown Source)
            at Android.os.Binder.transact(Binder.Java:347)
            at com.google.Android.gms.ads.internal.l.a.d.a(SourceFile:94)
            at com.google.Android.gms.ads.internal.reward.c.b(SourceFile:194)
            at com.google.Android.gms.ads.internal.reward.mediation.h.a(SourceFile:53)
            at com.google.Android.gms.ads.internal.util.b.run(SourceFile:19)
            at com.google.Android.gms.ads.internal.util.r.call(SourceFile:52)
            at com.google.Android.gms.ads.internal.util.s.run(SourceFile:75)
            at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:390)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:234)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1080)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:573)
            at Java.lang.Thread.run(Thread.Java:841)
01-31 19:38:16.745    6634-7075/com.game.puzzle.game.ballmania.Android W/Ads﹕ MediationAdapter is not a MediationRewardedVideoAdAdapter: com.vungle.mediation.VungleInterstitialAdapter
01-31 19:38:16.745    6634-7075/com.game.puzzle.game.ballmania.Android W/Ads﹕ Fail to check if adapter is initialized.
    Android.os.RemoteException
            at com.google.Android.gms.internal.zzfd.isInitialized(Unknown Source)
            at com.google.Android.gms.internal.zzex$zza.onTransact(Unknown Source)
            at Android.os.Binder.transact(Binder.Java:347)
            at com.google.Android.gms.ads.internal.l.a.g.g(SourceFile:621)
            at com.google.Android.gms.ads.internal.reward.mediation.a.a(SourceFile:83)
            at com.google.Android.gms.ads.internal.util.b.run(SourceFile:19)
            at com.google.Android.gms.ads.internal.util.r.call(SourceFile:52)
            at com.google.Android.gms.ads.internal.util.s.run(SourceFile:75)
            at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:390)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:234)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1080)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:573)
            at Java.lang.Thread.run(Thread.Java:841)
01-31 19:38:16.745    6634-6634/com.game.puzzle.game.ballmania.Android W/Ads﹕ Failed to load ad: 3
10
iappmaker

プログラムは、 MediationAdapter を実装するad.rewards.meditationのインターフェースである MediationRewardedVideoAdAdapter の実装を探しています。

使用しているもの:

com.vungle.mediation.VungleInterstitialAdapter

MediationAdapter is not a MediationRewardedVideoAdAdapter: com.vungle.mediation.VungleInterstitialAdapter

あなたのクラス:

public class AndroidLauncher extends AndroidApplication 
    implements ActionResolver, GameHelper.GameHelperListener {

呼び出している他のメソッドのどこにアダプターを実装しているかはわかりませんが、Interstitialも機能しているとのことです。バングルと突風の使用の間の混乱のようです。 vungleドキュメント による。

compile files('libs/flurryAndroidDFPandAdMobMediationAdapter-5.0.0.r1.jar')
compile files('libs/VungleAdapter.jar')

両方を使用しており、各AdRequestでどちらを使用しているかを明確にする必要があります。

次のようにAdViewを初期化できます。

 AdView admobView = new AdView(this);

の代わりに:

AdView admobView = createAdView();

AdRequest.Builderを作成した後、これを行に追加してテストを実行できます。

AdRequest.Builder.addTestDevice("B6155B00A6A175A4D29AE13C0F0FBD7B");

また、APIキーが急増するように設定されていることを確認してください。これには、AdMob、ダッシュボード、およびコードで急いでアダプターをセットアップするための情報が含まれています AndroidのAdMobを介して仲介

また、アダプターの追加機能に関する興味深いコードスニペットも示しています。

FlurryAdapterExtras flurryAdapterExtras = new FlurryAdapterExtras();

AdRequest adRequest = new AdRequest.Builder()
    .addNetworkExtras(flurryAdapterExtras).build();

部分的には、nullポインタ例外の元の質問に答えるためです。

OnPause、onResume、onDestroyメソッドにnullチェックを入れます。別のメソッドに入れるのではなく、onCreate内に初期化を入れる方が賢明かもしれません。

rewardedVideoAdが初期化される前に、何らかの理由でonPauseメソッドが呼び出されている可能性があります。少なくともこの方法では、実行されるかどうかを確認でき、そのエラーを削除する必要があります(ただし、新しいエラーが発生する可能性があります)。

読みやすくするために、oncreateメソッドの後に次のすべてのメソッドを配置します。

@Override
protected void onPause() {
    if(rewardedVideoAd!=null)
        rewardedVideoAd.pause();
    super.onPause();
    .../...
}
@Override
protected void onResume() {
    super.onResume();
    if(rewardedVideoAd!=null)
        rewardedVideoAd.resume();
    .../...

    }
}
@Override
public void onDestroy() {
    if(rewardedVideoAd!=null)
        rewardedVideoAd.destroy();
    super.onDestroy();
    accessTokenTracker.stopTracking();
}
6
Yvette Colomb