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

?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/
时间: 2024-10-11 03:51:59

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

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

?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    SystemConfigura

Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化.它不仅可以编写关于Windows以及Windowsx Phone的应用程序,还可以编写iOS.Android的应用程序.本章将讲解如何使用C#编写一个简单的iOS应用程序.本文选自<Xamarin iOS开发实战> 1.1初识Xamarin Xamarin是一个跨平台的开发框架.Xamarin的产

iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题

最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hotfix for Delphi, C++Builder and RAD Studio 10 Seattle Xcode v7.0.1 iOS SDK v9.0 真机测试(以下机种皆不闪退): iPhone 3GS v6.1.2 (32 bit) iPhone 4 v7.1.2 (32 bit) iPh

黑马程序员-Xcode离线帮助文档的安装 ios开发-开发文档安装 isa指针 superclass指针 ios系统分四层:

Xcode离线帮助文档的安装 ios开发-开发文档安装 iOS开发肯定离不开开发文档,苹果有在线帮助文档,xCode其实可以下载模拟器文档和iOS8.1文档的,不过下载的速度实在不敢恭维,而且比较头疼的是不显示下载进度条的,苹果的开发文档都是放在)/应用程序/Xcode.app/Contents/Developer/Documentation/DocSets路径下,该路径下可以看到三个文件,xCode 6.1文档(com.apple.ADC_Reference_Library.Developer

iOS开发证书及推送证书的生成教程

以下是我自己摸索出来的证书生成过程,如有错误欢迎指正~ 一.生成开发证书 这里的证书包括开发(development)证书和生产(production)证书. 1.打开钥匙串访问-->证书助理-->从证书颁发机构请求证书,输入邮箱和常用名,常用名将作为你的密钥名,选择保存到磁盘,名字默认就可以,存到桌面. 2.登录苹果的开发者中心,登录自己的开发者账号进入,选择证书. 单击这里的Development,(注意,这里最多同时存在2个证书)点击右上角的加号,选择iOS App Developmen

【iOS开发-115】静态库的制作以及第三方框架iOS Universal Framework,DEBUG和RELEASE

(1)概念介绍 --我们平时在项目中用的最多的就是开源的第三方库,这种库是开源的,我们不仅能用,还能查看源代码甚至可以修改源代码. --与开源库对应的就是闭源,闭源库分为动态库和静态库.动态库就是.dylib或者.framework结尾的文件.就是苹果官方提供给我们用的那些库.开发者不能在项目中使用自制的动态库,否则无法上传到APPStore. --所以,对于闭源库,我们主要讨论的是静态库.静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)

学习ios开发系列之,利用百度词典api写的ios客户端程序

先附上效果图: 还是很简单,主要用的storyboard,不过准备学习下cocoui来布局了,storyboard很逆天! 其他的就是http请求这块,还有NSString类使用了! 附上主要的源代码: NSString* queryword = word.text; NSString* urlStr = [[NSString alloc] initWithFormat:@"http://openapi.baidu.com/public/2.0/translate/dict/simple?cli

【iOS开发-61】更换plist资源后,运行程序iOS模拟器仍然显示上一次数据的样子,怎么解决?

(1)情形介绍 --我们先导入一个plist文件做项目,模拟运行查看效果. --删除plist,替换一个新的plist,CMD+R模拟运行,发现程序界面显示的还是上一次的数据. (2)原因 是因为第一次模拟运行时,已经生成了一个"沙盒",所有资源也都保存在这个沙盒中了(如果在用户手机中,相当于数据已经下载到用户手机里了).这个时候,我们尽管替换了,但是沙盒中得数据仍然是上一次的数据. (3)解决思路:清除上一次留下的数据,然后重新加载新的数据plist.(建议2步走) --先在模拟器中

iOS开发-植入广告(iAd, Admob实例)

应用中植入广告是一种很好的盈利手段. 下面介绍主流的两种方法.iAd, Admob 先mark一个很详细的pdf.   http://pan.baidu.com/share/link?shareid=1656439633&uk=1394536315&fid=406566606116897 一.iAd 1.需要加入iAd.framework 2.   .h文件加入如下代码 #import <UIKit/UIKit.h> #import <iAd/iAd.h> @int