猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com。谢谢!

原文地址: http://www.cocos2dev.com/?p=567

Unity调用iOS还是非常easy的,晚上空暇时间写了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导出的iOSproject默认没有使用arc,所以以上代码所有未使用arc。
Xcode->Targets->Build Settings->Objective-C Automatic Reference Counting 设置NO,即关闭arc。

2、针对上诉接口创建什么类型的xCodeproject ?
你能够创建随意的Xcodeproject。编写以上代码。

也能够创建iOS->Framework & Library->Cocos Touch Static Library 静态库project。

3、以上代码怎样加到Unity?
第一个方法:直接将以上代码文件拷贝到Unity->Assets/Plugins/iOS 目录中。该文件是Unity指定的插件文件。
第二个方法:假设你创建的是静态库project。Xcode->Product->Archive 编译出.a静态库文件,将.a文件拷贝到Unity->Assets/Plugins/iOS 目录中。

iOS平台加入Google Admob -1/2(Unity3D开发之七)的更多相关文章

  1. iOS平台添加Google Admob -1/2(Unity3D开发之七)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=567 Unity调用iOS还是非 ...

  2. iOS平台添加Google Admob -2/2(Unity3D开发之八)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=572 在上一篇文章中主要是编写了 ...

  3. 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  4. Unity3d开发集成Google Admob广告增加收入

    在Unity游戏中植入广告是Unity 游戏产品增加收入的一种重要方式,常用的广告有谷歌Admob,百度ssp,腾讯广点通,unity公司的unityads等等,而使用的最多的应该属于谷歌Admob, ...

  5. Remove Google Play Games libraries on iOS (Unity3D开发之二十一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/48313653 ...

  6. (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  7. U3D中IOS平台泛型方法尽少使用

    U3D的IOS最小运行库use micro mscorlib是不包含泛型反射方法的,如FieldType.GetGenericArguments方法.所以尽量少用List而直接使用array. 另外请 ...

  8. 经典好文:android和iOS平台的崩溃捕获和收集

    通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助.本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开 ...

  9. Android Google AdMob 广告接入示例

    Android Google AdMob 广告接入示例 [TOC] 首先请大家放心,虽然 Google搜索等服务被qiang了,但是 广告服务国内还是可以用的,真是普天同庆啊~~~噗! 其实这篇文章也 ...

随机推荐

  1. Log.d 日志调试查看(所有平台)

    https://www.cnblogs.com/onechen/p/6436748.html http://docwiki.embarcadero.com/Libraries/Berlin/en/FM ...

  2. java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表

    java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...

  3. pymouse pykeyboard

    import time from pymouse import PyMouse from pykeyboard import PyKeyboard import re import win32clip ...

  4. Java使用JNA方式调用DLL(动态链接库)(原创,装载请注明出处)

    Java使用JNA调用DLL 1.准备 1.JDK环境 2.Eclipse 3.JNA包 下载JNA包: (1).JNA的Github:https://github.com/java-native-a ...

  5. luogu 4884 多少个1?

    题目描述: 给定整数K和质数m,求最小的正整数N,使得 11111⋯1(N个1)≡K(mod m) 说人话:就是 111...1111 mod m =K 题解: 将两边一起*9+1,左边就是10^an ...

  6. web 学习

    重要得之前的知识浏览器 shell 内核外表 内心 IE tridentFirefox Geckogoogle chrome webkit/blinksafari webkitopera presto ...

  7. PyQt5+requests实现车票查询工具

    PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下 结构图   效果图   思路 1.search(QPushButton)点击信号(clicked)连接到自定义的槽函数(ev ...

  8. Codeforce 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses(并查集&分组背包)

    题意: 给定n个价值为b 花费为w的物品, 然后某些物品是属于同一个组的, 给定一个花费限制V, 求在小于等于V的情况下取得到的价值最大为多少,能对于同一个组的物品,要么全取,要么只取一个. 分析: ...

  9. ARM中的---汇编指令

    一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是"以下是代码段& ...

  10. C51 keil 注意事项

    下载程序需要生成hex文件 仿真 蜂鸣器 音调:频率 音量:高低电平占空比 有源:上面没有加号,只需高低电平即可发声 无源:上面有加号,不仅要电平,还要, 的频率