码迷,mamicode.com
首页 > 移动开发 > 详细

[IOS开发] Cocos2d-x2.2使用Admob插屏广告教程(一):iOS篇

时间:2015-08-28 11:05:03      阅读:471      评论:0      收藏:0      [点我收藏+]

标签:

?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.3Linking中添加Other Linker Flags

   技术分享 

 



  否则会遇到-[GADObjectPrivate  changeState:]: unrecognized selector sent to instance的疑问 
3、编码完结

自个直接在AppController中参加代码,建议从头封装一个object-c的类,但是完结方法是一样的。
首先要导入GADInterstitila.h头文件,完结GADInterstitialDelegate托付,并定义一个GADInterstitila特色。showInterstitial方法供外部调用用来闪现广告。

  1. #import
  2. #import "GADInterstitial.h"
  3. @class RootViewController;
  4. @interface AppController : NSObject  {        UIWindow *window;        RootViewController        *viewController;        GADInterstitial *interstitial_;
  5. }
  6. @property(nonatomic, retain) GADInterstitial *interstitial;
  7. - (void)showInterstitial;
  8. @end
拷贝代码



.m文件中主要是delegate函数的完结,interstitial初始化,广告预先请求和广告闪现等方法

  1. #pragma mark -
  2. #pragma Interstitial Delegate
  3. - (void)interstitial:(GADInterstitial *)interstitial
  4. didFailToReceiveAdWithError:(GADRequestError *)error {
  5. }
  6. - (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
  7. }
  8. - (void)interstitialDidDismissScreen:(GADInterstitial *)ad
  9. {        [self preloadRequest];
  10. }
  11. - (void)showInterstitial{        if (self.interstitial.isReady) {        CCLOG("ready");        [self.interstitial presentFromRootViewController:viewController];        } else { CCLOG("not ready"); [self preloadRequest]; }
  12. }
  13. #pragma mark GADRequest generation
  14. -(void)initInterstitial
  15. {        // 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;
  16. }
  17. -(void)preloadRequest
  18. {        CCLOG("pre load"); [self initInterstitial]; [self.interstitial loadRequest: [self createRequest]];
  19. }
  20. // Here we‘re creating a simple GADRequest and whitelisting the application
  21. // for test ads. You should request test ads during development to avoid
  22. // generating invalid impressions and clicks.
  23. - (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;
  24. }
拷贝代码

跟android不一样的是,interstitial目标每次request时都必须从头初始化。 
完好的.m文件:

  1. #import "AppController.h"
  2. #import "EAGLView.h"
  3. #import "cocos2d.h"
  4. #import "AppDelegate.h"
  5. #import "RootViewController.h"
  6. #define INTERSTITIAL_AD_UNIT_ID @"YOUR_OWN_ID"
  7. @implementation AppController
  8. @synthesize interstitial = interstitial_;
  9. #pragma mark -
  10. #pragma mark Application lifecycle
  11. // cocos2d application instance
  12. static AppDelegate s_sharedApplication;
  13. - (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];
  14. //        [self initInterstitial];//每次request都要从头初始化        [self preloadRequest];        cocos2d::CCApplication::sharedApplication()->run();        return YES;
  15. }
  16. - (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();
  17. }
  18. - (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();
  19. }
  20. - (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();
  21. }
  22. - (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();
  23. }
  24. - (void)applicationWillTerminate:(UIApplication *)application {        /* Called when the application is about to terminate. See also applicationDidEnterBackground:. */
  25. }
  26. #pragma mark -
  27. #pragma mark Memory management
  28. - (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. */
  29. }
  30. - (void)dealloc {        interstitial_.delegate = nil;        [interstitial_ release];        [window release];        [super dealloc];
  31. }
  32. #pragma mark -
  33. #pragma Interstitial Delegate
  34. - (void)interstitial:(GADInterstitial *)interstitial
  35. didFailToReceiveAdWithError:(GADRequestError *)error {
  36. }
  37. - (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
  38. }
  39. - (void)interstitialDidDismissScreen:(GADInterstitial *)ad
  40. {        [self preloadRequest];
  41. }
  42. - (void)showInterstitial{        if (self.interstitial.isReady) {        CCLOG("ready");        [self.interstitial presentFromRootViewController:viewController];        } else { CCLOG("not ready"); [self preloadRequest]; }
  43. }
  44. #pragma mark GADRequest generation
  45. -(void)initInterstitial
  46. {        // 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;
  47. }
  48. -(void)preloadRequest
  49. {        CCLOG("pre load"); [self initInterstitial]; [self.interstitial loadRequest: [self createRequest]];
  50. }
  51. // Here we‘re creating a simple GADRequest and whitelisting the application
  52. // for test ads. You should request test ads during development to avoid
  53. // generating invalid impressions and clicks.
  54. - (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;
  55. }
  56. @end
拷贝代码

4、调用


  1. #elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS) [(AppController*)[UIApplication sharedApplication].delegate showInterstitial];
  2. #endif引荐网站 http://www.keymob.com/  

[IOS开发] Cocos2d-x2.2使用Admob插屏广告教程(一):iOS篇

标签:

原文地址:http://www.cnblogs.com/admobgoogle/p/4765694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!