cocos2dx Android接入芒果插屏广告

cocos2dx Android接入芒果插屏广告

爬过了各种各样的坑,我们终于有一个像样的小游戏了!那么,接下来的工作就是接入广告,上线盈利 大笑

芒果是一个聚合广告平台,可以接入芒果后展示多盟、百度、AdMob等灰常多家的广告,非常方便。

1.广告平台配置

1.1注册芒果账号:http://www.adsmogo.com/

进入芒果后选择 App管理 -> 添加App,填好各种信息后点击下方的 ‘添加App’ 按钮,这里过程很简单,我就不截图啦。

点击App列表就可以看到我们刚刚添加的App了,点击App名称可以进入App的配置。这里我们先暂停一下,既然芒果是个聚合的广告平台,展示的是别的平台的广告,那么我们这里就需要在其他平台同样申请一个App,这里我们选择多盟,这个平台随意啦,大家根据自己的需要选择,也可以选择多个。

1.2注册多盟:http://www.domob.cn/

进入多盟开发者后台,点击 我的应用 -> 添加应用,然后填写应用信息。

添加广告位,这里注意一下一个应用是可以有多个广告位的~ 广告位类型选择普通插屏广告位。

成功后我们就可以得到publisher ID和广告位ID了。到这里多盟平台就配置完了。

1.3填写publisherID和广告位ID

返回芒果,到App配置的页面,选择全屏/插屏,然后点击多盟,填写publisher ID和广告位ID。

保存后在优先级上打个勾,到这里芒果平台的配置也搞定了~  记下芒果的应用ID,我们在接入广告的时候需要用到。

2.导入SDK

先创建一个cocos2dx项目,确保可以编译到安卓上,怎么做就不用我介绍了吧(*^__^*)

下载芒果cocos2dx版本的sdk和多盟的sdk,找到我们需要的jar包。

打开eclipse,导入项目,我这里是AndroidTest,在libs目录上右键(如果没有libs就新建一个),选择import -> General -> File System,然后点击next

找到芒果和多盟的sdk,导入。

选中libs文件夹中的两个jar,右键 -> Build Path -> Add to Build Path。

3.添加用户权限

3.1打开AndroidManifest.xml,在<application>标签后面加入下面的代码:

<!-- 添加用户权限 -->
  <!-- 连接网络权限INTERNET ,用亍请求广告(必须),mogo会使用该权限 -->
  <uses-permission android:name="android.permission.INTERNET" />
  <!-- 读取手机基本信息权限READ_PHONE_STATE,用亍精确统计用户的机型等信息(必须),mogo 会使用该权限 -->
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <!-- 读取网络信息权限ACCESS_NETWORK_STATE,用亍识别gprs网络的接入点的情况(必须), mogo会使用该权限 -->
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <!-- 获取用户地理信息权限,用亍帮劣精 确统计 开发 者的程 序发布 乀后的 用户分 布情况 ,mogo会 使用该权限-->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
  <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
  <!-- 读写sd 卡的权限,用亍缓存广告所用到的图片 ,节 省流量 ,并可 获得更 好的用 户体验 ,mogo会使用该权限-->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <!-- 获得当前wifi的状态,微于广告平台需要 此权限 ,mogo会 使用该 权限 -->
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 按效果付费功能需要的权限,mogo会使用该 权限 -->
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <!--多盟所需权限,无此权限多盟将无法 展示广 告  -->
  <uses-permission android:name="android.permission.VIBRATE" />

如下图所示:

3.2 声明Mogo的Activity,在<application>标签里插入以下代码:

<!-- 声明Mogo的Activity -->
    <activity
    android:name="com.adsmogo.adview.AdsMogoWebView"
    android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" />
    <activity android:name="com.adsmogo.mriad.view.AdsMogoActionHandler"
    android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" >
    </activity>
    <!-- 注册Service,自主广告不交换广告的应用下载功能所需 -->
    <service android:name="com.adsmogo.controller.service.UpdateService" android:exported="true" android:process=":remote" />
    <!-- 注册Service,安装应用所用 -->
    <service android:name="com.adsmogo.controller.service.CountService" android:exported="true" android:process=":remote" />

如下图所示:

4. 植入广告

4.1 在Cocos2dxActivity的onCreate函数中加入以下代码:

<span style="white-space:pre">		</span>AdsMogoInterstitialManager.setDefaultInitManualRefresh(false); 
    //设置AppKey
    AdsMogoInterstitialManager.setDefaultInitAppKey("mogoID"); 
    //设置当前Activity对象 
    AdsMogoInterstitialManager.setInitActivity(Cocos2dxActivity.this); 
    //初始化(必须先设置默认的AppKey和Activity对象才能通过此方法初始化SDK) 
    AdsMogoInterstitialManager.shareInstance().initDefaultInterstitial(); 
    
    handler = new Handler() {

      @Override
      public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        switch (msg.what) {
          case 3:
            /**
             *进入展示时机
             *当应用需要展示全屏广告调用interstitialShow(boolean isWait);
             *通知SDK进入展示时机,SDK会竭尽全力展示出广告,当然由于网络等问题不能立即展示
             *广告的,您可以通过参数isWait来控制授权SDK在获得到广告后立即展示广告。
             */
            AdsMogoInterstitialManager.shareInstance()
            .defaultInterstitial().interstitialShow(true);
            break;
          case 5:
            /**
             *退出展示时机
             *如果您之前进入了展示时机,并且isWait参数设置为YES,那么在需要取消等待广告展示的
             *时候调用方法interstitialCancel();来通知SDK
             */
            AdsMogoInterstitialManager.shareInstance()
            .defaultInterstitial().interstitialCancel();
            break;
          default:
            break;
        }
      }
    };

将其中的mogoID替换成在芒果平台上申请到的应用ID。

4.2 在Cocos2dxActivity中加入下面三个函数:

<span style="white-space:pre">	</span>//退出展示时机
  public static void closeInterstitial(){
    Message msg = handler.obtainMessage();
    msg.what = 5;
    handler.sendMessage(msg); 
  }
  //向handler发送要展示全插屏的消息
  public static void showInterstitialStatic(){
    Log.e("MogoCocos2dx Demo", "showInterstitialStatic");
    Message msg = handler.obtainMessage();
    msg.what = 3; handler.sendMessage(msg);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    AdsMogoLayout.clear();
    if (adView != null) {
      adView.clearThread();
    }
    Log.e("AdsMogo", "onDestroy");
    System.exit(0);
  }

4.3 新建C++文件

在classes目录下新建MOGOAd.h和MOGOAd.cpp。

MOGOAd.h的内容是:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif
#include "cocos2d.h"
  using namespace cocos2d;
class MOGOAd
{
  public:
  static void showInterstitial();
  static void closeInterstitial();
 };

MOGOAd.cpp的内容是:

#include "MOGOAd.h"
void MOGOAd::showInterstitial()
{
 	#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
   JniMethodInfo showInterstitial;
  bool isHave = JniHelper::getStaticMethodInfo(showInterstitial,"org/cocos2dx/cpp/Cocos2dxActivity","showInterstitialStatic","()V");
   if (!isHave) {
   CCLog("jni:hideBannerStatic false");
  }else{
  CCLog("jni:hideBannerStatic true");
  showInterstitial.env->CallStaticVoidMethod(showInterstitial.classID, showInterstitial.methodID);
   }
    #endif
}
void MOGOAd::closeInterstitial()
{
 	#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
   JniMethodInfo closeInterstitial;
  bool isHave = JniHelper::getStaticMethodInfo(closeInterstitial,"org/cocos2dx/cpp/Cocos2dxActivity","closeInterstitial","()V");
   if (!isHave) {
   CCLog("jni:hideBannerStatic false");
  }else{
  CCLog("jni:hideBannerStatic true");
  
  closeInterstitial.env->CallStaticVoidMethod(closeInterstitial.classID, closeInterstitial.methodID);
   }
    #endif
}

4.4 将HelloWorldScene.cpp中的点击按钮方法改为:

void HelloWorld::menuCloseCallback(Ref* pSender)
{
    MOGOAd::showInterstitial();
}

OK,功德圆满,在Android.mk里加入MOGOAd.cpp,编译,运行。

成功!接下来提交审核,等待通过就可以了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值