爬过了各种各样的坑,我们终于有一个像样的小游戏了!那么,接下来的工作就是接入广告,上线盈利
芒果是一个聚合广告平台,可以接入芒果后展示多盟、百度、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,编译,运行。
成功!接下来提交审核,等待通过就可以了~