Межстраничная реклама для игры coco2d для Android

Я столкнулся с большими трудностями, чтобы показать Interstitial, я впервые работаю с игрой Cocos2D. Это весь основной код Java

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) {

person Hamza Hasni    schedule 26.05.2017    source источник
comment
затмение или Android Studio? добавьте только обязательный тег, у cocos2d много ветвей, поэтому четко укажите, с какой структурой вы пытаетесь интегрироваться.   -  person Abhishek Aryan    schedule 27.05.2017


Ответы (1)


Основная активность.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):

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);
    }
}

код С++ (файл .h):

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

Вы также можете использовать SDKBOX, но это более гибкое решение, и у вас всегда будет актуальный SDK.

person Makalele    schedule 31.05.2017