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 ...
随机推荐
- Java Web -【分页功能】详解
分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...
- 安装插件出现eclipse An internal error occurred during: "Installing Software". xxxxxxxxx
就是你自己本来就有那个插件了 百度怎么删吧.... 看一下我这个文章 强烈建议本地安装的时候用第四种安装 http://www.cnblogs.com/ydymz/articles/7203260.h ...
- c#默认类的修饰符。
类的默认修饰符是internal 当其修饰符为internal时,其他模块不能访问该类, 所以class类的修饰符一般为public
- POJ 放苹果问题(递归)
首先我们想象有一个函数count f(m,n)可以把m个苹果放到n个盘子中. 根据 n 和 m 的关系可以进一步分析: 特殊的m <=1|| n <= 1时只有一种方法: 当 m < ...
- 深入了解Java虚拟机和内存管理
1.java程序的执行过程 java源文件->解析器->class文件->java类加载器->java运行时数据区->执行引擎 2.我们接下来看一下java运行 ...
- MySQL where 子句
MySQL where 子句 我们知道从MySQL表中使用SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是SQL ...
- Java第10次实验(数据库)
参考资料 数据结构实验参考文件 MySql操作视频与数据库相关jar文件请参考QQ群文件. 第1次实验 1. MySQL数据库基本操作 完整演示一遍登录.打开数据库.建表.插入 常见错误:语句后未跟; ...
- Sharding-jdbc实现分库分表
首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...
- mysql5.7在centos上安装的完整教程以及相关的“坑”
安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | gre ...
- log4cxx用环境变量设置输出文件名
log4cxx用环境变量设置输出文件名(金庆的专栏 2016.12)利用环境变量,可以用同一个log4j.xml来配置多个相似进程,输出日志到不同文件.例如多个BaseApp进程使用同一个BaseAp ...