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 ...
随机推荐
- pytorch_SRU(Simple Recurrent Unit)
导读 本文讨论了最新爆款论文(Training RNNs as Fast as CNNs)提出的LSTM变种SRU(Simple Recurrent Unit),以及基于pytorch实现了SRU,并 ...
- 触发事件trigger
触发事件,在本例中,文档加载好之后,就触发dblclick双击事件,而不是通过去手动双击. <script src="http://how2j.cn/study/jquery.min. ...
- form submit提交
form内控件参数自动添加到url后,而自定义的url参数则不能添加到url后 $('#fm').form('submit', { url: 'Data/Diary.ashx?dt=' + new D ...
- easyui datagrid 得到冻结列跟非冻结列
var head = $('#ClassManagement').datagrid("options").columns; var fhead=$('#ClassManagemen ...
- jquery easyui datagrid数据自动换行 panel用法
nowrap:false 初始化panel $('#txtLeftPercent').panel({ title: '剩余权重:' + percent, height: 10, width: 180, ...
- struct2利用相关的Aware接口
Struts 2提供了Aware接口.Aware为"感知"的意思,实现了相关Aware接口的Action能够感知相应的资源.Struts在实例化一个Action实例时,如果发现它实 ...
- 前端实现搜索历史和清空历史(angularjs+ionic)
要实现的页面效果: 1.显示历史搜索, 2.最近搜索的排在最前, 2.最多显示8条历史 4.清空历史记录 思路: 1.首先显示历史记录需要一个数组searchItems,通过ng-repeat显示每一 ...
- node之fs模块
前言 fs是filesystem的缩写,该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装.但是,这个模块几乎对所有操作提供异步和同步两种操作方式,供开发者选择. 一.文件读取 文 ...
- 阻止Enter键回发到服务端Asp.net
//阻止enter键回发到服务端$(function () { $("input[type=text]").each(function () { $(this) ...
- 浏览器本地下拉框查询选择js
首先需要引用jquery-1.7.2.js. 页面下拉框有对应的数据,此下拉框的查询将不与服务器交互.本地下拉框查询.暂不支持通过键盘上下按键和enter键控制 // JavaScript Docum ...