1

我面临一个让我发疯的问题,我在我的游戏中设置了奖励视频。

只要我使用 admob 作为我唯一的奖励视频来源,我已经实现了一个奖励视频听众和一切正常工作。现在我添加了 2 个中介网络 chartboost 和广告群。我可以看到视频奖励,但是视频一结束,我就会收到一个错误,我无法理解如何实施

错误如上所述,对于 adcolony 和 chartboost 都是一样的

java.lang.NoSuchMethodError: No interface method onVideoCompleted(Lcom/google/android/gms/ads/reward/mediation/MediationRewardedVideoAdAdapter;)V in class Lcom/google/android/gms/ads/reward/mediation/MediationRewardedVideoAdListener; or its super classes (declaration of 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener' appears in /data/app/mypackage/base.apk)
at com.jirbo.adcolony.AdColonyAdListener.onReward(AdColonyAdListener.java:138)
at com.adcolony.sdk.l$10.run(SourceFile:947)
at android.app.Activity.runOnUiThread(Activity.java:6029)
at com.adcolony.sdk.aw.a(SourceFile:212)
at com.adcolony.sdk.l.d(SourceFile:944)
at com.adcolony.sdk.l$15.a(SourceFile:217)
at com.adcolony.sdk.ag.a(SourceFile:188)
at com.adcolony.sdk.ag$2.run(SourceFile:157)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)

我的代码在 android laucher 类上是这样的

import Intreface.AdHandler;
import Intreface.GoogleServices;
import Intreface.IntestiliadAd;
import Intreface.VideoEventListener;


public class AndroidLauncher extends AndroidApplication implements 
GoogleServices, RewardedVideoAdListener, AdHandler , IntestiliadAd{
private RewardedVideoAd adRewardedVideoView;
private static final String REWARDED_VIDEO_AD_UNIT_ID = 
 ".................................";
private static String TAG = "AndroidLauncher";
private static final String AD_UNIT_ID_INTERSTITIAL = 
".............................";
private static final String AD_UNIT_ID_BANNER = 
".............................";
private final int SHOW_ADS = 1;
private final int HIDE_ADS = 0;
protected AdView adView;
private InterstitialAd interstitialAd;



Handler handler = new Handler(){

@Override
public void handleMessage(Message msg) {
    switch (msg.what){
        case SHOW_ADS:
            adView.setVisibility(View.VISIBLE);
            break;
        case HIDE_ADS:
            adView.setVisibility(View.GONE);
            break;

    }
}
};


private boolean is_video_ad_loaded;
private VideoEventListener vel;
private MediationAdapter mediationAdapter;


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


RelativeLayout layout = new RelativeLayout(this);

AndroidApplicationConfiguration config = new 
AndroidApplicationConfiguration();
View gameView = initializeForView(new Farbbit(this,this,this), config);
layout.addView(gameView);
setupRewarded();

interstitialAd = new InterstitialAd(this);
adView = new AdView(this);
adView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        super.onAdLoaded();
        Log.i(TAG, "Ad loaded...");
    }
});

adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID_BANNER);
interstitialAd.setAdUnitId(AD_UNIT_ID_INTERSTITIAL);

interstitialAd.setAdListener(new AdListener() {

@Override
public void onAdLoaded() {

             }
@Override
 public void onAdClosed() {
           }
});



AdRequest.Builder builder = new AdRequest.Builder();
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT
);
layout.addView(adView ,adParams);

adView.loadAd(builder.build());
setContentView(layout);

}
@Override
public void showOrLoadInterstital() {
    try {
          runOnUiThread(new Runnable() {
public void run() {
                      if (interstitialAd.isLoaded()) {
                            interstitialAd.show();

                          }
                      else {
                            AdRequest interstitialRequest = new 
AdRequest.Builder().build();
                           interstitialAd.loadAd(interstitialRequest);

                          }
                    }
 });
        } catch (Exception e) {
        }
  }

 @Override
  public void loadInterstital() {
  try {
    runOnUiThread(new Runnable() {
        public void run() {
  if (!interstitialAd.isLoaded()){
    AdRequest interstitialRequest = new AdRequest.Builder().build();
    interstitialAd.loadAd(interstitialRequest);
}
}   });
} catch (Exception e) {
}
}

public void loadRewardedVideoAd() {
adRewardedVideoView.loadAd(REWARDED_VIDEO_AD_UNIT_ID, new 
AdRequest.Builder().build());
}

public void setupRewarded() {
adRewardedVideoView = MobileAds.getRewardedVideoAdInstance(this);
adRewardedVideoView.setRewardedVideoAdListener(this);
loadRewardedVideoAd();
}


public boolean hasVideoLoaded() {
if (is_video_ad_loaded) {
    return true;
}
runOnUiThread(new Runnable() {
    public void run() {
        if (!adRewardedVideoView.isLoaded()) {
            loadRewardedVideoAd();
        }
    }
});
return false;
}

public void showRewardedVideoAd() {
runOnUiThread(new Runnable() {
    public void run() {
        if (adRewardedVideoView.isLoaded()) {
            adRewardedVideoView.show();
        } else {
            loadRewardedVideoAd();
        }
    }
});
}

@Override
public void onRewarded(RewardItem reward) {
 if (vel != null) {

    vel.onRewardedEvent(reward.getType(), reward.getAmount());
}
}

@Override
public void onRewardedVideoAdLeftApplication() {

}
@Override
public void onRewardedVideoAdFailedToLoad(int i) {

}


@Override
public void onRewardedVideoAdClosed() {
is_video_ad_loaded = false;
loadRewardedVideoAd();
if (vel != null) {
    vel.onRewardedVideoAdClosedEvent();
}
}

@Override
public void onRewardedVideoAdLoaded() {
if (vel != null) {
    vel.onRewardedVideoAdLoadedEvent();
}
is_video_ad_loaded = true;
}

@Override
public void onRewardedVideoAdOpened() {

}

@Override
public void onRewardedVideoStarted() {

}

public void setVideoEventListener(VideoEventListener listener) {
this.vel = listener;
}

@Override
public void showAds(boolean show) {
  handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
}


}
4

0 回答 0