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,"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,编译,运行。

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

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...