2017-05-26 65 views
0

我面临很多困难来展示插页式广告,这是我第一次使用Cocos2D游戏。 这是所有主要的Java代码coco2d的插页式广告android游戏

public class FlyingPanda extends Activity implements AdListener { 
    /** Called when the activity is first created. */ 
    public static CCGLSurfaceView mGLSurfaceView; 
    private boolean isCreated = false; 

    private static final String ADMOB_PUBLISH_ID = "xxxxxxxxxxxxxxxxxx"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     if(!isCreated){ 
      isCreated = true; 
     } else { 
      return; 
     } 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     RelativeLayout layout = new RelativeLayout(this); 
     layout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

     mGLSurfaceView = new CCGLSurfaceView(this); 

     // Create the adView 
     AdView adView = new AdView(this, AdSize.BANNER, ADMOB_PUBLISH_ID); 

     // Initiate a generic request to load it with an ad 
     adView.loadAd(new AdRequest()); 
     adView.setAdListener(this); 

     // Add the adView to it 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT); 
     params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
     params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); 
     adView.setLayoutParams(params); 

     layout.addView(mGLSurfaceView); 
     layout.addView(adView); 

     setContentView(layout); 

     Common.game_initialize(); 
     getScaledCoordinate(); 
     CCDirector.sharedDirector().attachInView(mGLSurfaceView); 

     // attach the OpenGL view to a window 
     Common.sound_engine = SoundEngine.sharedEngine(); 
     loadSound(); 

那我应该在这里添加AdMob的设置?我将定义一个名为interstitial的变量,如横幅或什么?

//////////////////////////////////////////////////////////////////////////////// 
// Admob Setting 
//////////////////////////////////////////////////////////////////////////////// 

如何在所有这些公开课中加载插页式广告?

@Override 
public void onDismissScreen(Ad ad) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onFailedToReceiveAd(Ad ad, ErrorCode errorCode) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onLeaveApplication(Ad ad) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onPresentScreen(Ad ad) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onReceiveAd(Ad ad) { 
+0

eclipse或Android Studio?只添加需要的标签,cocos2d有很多分支,所以清楚你想要集成的框架。 – Aryan

回答

1

MainActivity.java:

public class AppActivity extends Cocos2dxActivity { 
    private static final String ADMOB_INTERSTITIAL = "ca-app-pub-2575683230512628/5833084223"; 
    private InterstitialAd admobInterstitial; 

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

     admobInterstitial = new InterstitialAd(this); 
     admobInterstitial.setAdUnitId(ADMOB_INTERSTITIAL); 
     admobInterstitial.setAdListener(new AdListener() { 
      @Override 
      public void onAdClosed() { 
       admobInterstitial.loadAd(newAdRequest()); 
      } 

     }); 
     admobInterstitial.loadAd(newAdRequest()); 
    } 

    public static void showInterstitial(final String adSdk){ 
     Log.d("ADMOB INTERSTITIAL", "showInterstitial: " + adSdk); 
     _appActivity.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if(adSdk.equalsIgnoreCase("admob")){ 
        if(_appActivity.admobInterstitial != null){ 
         if(_appActivity.admobInterstitial.isLoaded()){ 
          _appActivity.admobInterstitial.show(); 
         } 
        } 
       } 
       else if(adSdk.equalsIgnoreCase("chartboost")){ 
       } 
       else if(adSdk.equalsIgnoreCase("revmob")){ 
       } 
       else{ 
        Log.w("INTERSTITIAL", "unknown ad to show: " + adSdk); 
       } 
      } 
     }); 
    } 

    private AdRequest newAdRequest(){ 
     AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       .addTestDevice("YOUR_DEVICE_ID") 
       .build();  

     return adRequest; 
    } 

} 

C++代码(.c文件):

const char* AppActivityClassName = "org/cocos2dx/cpp/AppActivity"; 

bool NativeHelper::instanceFlag = false; 
NativeHelper* NativeHelper::instance = NULL; 

NativeHelper* NativeHelper::getInstance(){ 
    if(!instanceFlag){ 
     instance = new NativeHelper(); 
     instanceFlag = true; 
    } 

    return instance; 
} 

void NativeHelper::showInterstitial(string adSdk){ 
    cocos2d::JniMethodInfo t; 
    if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "showInterstitial", "(Ljava/lang/String;)V")){ 

     jstring stringArg = t.env->NewStringUTF(adSdk.c_str()); 
     t.env->CallStaticVoidMethod(t.classID, t.methodID, stringArg); 

     t.env->DeleteLocalRef(t.classID); 
     t.env->DeleteLocalRef(stringArg); 
    } 
} 

C++代码(h文件):

class NativeHelper 
{ 
public: 
    static void showInterstitial(string adSdk); 
private:  
    static bool instanceFlag; 
    static NativeHelper* instance; 
} 

你可以也使用SDKBOX,但这是更灵活的解决方案,您始终都可以使用日期sdk。