Admobから、FlurryとVungleのメディエーションを設定しました。広告をリクエストすると、Logcatに記載されているエラーが常に発生します。
Could not instantiate mediation adapter: com.google.ads.mediation.flurry.FlurryAdapter.
MediationAdapter is not a MediationRewardedVideoAdAdapter: com.vungle.mediation.VungleInterstitialAdapter
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')
}
以下に示すように、AdtypeをInterstitialとしてAdmobに設定しました
@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()");
}
});
}
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
プログラムは、 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();
}