cocos2dx安卓添加百度移动联盟广告
来源:互联网 发布:4选1数据选择器74ls153 编辑:程序博客网 时间:2024/04/29 18:09
最近在用cocos2d-x做一款手机游戏,在向游戏中插入广告时遇到了一些问题
上网找到了 乐此不疲 的文章,过程中报了几个错,记录下来:
1. 在 interAd.showAd(Cocos2dxActivity.this); 这一句报错:
在作用域中,没有任何类型 Cocos2dxActivity 的外层实例可访问。
纠结了很久之后,将语句中的 Cocos2dxActivity 改为自己的类名,比如我的是
public class JumpChicken extends Cocos2dxActivity
就把代码改成 interAd.showAd(JumpChicken.this);
2.改完上面的错误之后编译运行,发现进到显示广告的界面时游戏闪退了,继续观察代码,
将
- bool b = JniHelper::getStaticMethodInfo(minfo,
- "org/cocos2dx/lib/AdHelper",
- "showMyAd",
- "()V");
- bool b = JniHelper::getStaticMethodInfo(minfo,
- "org/cocos2dx/JumpChicken/ShowAdHelper",
- "showMyAd",
- "()V");
这几天,楼主和我的几个小伙伴完成了一个自己的Android游戏,使用cocos2d-x-.2.1.5 编写的,现在基本上都完工了,但是当进行到发布应用这一步时,本来打算在游戏中添加道具收费的,但是遇到了一些问题,所以只能在里面添加插屏广告了,我们这款游戏添加的是百度移动联盟的,好了,废话少说,现在开始正式的:
首先大家都知道是配置问题,这一块我就不多说了,大家可以到http://munion.baidu.com/about.html#/sdk/mobSdk这个网址去下载,里面有开发者文档,
现在我主要说的是在eclipse里如何添加代码,好了,下面正式开始:
一、当我们在创建Android工程时,大家都自动创建了自己的packageName:比如我的是:
这个包名当我们通过C++层调用Java层代码时是用的到的。
首先,我们需要在这个包下面创建一个class文件,命名为showAdHelper.java
这个文件的内容是:
- public class ShowAdHelper {
- private static Handler mHandler;
- public static void init(Handler handler)
- {
- ShowAdHelper.mHandler = handler;
- }
- private static void showMyAd()
- {
- Message msg = mHandler.obtainMessage();
- msg.what = myGame.SHOW_AD;
- msg.sendToTarget();
- }
- }
首先,声明一个变量和一个常量:
- public class myGame extends Cocos2dxActivity{
- ...
- public static final int SHOW_AD = 0x0001;
- InterstitialAd interAd;//插屏广告
- ...
- }
- public InterstitialAd getAd()
- {
- final InterstitialAd interAd1 = new InterstitialAd(this);
- interAd1.setListener(new InterstitialAdListener(){
- @Override
- public void onAdClick(InterstitialAd arg0) {
- Log.i("InterstitialAd","onAdClick");
- }
- @Override
- public void onAdDismissed() {
- Log.i("InterstitialAd","onAdDismissed");
- interAd = getAd();
- }
- @Override
- public void onAdFailed(String arg0) {
- Log.i("InterstitialAd","onAdFailed");
- }
- @Override
- public void onAdPresent() {
- Log.i("InterstitialAd","onAdPresent");
- }
- @Override
- public void onAdReady() {
- Log.i("InterstitialAd","onAdReady");
- }
- });
- interAd1.loadAd();
- return interAd1;
- }
同时,我们在onCreate函数中调用一次:
- protected void onCreate(Bundle savedInstanceState){
- ...
- interAd = getAd();
- ...
- }
- private Handler aHandler = new Handler()
- {
- @Override
- public void handleMessage(Message msg) {
- switch(msg.what)
- {
- case SHOW_AD:
- //if(isFirst)
- //{
- if(interAd.isAdReady()){
- interAd.showAd(Cocos2dxActivity.this);
- Log.d("LC","show");
- }else{
- interAd.loadAd();
- }
- Log.d("LC","not show");
- break;
- }
- }
- };
然后调用ShowAdHelper类中的init函数初始化。
- protected void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- //mHandler = new MainHandler();
- ShowAdHelper.init(mHandler);
- }
到这里就已经差不多了,我们只需要在C++层中通过jni调用ShowAdHelper类中的showMyAd函数就行了。
当然也附上代码:
- void PublicMethod::loadAndroidAd()
- {
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
- JniMethodInfo minfo;
- jobject jobj;
- bool b = JniHelper::getStaticMethodInfo(minfo,
- "org/cocos2dx/lib/AdHelper",
- "showMyAd",
- "()V");
- jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
- #endif
- }
到此就完成了,你可以在想要出广告的地方调用loadAndroidAd函数就行了。
至此,小伙伴们就可以想在哪里展示广告就在哪里展示就行了。
以上就是楼主这几天的心血,当然,我也有一些地方没搞明白,比如,为什么我按照官方demo添加的广告,只在第一次调用时显示,以后调用后,它居然不显示了,但是居然还点的到这个广告,但是有些情况它会显示,比如,当我点击广告后,进入广告,然后退出在进入程序,它显示了,还有,当我按了menu键后在进入程序它也显示了,当然如果有哪位大神知道原因,麻烦告知。
最后,祝大家多多挣大钱。如有错误的地方,大家也可以指出来。
- cocos2dx安卓添加百度移动联盟广告
- 加入百度移动联盟广告SSP美图android安卓源码 详情有演示apk
- WPtouch添加百度联盟广告
- flash air移动应用中添加百度移动广告联盟sdk挣钱方法
- cocos2dx + android 如何添加百度插屏广告
- cocos2dx添加百度91、点金广告
- cocos2dx + android 如何添加百度插屏广告
- cocos2dx + android 如何添加百度插屏广告
- Android Studio 使用百度移动生态SDK(广告联盟)
- 360广告联盟对比百度广告联盟
- 安卓移动广告平台
- 百度广告联盟代码优化
- 百度广告联盟代码优化
- 如何做百度广告联盟
- 安卓加载播放网页视频并用百度联盟广告替代屏dan蔽zhu网页部分广告 按返回自动退加到上个网页_源码
- Cocos2dx---------------------添加Admob广告
- 项目中加入百度联盟广告。
- 移动广告商(广告联盟)汇总
- Java 线程同步异步学习
- Android入门(一)搭建开发环境
- pcduino改caps为esc以及重新划定空间
- 单链表反转(递归和非递归)
- Java threadpool机制深入分析
- cocos2dx安卓添加百度移动联盟广告
- hadoop2.2.0源代码编译
- XMPP协议学习笔记一
- 分面搜索
- leetcode
- Toast和Looper。Handler消息循环机制。
- 功能是一个一个字的显示
- 【LeetCode】Subsets I && II
- NYOJ626 intersection set