cocos2dx-3.9 集成admob
Part 1: 安装GoogleMobileAds framework (即admob)
1. 安装Cocoapods,否则解决依赖关系和配置真的会把人不累死也得烦死
sudo gem install cocoapods
国内用户安装过程中可能遇到SSL连接出错的问题,请参考 Cocoapod安装过程中的幺蛾子
2. 在 xxx.xcodeproj 同级目录下,加入新文件Podfile,内容如下:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '7.0'
pod 'Google-Mobile-Ads-SDK', '~> 7.5'
source 指定pod从哪里去下载新的framework
platform指定引入的工程使用平台版本, 这个版本号可能会高于cocos2dx创建出的默认最低版本,需要注意
pod一行指定取哪个版本的sdk
3. 关闭Xcode中打开的xxx.xcodeproj, 在Podfile所在目录下使用命令 pod update
4. 现在Podfile目录下多出了xxx.xcworkspace, Podfile.lock, Pods几个文件或文件夹,使用Xcode打开xxx.xcworkspace, 然后编译
5. 如果编译没出错,那么就可以继续咯!
Part2: 使用admob
在此之前,你应该先去读一下 https://github.com/googleads/googleads-mobile-ios-examples 中的源码,看一下官方对Banner和Interstitial给出的示例。具体的代码照抄就可以了。
首先,官方案例是这么import framework的:
@import GoogleMobileAds; ... bla bla~
然后在cocos2dx的工程中,你如果这么写,肯定会提示模块没被启用,如果你真要这么写,那就去Build Settings里面把modules启用好了
你可能会希望在.h中声明一个C++类,然后在一个.mm中引入GoogleMobileAds,实现一个内部类,然后再用一个struct桥接到C++以供C++代码调用?放弃这种方式吧,因为:
@import语法只能在Objective-C中使用,目前Objective-C++不支持这种语法,哪怕你只是把文件扩展名改成.mm也不行
所以可以代替的办法是酱紫:
#import <GoogleMobileAds/GoogleMobileAds.h>
基于一些以我目前水平无法解答的原因,我无法在一个.mm中引入GoogleMobileAds中的类,所以最后只好单独在一套.h/.m文件中实现一个Objective-C的类,然后在一个专门的.h/.mm中实现一个C++类桥接之。
关于桥接:
C++类无法直接把一个Objective-C的类作为成员参数,所以一般办法是,在 .h中:
struct AdBannerBridge; class AdBanner
{
//...
AdBanner();
~AdBanner();
protected:
AdBannerBridge* _adBridge;
}
然后在.mm中,就可以顺理成章的引用Objective-C的实体了:
struct AdBannerBridge
{
GoogleAd* _googleAd;
AppleAd* _appleAd; AdBannerBridge()
{
_appleAd = [[AppleAd alloc]init];
//...
} ~AdBannerBridge()
{
if( _appleAd != nil ) {
[_appleAd release];
}
//...
}
} AdBanner::AdBanner()
{
_adBridge = new AdBannerBridge();
} AdBanner::~AdBanner()
{
if( _adBridge ) {
delete _adBridge;
}
}
编译Objective-C++时, Objective-C的注入@interface/@implementation/@protocol当然是按照Objective-C的方式编译的,其它部分都是按照C++语法编译的。C++中struct本质上就是class,所以这里可以借助这个特性直接在构造函数和析构函数里完成分配和回收工作,免得代码写的太长。
GoogleMobileAds使用还是蛮简单的,解析example中的一部分代码:
- (void)viewDidLoad {
[super viewDidLoad]; // Replace this ad unit ID with your own ad unit ID.
self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
self.bannerView.rootViewController = self; GADRequest *request = [GADRequest request];
// Requests test ads on devices you specify. Your test device ID is printed to the console when
// an ad request is made. GADBannerView automatically returns test ads when running on a
// simulator.
request.testDevices = @[
@"01d5d30957fabc2cce72c5559550686e" // Eric's iPod Touch
];
[self.bannerView loadRequest:request];
}
1. adUnitID 在开发时应该换成自己的ad unit ID
2. Google政策上禁止开发期间点击自己的广告,不过测试广告还是可以点的。指定testDevices之后,在这些testDevices上运行时,都会返回一个测试广告,这个测试广告是可以点击的。
testDevice的ID可以先直接变异运行,该ID会在log中显示出来。
3. 如果Delegate已经调用adViewDidReceiveAd,但是广告却显示一个0,那么很可能是因为GFW间歇性发作,你被墙了!可以在测试设备上打开VPN翻墙测试
4. 我在一个.h/.m中实现的GoogleMobileAd调用,但是希望在delegate中能够调用C++部分的pause/resume来处理用户点击广告但是没有离开程序的情形,这时候可以通过传递代码块来解决
cocos2dx-3.9 集成admob的更多相关文章
- cocos2d-x 3.1 集成 云风pbc
cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...
- cocos2d-x C++ (Android)集成第三方微信分享
ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...
- cocos2dx 3.x 集成protobuf
vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...
- 【转】cocos2dx 3.x 集成protobuf
http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...
- cocos2d-x C++ (iOS)集成第三方微信分享
1.新建项目并下载 ShareSDK 1.Cocos2d-x项目环境搭建,不会的童鞋自行面壁哈: 网页链接. 2.ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版 ...
- cocos2d-x - android 学习(集成NDK、配置开发环境)
先来贴上一大神的博客:日月之明 --- http://www.cnblogs.com/lhming/tag/cocs2d-x/ 需要工具和软件包:Eclipse.Android SDK.Android ...
- Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程
之前写过俩相关的教程,最近发现插件官方更新了不少内容,所以也更新一篇Firebase Admob Unity3d插件的教程,希望能帮到大家. Firebase Admob Unity3d插件是一个Un ...
- cocos2d-x android黑屏后返回游戏卡顿
转自:http://blog.csdn.net/wolfking_2009/article/details/8824931 2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2. ...
- Cocos2d-x视频教程
目录 1. 我的技术专栏 2. 相关推荐 3. 下载链接 4. cocos2d-xx Lua+JS+C++教学视频 5. 杨丰盛Cocos2D-X游戏课程 6. [Cocos2d-x]塔防游戏开发实战 ...
随机推荐
- JavaScript中的原型和对象机制
1.对象相关的一些语言特性 JavaScript里所有的东西都是对象, 对象是属性的集合.要知道,函数也是对象, 能够作为变量的值. 返回值. 参数或者属性的值. 函数对象特殊的地方是能通过" ...
- 错误 java.lang.ClassCastException: com.ylpw.sms.YZZYSenderUtil cannot be cast to ResourceBundle
出现错误: java.lang.ClassCastException: com.ylpw.sms.YZZYSenderUtil cannot be cast to ResourceBundle 百度搜 ...
- SQLSERVER2008R2数据库的整体导出及单个表的导出步骤
今天在同事导SQLSERVER数据库中的表的时候遇到一问题,不知道怎么单独的把一个表的建表语句导出来,,迅速百度一下,按照步骤还真导出来了,导出单个表的步骤看下面来啦....: 点中数据库名字---- ...
- 使用wait()与notify()实现线程间协作
调用sleep()和yield()的时候锁并没有被释放,而调用wait()将释放锁.这样另一个任务(线程)可以获得当前对象的锁,从而进入它的synchronized方法中.可以通过notify()/n ...
- CSSOM视图模式(CSSOM View Module)相关整理:scrollWidth,scrollLeft,offsetLeft,clientX ,offsetX 定义和区别
转:http://www.zhangxinxu.com/wordpress/2011/09/cssom%E8%A7%86%E5%9B%BE%E6%A8%A1%E5%BC%8Fcssom-view-mo ...
- asp.net网站运行出错:the underlying provider failed on open的解决
在登录系统,通过linq查询时发生错误,the underlying provider failed on open,如何解决,请看: Step 1:Open Internet Information ...
- CentOS搭建VPN
安装ppp #yum install ppp 安装pptpd 配置软件源,修改/etc/yum.repos.d/Doylenet.repo,如果系统没有该文件则创建 #vim /etc/yum.rep ...
- linux桌面的安装
在CentOS 7中提供了两种桌面"GNOME DESKTOP" 和 "KDE Plasa Workspaces",我们以安装"GNOME DESKT ...
- vpn是什么?手机vpn是什么?
vpn是什么?手机vpn是什么? vpn是什么?手机vpn是什么? vpn是什么?手机vpn是什么?VPN全称是Virtual Private Network,也就是虚拟专用网的意思.很多人不知道VP ...
- 调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量
调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量 前因:客户搭建了VMware ESX企业版的测试平台:有一天接到一个需求,是测试数据库的,需要一个300G的磁盘. 解决过程: 1.按 ...