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,编译,运行。
成功!接下来提交审核,等待通过就可以了~