AdWhirl是一个为iPhone应用程序开发人员服务的、在应用程序中内嵌广告的手机广告服务商,目标是提供最好的iPhone广告解决方案。通过AdWhirl,程序开发人员可以自由转换各个广告平台(包括Admob、Videoegg、Mobclix等广告服务平台),并且可以自动为你选择和转换到CPM值最高的手机广告平台,让自己的收益最大化。
Adwhirl本身提供了一个示例程序,但对于cocos2d项目,找了很多资料,都没有完整的介绍,现把自己的摸索给大家来分享一下,欢迎批评指正。
[ post]
adwhirl网站上的设定,很简单,直接上adwhirl中设置即可,adwhirl可以看作是一个容器,可以选择多个广告商。
1、在adwhirl SDK中adwhirl目录拖入项目,拖入时选择复制文件到本地。
2、把TouchJSON拖入到项目中,此步可以省略,因为在cocos2d中已经包含此项目,如果拖入,将会出现重复定义错误。
3、增加framework,选择性地添加,不能按adwhirl sdk readme中全部添加,会出现编译错误,添加的framework有:
CFNetwork,
AVFoundation,
CoreLocation,
MediaPlayer,
SystemConfiguration,
MessageUI
4、添加广告商SDK。
如AdMob,Google AdSense等,直接把SDK拖入到项目即可,为使结构明了,可以在项目中建立一个组,如:AdNetworkLibs,把SDK放到此节点下。拖入时,需要复制到本地目录。
5、取消AdWhirl\adapters下不用的项,每个广告商有一个.h文件和一个.m文件,点击进入adapters后,在不使用的广告商的.m文件后,取消打勾。
6、实现AdWhirlDelegate的两个必须的协议:adWhirlApplicationKey和viewControllerForPresentingModalView,这两个必须要实现,adWhirlApplicationKey返回的是你在adwhirl上的id,viewControllerForPresentingModalView返回一个UIViewController,用于显示广告,在cocos2d中,由于没有明显的viewcontroller,与readme中不同,不能使用readme中的方法。
这两个方法在同一场景(scene)中实现,如在HelloWorld中实现。
修改HelloWorldScene.h
a.添加:
#import "AdWhirlView.h"
#import "AdWhirlDelegateProtocol.h"
@class AdWhirlView;
b.指定此类实现AdWhirlDelegate的协议
@interface HelloWorld : CCLayer
c.在类中添加变量
AdWhirlView *awView;
UIViewController *viewController;
d.设定类型
@property (nonatomic,retain) AdWhirlView *awView;
修改HelloWorldScene.m
a.同步对象
@synthesize awView;
b.增加如下代码
复制代码 - (void) onEnter {
viewController = [[UIViewController alloc] init]; //设置viewController,用于显示广告,如果这个设置错误,则广告不能正常显示,也不能打开窗口显示广告。
viewController.view = [[CCDirector sharedDirector] openGLView];
awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
CGAffineTransform cgCTM = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(-270));
cgCTM = CGAffineTransformTranslate(cgCTM,0,0);
[awView setTransform:cgCTM]; //由于设备是横向,需要旋转一定角度。
awView.hidden=YES; //开始时隐藏,以免影响主界面上的鼠标响应
awView.center=ccp(0,0);
[viewController.view addSubview:awView];
[super onEnter];
}
- (NSString *) adWhirlApplicationKey {
return @"cc8c386cdc184d468201d16792686774"; //返回你在adwhirl上的key
}
- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlView {
if (YES == awView.hidden) {
awView.hidden=NO;
}
[self adjustAdSize];
}
- (void)adjustAdSize {
[UIView beginAnimations:@"AdResize" context:nil];
[UIView setAnimationDuration:0.7];
CGSize adSize = [awView actualAdSize];
CGRect newFrame = awView.frame;
newFrame.size.height = adSize.width; //由于旋转了90度,需要调换高度和宽度
newFrame.size.width = adSize.height;
newFrame.origin = ccp(0,80);//这个坐标是正立时的坐标,以左上角为(0,0)
awView.frame = newFrame;
[UIView commitAnimations];
}
- (BOOL)adWhirlTestMode {
return NO;
}
其他链接:http://emeene.com/2010/10/adwhirl-cocos2d-iphone
http://emeene.com/2010/10/adwhirl-cocos2d-iphone