iOS平台添加Google Admob -1/2(Unity3D开发之七)
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=567
Unity调用iOS还是非常简单的,晚上空闲时间写了unity在IOS平台加载Google Admob。需要的朋友可以看下。
一、首先编写Admob的iOS的代码。
请去https://apps.admob.com下载iOS Admob SDK, 并注册app id。如果这一步不熟悉,请自行Google,网上应该很多。
1、IOSAdmob类,主要实现Admob的创建和加载
IOSAdmob.h
// // IOSAdmob.h // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import <Foundation/Foundation.h> #import "GADBannerView.h" #import "GADBannerViewDelegate.h" @interface IOSAdmob : NSObject<GADBannerViewDelegate> - (void)startRequestAdmob:(NSString*)admobId AdSize:(GADAdSize)size Position:(CGPoint)pos; - (void)setAdmobHidden:(BOOL)isHidden; @end
IOSAdmob.m
// // IOSAdmob.m // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import "IOSAdmob.h" @interface IOSAdmob () @property (nonatomic) BOOL isHidden; @property (nonatomic) CGRect adRect; @property (nonatomic, readonly, strong) UIViewController* rootViewController; @property (nonatomic, readonly, strong) GADBannerView* adBannerView; @end @implementation IOSAdmob - (id) init { self = [super init]; if(self != nil) { _isHidden = NO; _adRect = CGRectZero; _rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; _adBannerView = nil; } return self; } - (void) dealloc { [_rootViewController release]; [_adBannerView release]; [super dealloc]; } - (void) startRequestAdmob:(NSString*)admobId AdSize:(GADAdSize)size Position:(CGPoint)pos { if (_adBannerView) { return; } _adBannerView = [[GADBannerView alloc] initWithAdSize:size]; // if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { // // }else { // // } _adRect = CGRectMake(pos.x, pos.y, _adBannerView.frame.size.width, _adBannerView.frame.size.height); _adBannerView.adUnitID = admobId; _adBannerView.delegate = self; [_adBannerView setRootViewController:_rootViewController]; _adBannerView.frame = _adRect; [_rootViewController.view addSubview:_adBannerView]; double delayInSeconds = 5.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ NSLog(@"Retrying to load request"); [_adBannerView loadRequest:[self createRequest]]; }); } - (void)setAdmobHidden:(BOOL)isHidden { _isHidden = isHidden; if (_adBannerView) { [_adBannerView setHidden:_isHidden]; } // [UIView animateWithDuration:0.5 animations:^ { // _adBannerView.frame = _adRect; // }]; } #pragma mark GADRequest generation // Here we're creating a simple GADRequest and whitelisting the simulator // and two devices for test ads. You should request test ads during development // to avoid generating invalid impressions and clicks. - (GADRequest *)createRequest { GADRequest *request = [GADRequest request]; return request; } #pragma mark GADBannerViewDelegate impl // Since we've received an ad, let's go ahead and set the frame to display it. - (void)adViewDidReceiveAd:(GADBannerView *)adView { NSLog(@"Received ad"); _adBannerView.frame = _adRect; [_adBannerView setHidden:_isHidden]; } - (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error { NSLog(@"Failed to receive ad with error: %@", [error localizedFailureReason]); double delayInSeconds = 5.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ NSLog(@"Retrying to load request"); [_adBannerView loadRequest:[self createRequest]]; }); } @end
二、Admob对外单例类接口
IOSAdmobManager.h
// // IOSAdmobManager.h // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface IOSAdmobManager : NSObject + (IOSAdmobManager *)getInstance; - (void)startRequestAdmob:(NSString*)admobId AdSizeId:(NSInteger)adSizeId Position:(CGPoint)pos; - (void)setAdmobHidden:(BOOL)isHidden; @end
IOSAdmobManager.m
// // IOSAdmobManager.m // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import "IOSAdmobManager.h" #import "IOSAdmob.h" @interface IOSAdmobManager () @property (nonatomic, readonly, strong) IOSAdmob* admob; @end @implementation IOSAdmobManager + (IOSAdmobManager *)getInstance { static IOSAdmobManager *mgr = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ mgr = [[self alloc] init]; }); return mgr; } - (id)init { self = [super init]; if (self) { _admob = [[IOSAdmob alloc] init]; return self; } return nil; } - (void)startRequestAdmob:(NSString*)admobId AdSizeId:(NSInteger)adSizeId Position:(CGPoint)pos { switch (adSizeId) { case 1: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeBanner Position:pos]; break; case 2: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeLargeBanner Position:pos]; break; case 3: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeMediumRectangle Position:pos]; break; case 4: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeFullBanner Position:pos]; break; case 5: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeLeaderboard Position:pos]; break; case 6: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSkyscraper Position:pos]; break; case 7: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSmartBannerPortrait Position:pos]; break; case 8: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSmartBannerLandscape Position:pos]; break; default: [_admob startRequestAdmob:admobId AdSize:kGADAdSizeBanner Position:pos]; break; } } - (void)setAdmobHidden:(BOOL)isHidden { [_admob setAdmobHidden:isHidden]; } @end
三、为第二步中的单例接口注册C函数接口,提供给Unity使用
LHAdmob.mm
// // LHAdmob.mm // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import "IOSAdmobManager.h" extern "C" { void startRequestAdmob(const char* admobId, int adSizeId, float pixelX, float pixelY) { [[IOSAdmobManager getInstance] startRequestAdmob:[NSString stringWithUTF8String:admobId] AdSizeId:adSizeId Position:CGPointMake(pixelX, pixelY)]; } void setAdmobHidden(bool isHidden) { [[IOSAdmobManager getInstance] setAdmobHidden:isHidden]; } }
OK,到这里已经完成了Admob的创建和Unity接口编写。
注意:
1、Unity导出的iOS工程默认没有使用arc,所以以上代码全部未使用arc。
Xcode->Targets->Build Settings->Objective-C Automatic Reference Counting 设置NO,即关闭arc。
2、针对上诉接口创建什么类型的xCode工程 ?
你可以创建任意的Xcode工程,编写以上代码。也可以创建iOS->Framework & Library->Cocos Touch Static Library 静态库工程。
3、以上代码如何加到Unity?
第一个方法:直接将以上代码文件复制到Unity->Assets/Plugins/iOS 文件夹中,该文件是Unity指定的插件文件。
第二个方法:如果你创建的是静态库工程,Xcode->Product->Archive 编译出.a静态库文件,将.a文件复制到Unity->Assets/Plugins/iOS 文件夹中。
iOS平台添加Google Admob -1/2(Unity3D开发之七)的更多相关文章
- iOS平台添加Google Admob -2/2(Unity3D开发之八)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=572 在上一篇文章中主要是编写了 ...
- iOS平台加入Google Admob -1/2(Unity3D开发之七)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com.谢谢! 原文地址: http://www.cocos2dev.com/?p=567 Unity调用iOS还是非 ...
- Sprite添加阴影摇摆动画(Unity3D开发之九)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=575 今天看到一个很简单的摇摆动 ...
- uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/42705885 ...
- 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- XCode教程之 如何在苹果开发者平台添加设备UDID
XCode教程之 如何在苹果开发者平台添加设备UDID.在Xcode开发中,如何在苹果开发者平台添加新的手机设备UDID,进行测试,具体如下 工具/原料 Apple Developer 方法/步骤 1 ...
- Unity3d开发集成Google Admob广告增加收入
在Unity游戏中植入广告是Unity 游戏产品增加收入的一种重要方式,常用的广告有谷歌Admob,百度ssp,腾讯广点通,unity公司的unityads等等,而使用的最多的应该属于谷歌Admob, ...
- Remove Google Play Games libraries on iOS (Unity3D开发之二十一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/48313653 ...
- 【Unity与Android】02-在Unity导出的Android工程中接入Google Admob广告
我在上一篇文章 [Unity与Android]01-Unity与Android交互通信的简易实现) 中介绍了Unity与Android通讯的基本方法. 这一篇开始进入应用阶段,这次要介绍的是如何在An ...
随机推荐
- Servlet init()
有时候希望在servlet首次载入时,执行复杂的初始化任务,但并不想每个请求都重复这些任务的时候,用init()方法他在servlet初次创建时被调用,之后处理每个用户的请求时,则不在调用这个方法.因 ...
- Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- Object 类
- 9.QT-标准对话框
Qt提供的可复用的标准对话框,全部继承自QDialog类,如下图所示: QMessageBox:信息对话框,用于显示信息.询问问题等: QFileDialog:文件对话框 QColorDialog:颜 ...
- Axios 使用文档
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 使用实例:http://www.cnblogs.com/coolslider/p/7838309.ht ...
- 开源Spring解决方案--lm.solution
Github 项目地址: https://github.com/liumeng0403/lm.solution 一.说明 1.本项目未按java项目传统命名方式命名项目名,包名 如:org.xxxx. ...
- jspacker压缩及解压缩研究(js eval)
起因: 在研究爬虫的时候发现很多网站都出现了同一种方式的js混淆,并且名字都是pde.js,怀疑是使用了同一款混淆工具,所以研究一下. 这款工具叫JS Packer,并不是专门的混淆工具,而是一款js ...
- Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件
之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...
- Android自定义View(RollWeekView-炫酷的星期日期选择控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53420889 本文出自:[openXu的博客] 目录: 1分析 2定义控件布局 3定义Cus ...
- git清空某个文件的历史版本
比如你要清空文件private.ini git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch priva ...