檢視 Mopub Mediation Native 的原始碼
←
Mopub Mediation Native
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
官方教學:[https://github.com/mopub/mopub-ios-sdk/wiki/Custom-Events 連結]<br> NativeAd需要建立4個客製化class來串接廣告 == CustomNativeAdEventAdapter == 1.建立一class實做MPNativeAdAdapter protocol,protocol有兩必須實作property:properties及defaultActionURL,此class是作為Tamedia native ad與MPNativeAd的橋樑<br> 2.建立初始化方法,將Tamedia native ad拿到的dictionary作為參數帶入,將帶入的dictionary與MPNativeAdConstants.h提供的key值建立相對應的dictionary後賦予給prooerties<br> 3.defaultActionURL則為Tamedia拿到的nurl<br> 4.實作<code>displayContentForURL:rootViewController:completion:</code>當user點擊時觸發<br> 參考以下代碼<br> // CustomNativeAdEventAdapter.h #import <Foundation/Foundation.h> #import "MPNativeAdAdapter.h" #import "TADNativeAd.h" @interface CustomNativeAdEventAdapter : NSObject <MPNativeAdAdapter> - (instancetype)initWithTADic:(NSDictionary *)taDic; @property (nonatomic, readonly) NSDictionary *properties; @property (nonatomic, readonly) NSURL *defaultActionURL; @end // CustomNativeAdEventAdapter.m #import "CustomNativeAdEventAdapter.h" #import "MPNativeAdConstants.h" @interface CustomNativeAdEventAdapter () @end @implementation CustomNativeAdEventAdapter - (instancetype)initWithTADic:(NSDictionary *)taDic { self = [super init]; NSDictionary *taMeidaDicMapping = @{@"LONGSUBJECT":kAdTitleKey, @"BODY":kAdTextKey, @"ICONSQUARE":kAdIconImageKey, @"IMAGE1280X720":kAdMainImageKey, @"VIDEO":kVASTVideoKey, @"nurl":kDefaultActionURLKey, @"IMAGE960X640":@"IMAGE960X640", @"IMAGE1200X627":@"IMAGE1200X627", @"ICONRECTANGLE":@"ICONRECTANGLE", @"SHORTSUBJECT":@"SHORTSUBJECT", @"IMAGE720X1280":@"IMAGE720X1280", @"IMAGE640X960":@"IMAGE640X960"}; NSMutableDictionary *dic = [NSMutableDictionary new]; for (NSString *key in taDic.allKeys) { [dic setObject:taDic[key] forKey:taMeidaDicMapping[key]]; } _properties = dic; _defaultActionURL = [NSURL URLWithString:taDic[@"nurl"]]; return self; } - (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller { [[UIApplication sharedApplication] openURL:URL]; } @end == CustomNativeAdEventSetting == 此class需實做MPNativeAdRendererSettings protocol,用來設定 viewSize,與指定需要來呈現的View,亦可用MPNativeAdRendererSettings取代<br> // CustomNativeAdEventSetting.h #import <Foundation/Foundation.h> #import "MPNativeAdRendererSettings.h" @interface CustomNativeAdEventSetting : NSObject <MPNativeAdRendererSettings> @property (nonatomic, assign) Class renderingViewClass; @property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; @end // CustomNativeAdEventSetting.m #import "CustomNativeAdEventSetting.h" @implementation CustomNativeAdEventSetting @end == CustomNativeAdRenderer == 此class需實做MPNativeAdRenderer protocol,用於回傳所需要的AdView以及設置客製化事件處理的class<br> // CustomNativeAdRenderer.h #import <Foundation/Foundation.h> #import "MPNativeAdRenderer.h" @interface CustomNativeAdRenderer : NSObject <MPNativeAdRenderer> @property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; @end // CustomNativeAdRenderer.m #import "CustomNativeAdRenderer.h" #import "MPNativeAdRendererConfiguration.h" #import "MPNativeAdRendererSettings.h" #import "MPNativeAdRendering.h" #import "MPNativeAdAdapter.h" #import "MPNativeAdConstants.h" #import "MPNativeAdView.h" #import "MPNativeAdRendererImageHandler.h" #import "MPNativeAdRenderingImageLoader.h" @interface CustomNativeAdRenderer() <MPNativeAdRendererImageHandlerDelegate> @property (nonatomic,strong) id<MPNativeAdRendererSettings>setting; @property (nonatomic,strong) MPNativeAdRendererImageHandler *rendererImageHandler; @end @implementation CustomNativeAdRenderer + (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id<MPNativeAdRendererSettings>)rendererSettings { MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; config.rendererSettings = rendererSettings; config.supportedCustomEvents = @[@"CustomNativeAdEvent"];'''//設置客製化事件處理的class''' config.rendererClass = [self class]; return config; } - (instancetype)initWithRendererSettings:(id<MPNativeAdRendererSettings>)rendererSettings { self = [super init]; _viewSizeHandler = [rendererSettings.viewSizeHandler copy]; self.setting = rendererSettings; self.rendererImageHandler = [MPNativeAdRendererImageHandler new]; self.rendererImageHandler.delegate = self; return self; } - (UIView *)retrieveViewWithAdapter:(id<MPNativeAdAdapter>)adapter error:(NSError **)error { UIView<MPNativeAdRendering> *adView = [MPNativeAdView new]; '''//MPNativeAdRendering potocol設置的項目''' adView.nativeTitleTextLabel.text = adapter.properties[kAdTitleKey]; adView.nativeMainTextLabel.text = adapter.properties[kAdTextKey]; [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[adapter.properties objectForKey:kAdIconImageKey]] intoImageView:adView.nativeIconImageView]; [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[adapter.properties objectForKey:kAdMainImageKey]] intoImageView:adView.nativeMainImageView]; '''//MPNativeAdRendering potocol以外的項目用以下方式設置''' MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; [adView layoutCustomAssetsWithProperties:adapter.properties imageLoader:imageLoader]; return adView; } - (BOOL)nativeAdViewInViewHierarchy { return YES; } @end == CustomNativeAdEvent == 此class需繼承MPNativeCustomEvent,用來取得Tamedia native ad提供給MoPub<br> // CustomNativeAdEvent.h #import "MPNativeCustomEvent.h" #import "TADNativeAd.h" @interface CustomNativeAdEvent : MPNativeCustomEvent <TADNativeAdDelegate> { TADNativeAd *nativeAd; } @end // CustomNativeAdEvent.m #import "CustomNativeAdEvent.h" #import "CustomNativeAdEventAdapter.h" #import "MPNativeAdConstants.h" #import "MPNativeAd.h" #import "MPNativeAdError.h" @implementation CustomNativeAdEvent - (void)requestAdWithCustomEventInfo:(NSDictionary *)info { TADRequest *request = [TADRequest request]; request.testing = NO; // Type: TADGender request.gender = kTADGenderUnknown; // Set birthday [request setBirthdayWithYear:1988 month:6 day:11]; // Set location [request setLocationWithLatitude:25.033534 longitude:121.534791 accuracy:1]; // NAD 物件初始化, 帶入自訂的origin if (!nativeAd) { nativeAd = [[TADNativeAd alloc] initWithAdUnitId:info[@"NativeId"]];'''//NativeId在MoPub內設定''' } // 必須要設定delegate nativeAd.delegate = self; // 載入廣告 [nativeAd loadRequest:request]; } - (void)nativeAdDidReceiveAd:(TADNativeAd *)ad { // 表示本次請求收到廣告, 藉由 getNativeAdContent 取得包含回覆內容的 NSDictionary NSDictionary *nadDic = [nativeAd getNativeAdContent]; CustomNativeAdEventAdapter *adapter = [[CustomNativeAdEventAdapter alloc] initWithTADic:nadDic]; MPNativeAd *mpNativeAd = [[MPNativeAd alloc] initWithAdAdapter:adapter]; NSMutableArray *imageURLs = [NSMutableArray array]; for (NSString *key in nadDic.allKeys) { if ([[key lowercaseString] hasPrefix:@"image"] || [key hasPrefix:@"ICON"]) { NSURL *url = [NSURL URLWithString:nadDic[key]]; [imageURLs addObject:url]; } } '''//在呼叫delegate didloadAd前先將圖片預載''' [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { if (errors) { [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForImageDownloadFailure()]; } else { [self.delegate nativeCustomEvent:self didLoadAd:mpNativeAd]; } }]; } - (void)nativeAd:(TADNativeAd *)ad didFailToReceiveAdWithError:(TADRequestError *)error { if ([self.delegate respondsToSelector:@selector(nativeCustomEvent:didFailToLoadAdWithError:)]) { [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; } } - (void)dealloc { if (nativeAd != nil) { nativeAd.delegate = nil; nativeAd = nil; } } @end
返回到「
Mopub Mediation Native
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
已展開
已摺疊
視圖
閱讀
檢視原始碼
檢視歷史
更多
已展開
已摺疊
搜尋
導覽
首頁
近期變更
隨機頁面
有關 MediaWiki 的說明
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊