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 文件夾中。