檢視 Mopub Mediation Native 的原始碼
←
Mopub Mediation Native
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
官方教學:[https://github.com/mopub/mopub-ios-sdk/wiki/Custom-Events 連結]<br> NativeAd需要建立4個客製化class來串接廣告,若是開發者原本已經有串接MoPub native廣告的話則只需要,TAMediaCustomNativeAdEventAdapter及TAMediaCustomNativeAdEvent即可。 [[MoPub Mediation Setting|回MoPub教學]] == TAMediaCustomNativeAdEventAdapter(必要) == 1.建立一class實做MPNativeAdAdapter protocol,protocol有兩必須實作property:properties及defaultActionURL,此class是作為Tamedia native ad與MPNativeAd的橋樑<br> 2.建立初始化方法,將TAMedia native ad作為參數帶入,將由TAMeida native ad拿到的dictionary與MPNativeAdConstants.h提供的key值建立相對應的dictionary後賦予給prooerties<br> 3.defaultActionURL則為TAMedia拿到的nurl<br> 4.實作<code>displayContentForURL:rootViewController:completion:</code>當user點擊時觸發<br> 參考以下代碼<br> // TAMediaCustomNativeAdEventAdapter.h #import <Foundation/Foundation.h> #import "MPNativeAdAdapter.h" #import <TAMediaAdsFramework/TAMediaAdsFramework.h> @interface TAMediaCustomNativeAdEventAdapter : NSObject <MPNativeAdAdapter> - (instancetype)initWithTADNativeAd:(TADNativeAd *)nativeAd; @property (nonatomic, readonly) NSDictionary *properties; @property (nonatomic, readonly) NSURL *defaultActionURL; @property (nonatomic, weak) id<MPNativeAdAdapterDelegate> delegate; @end // TAMediaCustomNativeAdEventAdapter.m #import "TAMediaCustomNativeAdEventAdapter.h" #import "MPNativeAdConstants.h" @interface TAMediaCustomNativeAdEventAdapter () <TADNativeAdDelegate> @property (nonatomic,strong) TADNativeAd *nativeAd; @end @implementation TAMediaCustomNativeAdEventAdapter - (instancetype)initWithTADNativeAd:(TADNativeAd *)nativeAd { self = [super init]; NSDictionary *tadDic = [nativeAd getNativeAdContent]; nativeAd.delegate = self; self.nativeAd = nativeAd; self = [self initWithTADic:tadDic]; return self; } - (instancetype)initWithTADic:(NSDictionary *)taDic { self = [super init]; NSDictionary *taMeidaDicMapping = @{@"LONGSUBJECT":kAdTitleKey, @"BODY":kAdTextKey, @"ICONSQUARE":kAdIconImageKey, @"IMAGE1200X627":kAdMainImageKey, @"VIDEO":kVASTVideoKey, @"nurl":kDefaultActionURLKey, @"CTA":kAdCTATextKey }; NSMutableDictionary *dic = [NSMutableDictionary new]; for (NSString *key in taDic.allKeys) { NSString *newKey = taMeidaDicMapping[key]; if (newKey == nil) { newKey = key; } [dic setObject:taDic[key] forKey:newKey]; } _properties = dic; _defaultActionURL = [NSURL URLWithString:taDic[@"nurl"]]; return self; } - (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller { [self.nativeAd handleClick]; if ([self.delegate respondsToSelector:@selector(nativeAdDidClick:)]) { [self.delegate nativeAdDidClick:self]; } } - (void)adViewWillLeaveApplication:(TADNativeAd *)adView { if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromAdapter:)]) { [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; } } @end == TAMediaCustomNativeAdEventSetting == 此class需實做MPNativeAdRendererSettings protocol,用來設定 viewSize,與指定需要來呈現的View,亦可用MPNativeAdRendererSettings取代<br> // TAMediaCustomNativeAdEventSetting.h #import <Foundation/Foundation.h> #import "MPNativeAdRendererSettings.h" @interface TAMediaCustomNativeAdEventSetting : NSObject <MPNativeAdRendererSettings> @property (nonatomic, assign) Class renderingViewClass; @property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; @end // TAMediaCustomNativeAdEventSetting.m #import "TAMediaCustomNativeAdEventSetting.h" @implementation TAMediaCustomNativeAdEventSetting @end == TAMediaCustomNativeAdRenderer == 此class需實做MPNativeAdRenderer protocol,用於回傳所需要的AdView以及設置客製化事件處理的class<br> 1.實作<code>+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id<MPNativeAdRendererSettings>)rendererSettings</code>建立MPNativeAdRendererConfiguration物件<br> 2.設置rendering class為本身class<br> 3.設置rendererSettings為參數傳入的rendererSettings<br> 4.設置supportedCustomEvents為TAMediaCustomNativeAdEvent class<br> 5.實作<code>initWithRendererSettings:</code>設置物件viewSizeHandler,以及任何客製化設定<br> 6.實作<code>retrieveViewWithAdapter:</code>回傳要來呈顯在畫面上的View<br> 參考以下代碼<br> // TAMediaCustomNativeAdRenderer.h #import <Foundation/Foundation.h> #import "MPNativeAdRenderer.h" @interface TAMediaCustomNativeAdRenderer : NSObject <MPNativeAdRenderer> @property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; @end // TAMediaCustomNativeAdRenderer.m #import "TAMediaCustomNativeAdRenderer.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 TAMediaCustomNativeAdRenderer() <MPNativeAdRendererImageHandlerDelegate> @property (nonatomic,strong) id<MPNativeAdRendererSettings>setting; @property (nonatomic,strong) MPNativeAdRendererImageHandler *rendererImageHandler; @end @implementation TAMediaCustomNativeAdRenderer + (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id<MPNativeAdRendererSettings>)rendererSettings { MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; config.rendererSettings = rendererSettings; config.supportedCustomEvents = @[@"TAMediaCustomNativeAdEvent"];'''//設置客製化事件處理的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設置的項目''' '''//需依照串接不同的Native廣告,設定不同的值''' adView.nativeTitleTextLabel.text = adapter.properties[kAdTitleKey]; adView.nativeMainTextLabel.text = adapter.properties[kAdTextKey]; adView.nativeCallToActionTextLabel.text = adapter.properties[kAdCTATextKey]; [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 == TAMediaCustomNativeAdEvent(必要) == 此class需繼承MPNativeCustomEvent,用來取得Tamedia native ad提供給MoPub<br> 1.建立class繼承MPNativeCustomEvent<br> 2.複寫<code> - (void)requestAdWithCustomEventInfo:(NSDictionary *)info</code>在此用TADNativeAd去取得廣告<br> 3.取得廣告後用取得的Dictionary建立TAMediaCustomNativeAdEventAdapter後再用adapter建立MPNativeAd<br> 4.呈現廣告前先呼叫父類別<code>precacheImagesWithURLs:completionBlock:<code/>取得image後,再呼叫<code>customNativeEvent:didLoadAd:</code><br> // TAMediaCustomNativeAdEvent.h #import "MPNativeCustomEvent.h" #import <TAMediaAdsFramework/TAMediaAdsFramework.h> @interface TAMediaCustomNativeAdEvent : MPNativeCustomEvent <TADNativeAdDelegate> { TADNativeAd *nativeAd; } @end // TAMediaCustomNativeAdEvent.m #import "TAMediaCustomNativeAdEvent.h" #import "TAMediaCustomNativeAdEventAdapter.h" #import "MPNativeAdConstants.h" #import "MPNativeAd.h" #import "MPNativeAdError.h" @implementation TAMediaCustomNativeAdEvent - (void)requestAdWithCustomEventInfo:(NSDictionary *)info { TADRequest *request = [TADRequest request]; request.testing = NO; // Type: TADGender request.gender = kTADGenderUnknown; // Set birthday [request setBirthdayWithYear:xxxx month:xx day:xx]; // 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]; TAMediaCustomNativeAdEventAdapter *adapter = [[TAMediaCustomNativeAdEventAdapter alloc] initWithTADNativeAd:ad]; MPNativeAd *mpNativeAd = [[MPNativeAd alloc] initWithAdAdapter:adapter]; NSMutableArray *imageURLs = [NSMutableArray array]; for (NSString *key in nadDic.allKeys) { if ([[key lowercaseString] hasPrefix:@"image"] || [key hasPrefix:@"ICON"]) { if (nadDic[key] && ![nadDic[key] isEqualToString:@""]) { 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 的說明
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊