跳至主要内容

SDK8 Mopub Mediation Adapter Interstitial

依照Mopub設定教學設定後,開始實做 adaptor
官方教學:連結
#先建立一 class 繼承 MPFullscreenAdAdapter,class 名稱必須與 Mopub 後台設定內一樣
#加入#import <TAMediaAdsFramework/TAMediaAdsFramework.h>
#複寫-requestAdWithAdapterInfo:(NSDictionary *)info adMarkup:以及在此 method 內用 TADInterstitial 呼叫廣告
#:info 內的 key 值請依照 Mopub 內所設定的 key 值帶入

  1. 複寫-presentAdFromViewController:(UIViewController *)viewController以及在此 method 內用 TADInterstitial的方法 -presentFromRootViewController:顯示廣告
  2. TADInterstitial 的 delegate 內呼叫 MPFullscreenAdAdapterDelegate 執行對應的 method

可參考以下代碼

回MoPub教學

TAMediaInterstitialAdapter​

\ `#import <MoPub/MoPub.h>`\ `#import <TAMediaAdsFramework/TAMediaAdsFramework.h>`\
@interface TAMediaInterstitialAdapter: MPFullscreenAdAdapter <MPThirdPartyFullscreenAdAdapter, TADInterstitialDelegate>
\ `@property (nonatomic,strong) TADInterstitial *interstitialView;`\
@end
\ `#import "TAMediaInterstitialAdapter.h"`\
@implementation TAMediaInterstitialAdapter
\ `- (void)requestAdWithAdapterInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup {`\ `    TADRequest *request = [TADRequest request];`\ `    `\ `    request.testing = NO;`\ `    // Type: TADGender`\ `    request.gender = kTADGenderUnknown;`\ `    `\ `    // interstitialView 物件初始化`\ `    if (self.interstitialView == nil) {`\ `        self.interstitialView = [[TADInterstitial alloc] init];`\ `    }`\ `    `\ `    // 必須要設定delegate`\ `    self.interstitialView.delegate = self;`\ `    `\ `    // 設定 AD Unit ID`\ `    NSString *interstitialId = info[@"InterstitialId"];`\ `    self.interstitialView.adUnitID = interstitialId;`\ `    self.interstitialView.turnOnMicrophone = NO;`\ `    `\ `    MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], [self getAdUnitId]);`\ `    // 載入廣告`\ `    [self.interstitialView loadRequest:request];`\
}
\ `- (BOOL) isRewardExpected {`\ `    return NO;`\ `}`\
- (BOOL)hasAdAvailable {
    return self.interstitialView.isReady;
}
\ `- (BOOL)enableAutomaticImpressionAndClickTracking {`\ `    return YES;`\ `}`\
- (void)presentAdFromViewController:(UIViewController *)rootViewController {
    MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
    [self.interstitialView presentFromRootViewController:rootViewController];
}
\
#pragma mark - TADInterstitialDelegate
// Interstitial廣告成功載入後呼叫, 可以在此時間點及之後顯示呈現廣告
- (void)interstitialDidReceiveAd:(TADInterstitial *)ad {
    MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
\ `    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterDidLoadAd:)]) {`\ `        [self.delegate fullscreenAdAdapterDidLoadAd:self];`\ `    }`\ `}`\
// Interstitial廣告載入失敗時呼叫, 處理錯誤 或 顯示錯誤訊息
- (void)interstitial:(TADInterstitial *)ad didFailToReceiveAdWithError:(TADRequestError *)error {
    MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], [self getAdUnitId]);
    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapter:didFailToLoadAdWithError:)]) {
        [self.delegate fullscreenAdAdapter:self didFailToLoadAdWithError:error];
    }
}
\ `// Interstitial廣告呈現之前呼叫, 注意使用者可能會在廣告內按下連結(網頁, AppStore, ...)而因此離開應用程式, 可以在這function中處理該暫停之項目`\ `- (void)interstitialWillPresentScreen:(TADInterstitial *)ad {`\ `    MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);`\ `    MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);`\ `    MPLogAdEvent([MPLogEvent adDidAppearForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);`\ `    `\ `    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterAdWillAppear:)]) {`\ `        [self.delegate fullscreenAdAdapterAdWillAppear:self];`\ `    }`\ `    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterAdDidAppear:)]) {`\ `        [self.delegate fullscreenAdAdapterAdDidAppear:self];`\ `    }`\ `}`\
// Interstitial廣告關閉, 在螢幕上消失之前呼叫, 再次提醒在Interstitail消失前, 必須將Interstitial及delegate設為nil (可以在這個function中執行)
- (void)interstitialWillDismissScreen:(TADInterstitial *)ad {
    MPLogAdEvent([MPLogEvent adWillDisappearForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);
    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterAdWillDismiss:)]) {
        [self.delegate fullscreenAdAdapterAdWillDismiss:self];
    }
}
\ `// Interstitial廣告關閉, 在螢幕上消失之後呼叫`\ `- (void)interstitialDidDismissScreen:(TADInterstitial *)ad {`\ `    MPLogAdEvent([MPLogEvent adDidDisappearForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);`\
    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterAdDidDismiss:)]) {
        [self.delegate fullscreenAdAdapterAdDidDismiss:self];
    }
}
\ `// 使用者在廣告內按下連結(網頁, AppStore, ...)而因此離開應用程式之前呼叫`\ `- (void)interstitialWillLeaveApplication:(TADInterstitial *)ad {`\ `    MPLogAdEvent([MPLogEvent adWillLeaveApplicationForAdapter:NSStringFromClass(self.class)], [self getAdUnitId]);`\ `    `\ `    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterWillLeaveApplication:)]) {`\ `        [self.delegate fullscreenAdAdapterWillLeaveApplication:self];`\ `    }`\ `    if ([self.delegate respondsToSelector:@selector(fullscreenAdAdapterDidReceiveTap:)]) {`\ `        [self.delegate fullscreenAdAdapterDidReceiveTap:self];`\ `    }`\ `}`\
- (NSString *)getAdUnitId {
    return self.interstitialView.adUnitID ? self.interstitialView.adUnitID : @"";
}
``
@end