谷歌廣告Admob在cocos2dx上通過回調實現底部Banner


首先說明我的開發平台,以免由於平台問題造成不必要的誤解:

cocos2dx-3.4

ndk-r9d

eclipse

 

Admob是谷歌官方廣告,已經集成在google_play_service_lib包里面,這里給出百度雲下載地址,大家也可以使用官方提供的包。

下載包之后導入到eclipse,將剛導入的項目添加到自己的項目(本文中的項目是AdmobDemo)中做依賴,如下圖

 

然后添加以下代碼到AdmobDemo的Manifest.xml的<application>下:

        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> 
        <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

 

 添加以下權限到Manifest.xml的<manifest>標簽下:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

然后打開下項目的java代碼的主Activity(這里是是AppActivity),新建項目是一個新建的空的java類,實現代碼如下:

/****************************************************************************
Copyright (c) 2008-2010 Ricardo Quesada
Copyright (c) 2010-2012 cocos2d-x.org
Copyright (c) 2011      Zynga Inc.
Copyright (c) 2013-2014 Chukong Technologies Inc.
 
http://www.cocos2d-x.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
package org.cocos2dx.cpp;

import java.util.Timer;
import java.util.TimerTask;

import org.cocos2dx.lib.Cocos2dxActivity;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class AppActivity extends Cocos2dxActivity {
    
    private AdView adView;
    private static final String AD_UNIT_ID = "ca-app-pub-2641376718074288/4798565659";//此處需要申請賬號,然后生成應用id
    private static AppActivity _appActiviy;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//橫屏:根據傳感器橫向切換

        RelativeLayout layout = new RelativeLayout(this);  
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
        addContentView(layout,lp);
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        adParams.setMargins(5, 5, 5, 5);
        adView = new AdView(this);
        adView.setAdSize(AdSize.BANNER);
        adView.setAdUnitId(AD_UNIT_ID );
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();

        adView.loadAd(adRequest);
        adView.setBackgroundColor(Color.BLACK);
        adView.setBackgroundColor(0);
        layout.addView(adView,adParams);
         _appActiviy = this;
    }
    
    public static void hideAd(){
        _appActiviy.runOnUiThread(new Runnable(){
              @Override
              public void run(){
                    if (_appActiviy.adView.isEnabled())
                        _appActiviy.adView.setEnabled(false);
                    if (_appActiviy.adView.getVisibility() != 4 )
                        _appActiviy.adView.setVisibility(View.INVISIBLE);
              }
        });
   }


    public static void showAd(){
        
        _appActiviy.runOnUiThread(new Runnable(){

                @Override
                public void run(){    
                    if (!_appActiviy.adView.isEnabled())
                        _appActiviy.adView.setEnabled(true);
                    if (_appActiviy.adView.getVisibility() == 4 )
                        _appActiviy.adView.setVisibility(View.VISIBLE);    
                }
        });
   }
    
    @Override
  protected void onStart() {
      super.onStart();
  }

@Override
protected void onStop() {
    super.onStop();
}

@Override
protected void onPause() {
    super.onPause();
    if (adView != null) {
        adView.pause();
        }

}

@Override
protected void onResume() {
    super.onResume();
    if (adView != null) {
        adView.resume();
        }

}

@Override
protected void onDestroy() {
    super.onDestroy();
    adView.destroy();
}

@Override
protected void onActivityResult(int reqCode, int resCode, Intent data) {
    super.onActivityResult(reqCode, resCode, data);
}
}

到這里廣告窗口就已經准備好了,就是等cocos2dx 游戲主程啟動時調用就OK了。

在cocos2dx里面調用Java需要使用Jni回調。

下面給出AdmobHelper.cpp類的實現:

#include "AdmobHelper.h"
#include "cocos2d.h"


bool AdmobHelper::isAdShowing = true;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "platform/android/jni/JniHelper.h"
#include <jni.h>
//#include <android/log.h>


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

void AdmobHelper::hideAd()
{
    cocos2d::JniMethodInfo t;
    if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "hideAd", "()V"))
    {

        t.env->CallStaticVoidMethod(t.classID, t.methodID);
        t.env->DeleteLocalRef(t.classID);
        isAdShowing = false;
    }
}
void AdmobHelper::showAd()
{

    cocos2d::JniMethodInfo t;
    if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "showAd", "()V"))
    {

        t.env->CallStaticVoidMethod(t.classID, t.methodID);
        t.env->DeleteLocalRef(t.classID);
        isAdShowing = true;
    }

}

#else


void AdmobHelper::hideAd()
{
    CCLOG("hideAd() called");
    isAdShowing = false;
    return; //nothing
}


void AdmobHelper::showAd()
{
    CCLOG("showAd() called");
    isAdShowing = true;
    return; //nothing;

}
#endif

通過上面的AdmobHelper::showAd()就可以在C++代碼中調用廣告了,記得添加AdmobHelper.h到頭文件中哦。

 

是不是很簡單呢,自己實踐一遍吧!

 

此處給出在AdmobDemo在github上的地址:https://github.com/DiaoYung/AdmobDemo;各位可以按此方法添加到自己的項目中即可。博文寫的時候正在上傳代碼,天朝GitHub比較慢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM