SDK8 Mopub Mediation Adapter Banner
於 2021年9月10日 (五) 09:23 由 imported>Wikiuser 所做的修訂 (新頁面: 依照 Mopub設定教學 設定後,開始實做 Adapter <br> 官方教學:[https://developers.mopub.com/networks/integrate/build-adapters-ios/#quick-start-for-inl...)
依照 Mopub設定教學 設定後,開始實做 Adapter
官方教學:連結
- 先建立一 class 繼承 MPInlineAdAdapter,class 名稱必須與 Mopub 後台設定內一樣
- 加入 #import <TAMediaAdsFramework/TAMediaAdsFramework.h>
- 複寫
- (void)requestAdWithSize:(CGSize) adapterInfo: adMarkup:
以及在此 method 內用 TADBannerView 呼叫廣告
- info 內的 key 值請依照 Mopub 內所設定的 key 值帶入
- 在 TADBannerView delegate 內呼叫 MPInlineAdAdapterDelegate 執行相對應的 method
可參考以下代碼,或直接下載 adapter 檔直接加入專案中
TAMediaInlineAdAdaptor
#import <MoPub/MoPub.h> #import <TAMediaAdsFramework/TAMediaAdsFramework.h> @interface TAMediaInlineAdAdaptor : MPInlineAdAdapter<MPThirdPartyInlineAdAdapter, TADBannerViewDelegate> @property (nonatomic, strong) TADBannerView *bannerView; @end
#import "TAMediaInlineAdAdapter.h"
@implementation TAMediaInlineAdAdapter
- (void)requestAdWithSize:(CGSize)size adapterInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup {
TADRequest *request = [TADRequest request];
request.testing = NO;
request.gender = kTADGenderUnknown;
CGFloat adRatio = floor((size.width/size.height)*100)/100;
CGFloat ta1200x627AdRatio = floor((1200.0/627)*100)/100;
NSString *bannerId = @"";
///根據 ad size 回傳不同 size 的 TAmedia Banner
if (size.width == 300 && size.height == 250) {
self.bannerView = [[TADBannerView alloc] initWithAdSize:kTADAdSizeMediumRectangle];
bannerId = info[@"banner300x250"];
} else if (size.width == 320 && size.height == 50) {
self.bannerView = [[TADBannerView alloc] initWithAdSize:kTADAdSizeBanner];
bannerId = info[@"banner320x50"];
} else if (adRatio == ta1200x627AdRatio) {
self.bannerView = [[TADBannerView alloc] initWithAdSize:TADAdSize1200x627RatioBannerWithWidth(size.width)];
bannerId = info[@"banner1200x627"];
} else {
NSError *mopubError = [NSError errorWithCode:MOPUBErrorAdapterInvalid localizedDescription:@"TAmedia banner failed to load due to invalid ad size."];
MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:mopubError], [self getAdUnitId]);
[self.delegate inlineAdAdapter:self didFailToLoadAdWithError:mopubError];
return;
}
self.bannerView.delegate = self;
self.bannerView.turnOnMicrophone = NO;
self.bannerView.adUnitID = bannerId;
self.bannerView.rootViewController = [self.delegate inlineAdAdapterViewControllerForPresentingModalView:self];
MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], [self getAdUnitId]);
[self.bannerView loadRequest:request];
}
#pragma mark - [Tamedia Banner delegate]
- (void)adViewDidReceiveAd:(TADBannerView *)view {
MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
if ([self.delegate respondsToSelector:@selector(inlineAdAdapter:didLoadAdWithAdView:)]) {
[self.delegate inlineAdAdapter:self didLoadAdWithAdView:view];
}
}
- (void)adView:(TADBannerView *)view didFailToReceiveAdWithError:(TADRequestError *)error {
NSString *failureReason = [NSString stringWithFormat: @"TAmedia Banner failed to load with error: %@", [error localizedDescription]];
NSError *mopubError = [NSError errorWithCode:MOPUBErrorAdapterInvalid localizedDescription:failureReason];
MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:mopubError], [self getAdUnitId]);
if ([self.delegate respondsToSelector:@selector(inlineAdAdapter:didFailToLoadAdWithError:)]) {
[self.delegate inlineAdAdapter:self didFailToLoadAdWithError:error];
}
}
- (void)adViewWillPresentScreen:(TADBannerView *)adView {
}
- (void)adViewWillDismissScreen:(TADBannerView *)adView {
}
- (void)adViewDidDismissScreen:(TADBannerView *)adView {
}
- (void)adViewWillLeaveApplication:(TADBannerView *)adView {
MPLogAdEvent([MPLogEvent adWillLeaveApplicationForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
if ([self.delegate respondsToSelector:@selector(inlineAdAdapterWillLeaveApplication:)]) {
[self.delegate inlineAdAdapterWillLeaveApplication:self];
}
}
- (NSString *)getAdUnitId {
return self.bannerView.adUnitID ? self.bannerView.adUnitID : @"";
}
@end