AdMob Mediation Video
於 2014年7月14日 (一) 07:56 由 imported>Wikiuser 所做的修訂
首先將AdMob和TAMedia SDK整合至專案中,AdMob SDK可以在這裡下載 https://developers.google.com/mobile-ads-sdk/download?#downloadios。
接著在AdMob Mediation新增Custom Event(https://mediation.admob.com)。
新增Custom Event的詳細說明可以參考 https://developers.google.com/mobile-ads-sdk/docs/admob/mediation#ios。
最後,在專案中加入與Custom Event對應的Class,其中Custom Event的Class Name需要和新增的Class Name保持一致,例如Custom Event的Class Name是TADCustomView,則新增的Class Name也必須為TADCustomView。
Mediation View Controller
// MediationViewController.h // mediation custom object 呼叫的 videoView, 因為沒有直接的關係 // 若需要使用則需將其 reference 傳回來使用 @property (nonatomic, strong) TADVideoAdView *videoView;
// MediationViewController.m - (void)viewWillDisappear:(BOOL)animated { // MediationViewController 的 view 消失前, 將 _videoView 及其 delegate 設為 nil // _videoView 為 custom 物件呼叫的 TADVideoAdView 物件 // 傳回來的 reference 在這裡使用 可以讓 mediation 呼叫的 video 物件跟著 MediationViewController 一起被 dealloc if (_videoView != nil) { _videoView.delegate = nil; _videoView = nil; } }
Custom Video View
// TADCustomVideo.h // 匯入 TAMedia SDK 定義 #import "TADVideoAdView.h" #import "TADVideoAdViewDelegate.h" // 匯入 Admob SDK 定義 #import "GADCustomEventBanner.h" #import "GADCustomEventBannerDelegate.h" @interface TADCustomVideo : NSObject<GADCustomEventBanner, TADVideoAdViewDelegate> { TADVideoAdView *_videoView; } @property (nonatomic, weak) id<GADCustomEventBannerDelegate> delegate; @end
// TADCustomVideo.m #import "TADCustomVideo.h" @interface TADCustomVideo () { UIView *tempView; } @end @implementation TADCustomVideo @synthesize delegate = _delegate; - (void)requestBannerAd:(GADAdSize)adSize parameter:(NSString *)serverParameter label:(NSString *)serverLabel request:(GADCustomEventRequest *)customEventRequest { // 將 GADCustomEventRequest 物件裡的資訊轉入 TADRequest 物件 TADRequest *tadRequest = [TADRequest request]; tadRequest.testing = customEventRequest.isTesting; tadRequest.gender = (TADGender)customEventRequest.userGender; tadRequest.birthday = customEventRequest.userBirthday; [tadRequest setLocationWithLatitude:customEventRequest.userLatitude longitude:customEventRequest.userLongitude accuracy:customEventRequest.userLocationAccuracyInMeters]; // bannerView 物件初始化, 帶入自訂的origin if (_videoView == nil) { _videoView = [[TADVideoAdView alloc] initWithVideoAd]; } // 必須要設定delegate _videoView.delegate = self; // serverParameter 為 AD Unit ID, 在 Admob 裡設定 _videoView.adUnitID = serverParameter; // 載入廣告 [_videoView loadRequest:tadRequest]; } #pragma mark - #pragma mark - TADBannerViewDelegate - (void)adViewDidReceiveAd:(TADVideoAdView *)view { NSLog(@"CustomBanner - didReceived! View: %@", view); // 回傳成功地收到廣告 // (回傳和 videoView 一樣大小的 UIView 物件給 customEventBanner) tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 250)]; [_delegate customEventBanner:self didReceiveAd:tempView]; // 將 (TADVideoAdView *)view 的 reference 傳回呼叫 mediation 的 view controller // 這裡呼叫 mediation 的 view controller 是 MediationViewController ((MediationViewController *)[_delegate viewControllerForPresentingModalView]).videoView = view; // 將 videoView 的 delegate 設為不是 self 的物件, 以免 custom 物件比 video 更早被 dealloc view.delegate = [_delegate viewControllerForPresentingModalView]; } - (void)adView:(TADVideoAdView *)view didFailToReceiveAdWithError:(NSError *)error { [_delegate customEventBanner:self didFailAd:error]; } - (void)adViewWillDismissScreen:(TADVideoAdView *)adView { [_delegate customEventBannerWillDismissModal:self]; } - (void)adViewDidDismissScreen:(TADVideoAdView *)adView { [_delegate customEventBannerDidDismissModal:self]; } @end