
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#import GADBannerView.h #import GADBannerViewDelegate.h @interface IOSAdmob : NSObject - (void)startRequestAdmob:(NSString*)admobId AdSize:(GADAdSize)size Position:(CGPoint)pos; - (void)setAdmobHidden:(BOOL)isHidden; @end
//
// 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
// // IOSAdmobManager.h // IOSAdmob // // Created by LiuYanghui on 14-8-4. // Copyright (c) 2014年 LiuYanghui. All rights reserved. // #import#import @interface IOSAdmobManager : NSObject + (IOSAdmobManager *)getInstance; - (void)startRequestAdmob:(NSString*)admobId AdSizeId:(NSInteger)adSizeId Position:(CGPoint)pos; - (void)setAdmobHidden:(BOOL)isHidden; @end
//
// 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
//
// 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 文件夾中。