IOS版Cocos2d-x2.2使用移动广告聚合平台集成插屏广告教程

1、版本
Cocos2d-x 2.2  
GoogleAdMobAdsSdkiOS-6.5.1

2、导入
2.1 导入头文件和.a文件
并在Librabry Search Paths中添加.a文件的路径

2.2 导入所需IOS框架
AdSupport.framework
StoreKit.framework
AudioToolbox.framework
MediaPlayer.framework
MessageUI.framework
SystemConfiguration.framework

2.3 Linking中添加Other Linker Flags
否则会遇到-[GADObjectPrivate  changeState:]: unrecognized selector sent to instance的问题。

3、编码
首先要导入GADInterstitila.h头文件,实现GADInterstitialDelegate委托,并定义一个GADInterstitila属性。showInterstitial方法供外部调用用来显示广告。
#import <UIKit/UIKit.h>
#import "GADInterstitial.h"

@class RootViewController;

@interface AppController : NSObject <UIApplicationDelegate,GADInterstitialDelegate> {  
UIWindow *window;  
RootViewController         *viewController;  
GADInterstitial                *interstitial_;
}
@property(nonatomic, retain) GADInterstitial *interstitial;

- (void)showInterstitial;

@end

.m文件中主要是delegate函数的实现,interstitial初始化,广告预先请求和广告显示等方法
#pragma mark -#pragma Interstitial Delegate
- (void)interstitial:(GADInterstitial *)interstitial
didFailToReceiveAdWithError:(GADRequestError *)error {
 
}

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {  

}

- (void)interstitialDidDismissScreen:(GADInterstitial *)ad
{  

[self preloadRequest];

}

}
#pragma mark GADRequest generation
{
// Create a new GADInterstitial each time.  A GADInterstitial  
// will only show one request in its lifetime. The property will release the  
// old one and set the new one.
self.interstitial = [[[GADInterstitial alloc] init] autorelease];  
self.interstitial.delegate = self;

// Note: Edit InterstitialExampleAppDelegate.m to update  
// INTERSTITIAL_AD_UNIT_ID with your interstitial ad unit id.  

self.interstitial.adUnitID = INTERSTITIAL_AD_UNIT_ID;

}
-(void)preloadRequest
{  
CCLOG("pre load");   
[self initInterstitial];   
[self.interstitial loadRequest: [self createRequest]];

}

// Here we're creating a simple GADRequest and whitelisting the application
// for test ads. You should request test ads during development to avoid
// generating invalid impressions and clicks.

- (GADRequest *)createRequest {  
GADRequest *request = [GADRequest request];    

// Make the request for a test ad. Put in an identifier for the simulator as  
// well as any devices you want to receive test ads.
request.testDevices =  [NSArray arrayWithObjects:   
// TODO: Add your device/simulator test identifiers here. They are   
// printed to the console when the app is launched.   
nil];  
return request;
}

跟android不同的是,interstitial对象每次request时都必须重新初始化。
完整的.m文件:
#import "AppController.h"
#import "EAGLView.h"#import "cocos2d.h"
#import "AppDelegate.h"
#import "RootViewController.h"

#define INTERSTITIAL_AD_UNIT_ID @"YOUR_OWN_ID"
@implementation AppController
@synthesize interstitial = interstitial_;
#pragma mark -
#pragma mark Application lifecycle
// cocos2d application instancestatic AppDelegate s_sharedApplication;
static AppDelegate s_sharedApplication;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {        

// Override point for customization after application launch.

// Add the view controller's view to the window and display.
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];    

// Init the EAGLView  
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]                   
pixelFormat: kEAGLColorFormatRGB565                   
depthFormat: GL_DEPTH24_STENCIL8_OES               
preserveBackbuffer: NO                    
sharegroup: nil                   
multiSampling: NO                 
numberOfSamples: 0];

// Use RootViewController manage EAGLView   
viewController=[[RootViewController alloc] initWithNibName:nil bundle:nil];  
viewController.wantsFullScreenLayout = YES;  
viewController.view = __glView;

// Set RootViewController to window  
if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)  
{    

// warning: addSubView doesn't work on iOS6    
[window addSubview: viewController.view];  

}  
else  
{    

// use this method on ios6    
[window setRootViewController:viewController];  

}    

[window makeKeyAndVisible];

[[UIApplication sharedApplication] setStatusBarHidden:true];
//[self initInterstitial];//每次request都要重新初始化  

[self preloadRequest];  cocos2d::CCApplication::sharedApplication()->run();
  return YES;

}

- (void)applicationWillResignActive:(UIApplication *)application {  
/*   Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
 
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.   */

cocos2d::CCDirector::sharedDirector()->pause();

}

- (void)applicationDidBecomeActive:(UIApplication *)application {  
/*   Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.   
*/  
cocos2d::CCDirector::sharedDirector()->resume();

}

- (void)applicationDidEnterBackground:(UIApplication *)application {  
/*   Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.    
If your application supports background execution, called instead of applicationWillTerminate: when the user quits.   
*/  
cocos2d::CCApplication::sharedApplication()->applicationDidEnterBackground();

}

- (void)applicationWillEnterForeground:(UIApplication *)application {  
/*  Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.  
*/  
cocos2d::CCApplication::sharedApplication()->applicationWillEnterForeground();

}

- (void)applicationWillTerminate:(UIApplication *)application {  
/*  Called when the application is about to terminate.   See also applicationDidEnterBackground:.  
*/

}

#pragma mark -
#pragma mark Memory management
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {  
/*   
Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.   
*/

}
- (void)dealloc {  
interstitial_.delegate = nil;  
[interstitial_ release];  
[window release];  
[super dealloc];
}

#pragma mark
-#pragma Interstitial Delegate

- (void)interstitial:(GADInterstitial *)interstitial
didFailToReceiveAdWithError:(GADRequestError *)error {
 
}

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {  

}

- (void)interstitialDidDismissScreen:(GADInterstitial *)ad
{  [self preloadRequest];

}

- (void)showInterstitial{  
if (self.interstitial.isReady) {    
CCLOG("ready");    
[self.interstitial presentFromRootViewController:viewController];  
}

else
{     

CCLOG("not ready");     
[self preloadRequest];
   }

}

#pragma mark GADRequest generation
-(void)initInterstitial
{  
// Create a new GADInterstitial each time.  A GADInterstitial  
//will only show one request in its lifetime. The property will release the  
//old one and set the new one.  

self.interstitial = [[[GADInterstitial alloc] init] autorelease];  self.interstitial.delegate = self;    
// Note: Edit InterstitialExampleAppDelegate.m to update  
// INTERSTITIAL_AD_UNIT_ID with your interstitial ad unit id.  self.interstitial.adUnitID = INTERSTITIAL_AD_UNIT_ID;

}
-(void)preloadRequest
{  
CCLOG("pre load");   
[self initInterstitial];   
[self.interstitial loadRequest: [self createRequest]];
}

// Here we're creating a simple GADRequest and whitelisting the application
// for test ads. You should request test ads during development to avoid
// generating invalid impressions and clicks.
- (GADRequest *)createRequest {  
GADRequest *request = [GADRequest request];    

// Make the request for a test ad. Put in an identifier for the simulator as  
// well as any devices you want to receive test ads.  
request.testDevices =  [NSArray arrayWithObjects:   

// TODO: Add your device/simulator test identifiers here. They are   
// printed to the console when the app is launched.   nil];  
return request;
}

@end

4、调用
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
[(AppController*)[UIApplication sharedApplication].delegate showInterstitial];
#endif

KeyMob移动广告聚合平台支持的广告形式有横幅广告、插屏广告、积分墙广告、视频广告、push广告、全屏广告等众多流行广告形式,目前是国内比较优秀的平台,也是日广告量展示量比较不错的移动广告聚合平台。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值