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的更多相关文章

  1. cocos2d-x 3.1 集成 云风pbc

    cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...

  2. cocos2d-x C++ (Android)集成第三方微信分享

    ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...

  3. cocos2dx 3.x 集成protobuf

    vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...

  4. 【转】cocos2dx 3.x 集成protobuf

    http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...

  5. cocos2d-x C++ (iOS)集成第三方微信分享

    1.新建项目并下载 ShareSDK 1.Cocos2d-x项目环境搭建,不会的童鞋自行面壁哈: 网页链接. 2.ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版 ...

  6. cocos2d-x - android 学习(集成NDK、配置开发环境)

    先来贴上一大神的博客:日月之明 --- http://www.cnblogs.com/lhming/tag/cocs2d-x/ 需要工具和软件包:Eclipse.Android SDK.Android ...

  7. Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程

    之前写过俩相关的教程,最近发现插件官方更新了不少内容,所以也更新一篇Firebase Admob Unity3d插件的教程,希望能帮到大家. Firebase Admob Unity3d插件是一个Un ...

  8. cocos2d-x android黑屏后返回游戏卡顿

    转自:http://blog.csdn.net/wolfking_2009/article/details/8824931 2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2. ...

  9. Cocos2d-x视频教程

    目录 1. 我的技术专栏 2. 相关推荐 3. 下载链接 4. cocos2d-xx Lua+JS+C++教学视频 5. 杨丰盛Cocos2D-X游戏课程 6. [Cocos2d-x]塔防游戏开发实战 ...

随机推荐

  1. Python中 "+=" 使用时的注意事项

    代码1: >>> l1=range(3) >>> l2=l1 >>> l2+=[4] >>> l1 [0, 1, 2, 4] & ...

  2. .NET跨平台之mac 下vs code 多层架构编程

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入,申请备注填写姓名+技术+工作年限) Q  Q:408365330     E-Mail:eg ...

  3. 我需要在Web上完成一个图片上传的功能

    我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...

  4. Balanced Binary Tree [LeetCode]

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  5. 用 highlight.js 为文章中的代码添加语法高亮

    来源:http://www.ghostchina.com/adding-syntax-highlighting-to-ghost-using-highlight-js/ --------------- ...

  6. ThinkPHP 3.2.3(二)配置

    一.配置格式 1.PHP数组定义 默认所有配置文件的定义格式均采用返回PHP数组的方式,配置参数不区分大小写. 如果使用二维数组来配置更多的信息,则二级参数配置区分大小写.格式为: //项目配置文件r ...

  7. Android之NDK开发(转)

    Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...

  8. Bestcoder Round 47 && 48

    1.Senior's Array(hdu 5280) 题目大意:给出大小为N的数组和P,求将数组中的某个元素替换为P后的最大连续子段和.N<=1000 题解: 1.送分题,比赛的时候只想到枚举替 ...

  9. 简单研究Android View绘制三 布局过程

    2015-07-28 17:29:19 这一篇主要看看布局过程 一.布局过程肯定要不可避免的涉及到layout()和onLayout()方法,这两个方法都是定义在View.java中,源码如下: /* ...

  10. spring框架详解: IOC装配Bean

    1 Spring框架Bean实例化的方式: 提供了三种方式实例化Bean. 构造方法实例化:(默认无参数) 静态工厂实例化: 实例工厂实例化: 无参数构造方法的实例化: <!-- 默认情况下使用 ...