2017-05-26 17 views
0

インタースティシャルを表示するのは非常に困難です。これは初めてのCocos2Dゲームでの作業です。 これは私がAdMobの設定でここで追加することになっていますどのようなすべての主要なJavaコードcoco2dアンドロイドゲームのインタースティシャル広告

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 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?必要なタグだけを追加します。多くのforkを持つ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も使用しますが、これはより柔軟なソリューションであり、常に最新の-date sdk。

関連する問題