文档章节

cocos2d-x 3.X 在android 中添加多盟插屏广告

piggybear
 piggybear
发布于 2015/02/16 10:27
字数 1248
阅读 43
收藏 0

效果如下



注册和添加应用就不说了

android部分

1.先将SDK放到libs中



2.AndroidManifest.xml修改如下

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="duomengad.crlyn"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.   
  7.     <uses-sdk android:minSdkVersion="16"/>  
  8.     <!-- 网络访问权限 -->  
  9.     <uses-permission android:name="android.permission.INTERNET" />  
  10.     <!-- 获取网络信息状态,如当前的网络连接是否有效 -->  
  11.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  12.     <!-- 读取手机状态 -->  
  13.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  14.     <!-- 允许程序写入外部存储,如SD卡上写文件 -->  
  15.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  16.     <!-- 获取错略位置 -->  
  17.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  18.     <!-- 获取WiFi状态 -->  
  19.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  20.       
  21.     <!-- 以下权限为可选权限,主要是品牌广告会用到,如果您没有添加,需要这些效果的品牌广告将不会投放到您的应用上 -->  
  22.     <!-- 震动权限 -->  
  23.     <uses-permission android:name="android.permission.VIBRATE" />  
  24.     <uses-feature android:glEsVersion="0x00020000" />  
  25.   
  26.     <application android:label="@string/app_name"  
  27.                  android:icon="@drawable/icon">  
  28.                        
  29.         <!-- Tell Cocos2dxActivity the name of our .so -->  
  30.         <meta-data android:name="android.app.lib_name"  
  31.                   android:value="cocos2dcpp" />  
  32.         <!-- 多盟的SDK -->  
  33.         <activity android:name="cn.domob.android.ads.DomobActivity"  
  34.             android:theme="@android :style/Theme.Translucent"></activity>  
  35.         <activity android:name="org.cocos2dx.cpp.AppActivity"  
  36.                   android:label="@string/app_name"  
  37.                   android:screenOrientation="portrait"  
  38.                   android:theme="@android :style/Theme.NoTitleBar.Fullscreen"  
  39.                   android:configChanges="orientation">  
  40.   
  41.             <intent-filter>  
  42.                 <action android:name="android.intent.action.MAIN" />  
  43.                 <category android:name="android.intent.category.LAUNCHER" />  
  44.             </intent-filter>  
  45.         </activity>  
  46.     </application>  
  47.   
  48.     <supports-screens android:anyDensity="true"  
  49.                       android:smallScreens="true"  
  50.                       android:normalScreens="true"  
  51.                       android:largeScreens="true"  
  52.                       android:xlargeScreens="true"/>  
  53.   
  54.     <uses-permission android:name="android.permission.INTERNET"/>  
  55. </manifest>   

3.AppActivity.java 文件修改如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**************************************************************************** 
  2. Copyright (c) 2008-2010 Ricardo Quesada 
  3. Copyright (c) 2010-2012 cocos2d-x.org 
  4. Copyright (c) 2011      Zynga Inc. 
  5. Copyright (c) 2013-2014 Chukong Technologies Inc. 
  6.   
  7. http://www.cocos2d-x.org 
  8.  
  9. Permission is hereby granted, free of charge, to any person obtaining a copy 
  10. of this software and associated documentation files (the "Software"), to deal 
  11. in the Software without restriction, including without limitation the rights 
  12. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  13. copies of the Software, and to permit persons to whom the Software is 
  14. furnished to do so, subject to the following conditions: 
  15.  
  16. The above copyright notice and this permission notice shall be included in 
  17. all copies or substantial portions of the Software. 
  18.  
  19. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  20. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  21. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
  22. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  23. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
  24. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
  25. THE SOFTWARE. 
  26. ****************************************************************************/  
  27. package org.cocos2dx.cpp;  
  28.   
  29. import org.cocos2dx.lib.Cocos2dxActivity;  
  30.   
  31. import cn.domob.android.ads.DomobAdManager.ErrorCode;  
  32. import cn.domob.android.ads.DomobInterstitialAd;  
  33. import cn.domob.android.ads.DomobInterstitialAdListener;  
  34. import android.os.Bundle;  
  35. import android.util.Log;  
  36.   
  37. public class AppActivity extends Cocos2dxActivity {  
  38.       
  39.     private DomobInterstitialAd mInterstitialAd;  
  40.     private static AppActivity _AppActivity;  
  41.     public static final String PUBLISHER_ID = "56OJwdBIuNBzc/kIO9";  
  42.     public static final String InterstitialPPID = "16TLuqBoApj34NUE2GW-0G9z";  
  43.       
  44.     @Override  
  45.     protected void onCreate(Bundle savedIntanceState){  
  46.         super.onCreate(savedIntanceState);  
  47.           
  48.         mInterstitialAd = new DomobInterstitialAd(this, PUBLISHER_ID, InterstitialPPID, DomobInterstitialAd.INTERSITIAL_SIZE_300X250);  
  49.           
  50.         mInterstitialAd.setInterstitialAdListener(new DomobInterstitialAdListener() {  
  51.             @Override  
  52.             public void onInterstitialAdReady() {  
  53.                 Log.i("DomobSDKDemo""onAdReady");  
  54.             }  
  55.   
  56.             @Override  
  57.             public void onLandingPageOpen() {  
  58.                 Log.i("DomobSDKDemo""onLandingPageOpen");  
  59.             }  
  60.   
  61.             @Override  
  62.             public void onLandingPageClose() {  
  63.                 Log.i("DomobSDKDemo""onLandingPageClose");  
  64.             }  
  65.   
  66.             @Override  
  67.             public void onInterstitialAdPresent() {  
  68.                 Log.i("DomobSDKDemo""onInterstitialAdPresent");  
  69.             }  
  70.   
  71.             @Override  
  72.             public void onInterstitialAdDismiss() {  
  73.                 // Request new ad when the previous interstitial ad was closed.  
  74.                 mInterstitialAd.loadInterstitialAd();  
  75.                 Log.i("DomobSDKDemo""onInterstitialAdDismiss");  
  76.             }  
  77.   
  78.             @Override  
  79.             public void onInterstitialAdFailed(ErrorCode arg0) {  
  80.                 Log.i("DomobSDKDemo""onInterstitialAdFailed");                  
  81.             }  
  82.   
  83.             @Override  
  84.             public void onInterstitialAdLeaveApplication() {  
  85.                 Log.i("DomobSDKDemo""onInterstitialAdLeaveApplication");  
  86.                   
  87.             }  
  88.   
  89.             @Override  
  90.             public void onInterstitialAdClicked(DomobInterstitialAd arg0) {  
  91.                 Log.i("DomobSDKDemo""onInterstitialAdClicked");  
  92.             }  
  93.         });  
  94.           
  95.         mInterstitialAd.loadInterstitialAd();  
  96.         _AppActivity = this;  
  97.     }  
  98.       
  99.     public static void showAd(){  
  100.         _AppActivity.runOnUiThread(new Runnable() {  
  101.             @Override  
  102.             public void run() {  
  103.                 if (_AppActivity.mInterstitialAd.isInterstitialAdReady()){  
  104.                     _AppActivity.mInterstitialAd.showInterstitialAd(_AppActivity);  
  105.                 } else {  
  106.                     Log.i("DomobSDKDemo""Interstitial Ad is not ready");  
  107.                     _AppActivity.mInterstitialAd.loadInterstitialAd();  
  108.                 }  
  109.             }  
  110.         });  
  111.     }  
  112. }  

4.android.mk修改如下

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE := cocos2dcpp_shared  
  6.   
  7. LOCAL_MODULE_FILENAME := libcocos2dcpp  
  8.   
  9. LOCAL_SRC_FILES := hellocpp/main.cpp \  
  10.                    ../../Classes/AppDelegate.cpp \  
  11.                    ../../Classes/HelloWorldScene.cpp \  
  12.                    ../../Classes/Admob.cpp  
  13.   
  14. LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes  
  15.   
  16. LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static  
  17. LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static  
  18.   
  19. # LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static  
  20. # LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static  
  21. # LOCAL_WHOLE_STATIC_LIBRARIES += spine_static  
  22. # LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static  
  23. # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static  
  24. # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static  
  25.   
  26.   
  27. include $(BUILD_SHARED_LIBRARY)  
  28.   
  29. $(call import-module,.)  
  30. $(call import-module,audio/android)  
  31.   
  32. # $(call import-module,Box2D)  
  33. # $(call import-module,editor-support/cocosbuilder)  
  34. # $(call import-module,editor-support/spine)  
  35. # $(call import-module,editor-support/cocostudio)  
  36. # $(call import-module,network)  
  37. # $(call import-module,extensions)  

VS部分

1.新建Admob.h

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #pragma once  
  2.   
  3. class Admob{  
  4. public:  
  5.     static void showAd();  
  6. };  

2.新建Admob.cpp

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include "Admob.h"  
  2. #include "cocos2d.h"  
  3.   
  4. USING_NS_CC;  
  5.   
  6. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)  
  7. #include "platform/android/jni/JniHelper.h"  
  8. #include <jni.h>  
  9.   
  10. const char* AppActivityCalssName = "org/cocos2dx/cpp/AppActivity";  
  11.   
  12. void Admob::showAd(){  
  13.     cocos2d::JniMethodInfo t;  
  14.     if(cocos2d::JniHelper::getStaticMethodInfo(t,AppActivityCalssName,"showAd","()V")){  
  15.         t.env->CallStaticVoidMethod(t.classID,t.methodID);  
  16.         t.env->DeleteLocalRef(t.classID);  
  17.     }  
  18. }  
  19.   
  20. #else  
  21.   
  22. void Admob::showAd(){  
  23.     log("showAd() called");  
  24.     return;  
  25. }  
  26.   
  27. #endif  

3.修改HelloWorldScene.h文件,修改如下

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #ifndef __HELLOWORLD_SCENE_H__  
  2. #define __HELLOWORLD_SCENE_H__  
  3.   
  4. #include "cocos2d.h"  
  5.   
  6. class HelloWorld : public cocos2d::Layer  
  7. {  
  8. public:  
  9.     // there's no 'id' in cpp, so we recommend returning the class instance pointer  
  10.     static cocos2d::Scene* createScene();  
  11.   
  12.     // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone  
  13.     virtual bool init();    
  14.       
  15.     // a selector callback  
  16.     void menuCloseCallback(cocos2d::Ref* pSender);  
  17.     void adCallback(cocos2d::Ref* pRef);  
  18.       
  19.     // implement the "static create()" method manually  
  20.     CREATE_FUNC(HelloWorld);  
  21. };  
  22.   
  23. #endif // __HELLOWORLD_SCENE_H__  

4.修改HelloWorldScene.cpp文件,修改如下

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include "HelloWorldScene.h"  
  2. #include "Admob.h"  
  3.   
  4. USING_NS_CC;  
  5.   
  6. Scene* HelloWorld::createScene()  
  7. {  
  8.     // 'scene' is an autorelease object  
  9.     auto scene = Scene::create();  
  10.       
  11.     // 'layer' is an autorelease object  
  12.     auto layer = HelloWorld::create();  
  13.   
  14.     // add layer as a child to scene  
  15.     scene->addChild(layer);  
  16.   
  17.     // return the scene  
  18.     return scene;  
  19. }  
  20.   
  21. // on "init" you need to initialize your instance  
  22. bool HelloWorld::init()  
  23. {  
  24.     //////////////////////////////  
  25.     // 1. super init first  
  26.     if ( !Layer::init() )  
  27.     {  
  28.         return false;  
  29.     }  
  30.       
  31.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  32.     Vec2 origin = Director::getInstance()->getVisibleOrigin();  
  33.   
  34.     /////////////////////////////  
  35.     // 2. add a menu item with "X" image, which is clicked to quit the program  
  36.     //    you may modify it.  
  37.   
  38.     // add a "close" icon to exit the progress. it's an autorelease object  
  39.     auto closeItem = MenuItemImage::create(  
  40.                                            "CloseNormal.png",  
  41.                                            "CloseSelected.png",  
  42.                                            CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));  
  43.       
  44.     closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,  
  45.                                 origin.y + closeItem->getContentSize().height/2));  
  46.   
  47.     auto adItem = MenuItemImage::create(  
  48.         "CloseNormal.png",  
  49.         "CloseSelected.png",  
  50.         CC_CALLBACK_1(HelloWorld::adCallback, this));  
  51.   
  52.     adItem->setPosition(Vec2(origin.x + visibleSize.width/2 ,origin.y + visibleSize.height/2));  
  53.   
  54.     // create menu, it's an autorelease object  
  55.     auto menu = Menu::create(closeItem,adItem, NULL);  
  56.     menu->setPosition(Vec2::ZERO);  
  57.     this->addChild(menu, 1);  
  58.   
  59.     /////////////////////////////  
  60.     // 3. add your codes below...  
  61.   
  62.     // add a label shows "Hello World"  
  63.     // create and initialize a label  
  64.       
  65.     auto label = LabelTTF::create("Hello World""Arial", 24);  
  66.       
  67.     // position the label on the center of the screen  
  68.     label->setPosition(Vec2(origin.x + visibleSize.width/2,  
  69.                             origin.y + visibleSize.height - label->getContentSize().height));  
  70.   
  71.     // add the label as a child to this layer  
  72.     this->addChild(label, 1);  
  73.   
  74.     // add "HelloWorld" splash screen"  
  75.     auto sprite = Sprite::create("HelloWorld.png");  
  76.   
  77.     // position the sprite on the center of the screen  
  78.     sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));  
  79.   
  80.     // add the sprite as a child to this layer  
  81.     this->addChild(sprite, 0);  
  82.       
  83.     return true;  
  84. }  
  85.   
  86.   
  87. void HelloWorld::menuCloseCallback(Ref* pSender)  
  88. {  
  89. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)  
  90.     MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");  
  91.     return;  
  92. #endif  
  93.   
  94.     Director::getInstance()->end();  
  95.   
  96. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  97.     exit(0);  
  98. #endif  
  99. }  
  100.   
  101. void HelloWorld::adCallback(cocos2d::Ref* pRef){  
  102.     Admob::showAd();  
  103. }  

OK,点击最中央的按钮,


转自:http://blog.csdn.net/wiyun_beijing/article/details/17912471

本文转载自:http://blog.csdn.net/aa294194253/article/details/38514125

共有 人打赏支持
piggybear
粉丝 3
博文 237
码字总数 37552
作品 0
西安
技术主管
私信 提问
移动应用和游戏开发两个阶段在线视频培训的未来计划

在51CTO学院开线上视频课程已经3个多月了,也上了不少课。不过发现还有很多课没有开。现在就将未来的开课计划公布一下。计划分为两个阶段。第一阶段主要是Cocos2d-x和Cocos2d-js的游戏开发培...

androidguy
06/29
0
0
cocos2d-x学习笔记(五)接入百度联盟广告(Android横幅和插屏广告)

用cocos2d-x 3.4 开发了个小游戏,然后成功的接入百度联盟的广告,很多初学者也希望在自己开发的游戏接入广告盈利,所以我就以百度联盟的横幅和插屏广告为例,根据自己接入的步骤做个总结,希...

wty530
2015/09/22
0
0
cocos2dx学习日志(一) 总之先弄个能跑的apk出来吧!

新年新气象,新的一年已经开始好一阵子了。本着人在江湖,技多不压身的原则,最近的开始利用业余时间学习cocos2dx游戏引擎开发,话说自己写个游戏那是我儿时的梦想,哈。 废话不多说直接进正...

soso_fy
2014/02/26
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
0
1
Cocos2d-x 3.x 全平台(Android,iOS)新手开发配置教程攻略

自己写的博客:http://blog.sina.com.cn/s/blog732d16630101g445.html 以前只做过网页游戏(《古今东西》,www.ooplay.net),游戏也曾经开发过Android的手机版本,但自己写的引擎,当然也不...

雪儛
2014/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开源软件会被云杀死吗 ?

本文转载云头条,原作者:Michael Stiefel是Reliable Software公司的负责人,是一名软件架构和开发顾问。 文章要点 虽然开源开发不会消失,但商业开源厂商的未来不是很有希望。随着全面管理的...

linuxCool
41分钟前
4
0
OSChina 周三乱弹 —— 谈什么对象?睡什么觉?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :最肯忘却古人诗,最不屑一顾是相思。分享童丽的单曲《红豆生南国》: 《红豆生南国》- 童丽 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
45分钟前
237
5
stylus

stylus基础教程,stylus实例教程,stylus语法总结

miaojiangmin
今天
5
0
PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部