Amazon Publisher Services(APS)のインタースティシャル広告の導入(v8 SDK)

はじめに

APS SDKの初期化が必要です。APSの設定をご覧になり、APSの初期化を必ず先に行ってください。
こちらはGoogle Mobile Ads SDK v8を使用した場合の実装例です。v8以前のSDKをご利用の場合はこちらをご覧ください。

APSインタースティシャルへのリクエストを行う

DTBAdSizeのインスタンスを生成します

YOUR_SLOT_UUIDには営業担当がお知らせしたIDを入力してください。

#import <DTBiOSSDK/DTBiOSSDK.h>

DTBAdSize *size = [[DTBAdSize alloc] initInterstitialAdSizeWithSlotUUID:@"YOUR_SLOT_UUID"];
import DTBiOSSDK

let size = DTBAdSize(interstitialAdSizeWithSlotUUID: "YOUR_SLOT_UUID")

DTBAdLoaderのインスタンスを生成し、DTBAdSizeを設定する

DTBAdLoader *adLoader = [DTBAdLoader new];
[adLoader setSizes:size, nil];
let adLoader = DTBAdLoader()
adLoader.setAdSizes([size])

APSの入札リクエストを行う

loadAdを呼び出して入札リクエストを行います。

[adLoader loadAd:self];
adLoader.loadAd(self)

DTBAdCallbackの実装を行う

APSが入札した場合はonSuccessが、入札しなかった場合はonFailureが呼ばれます。

APSの入札結果を元に、AdMobへ広告リクエストを行います。

onSuccessが呼ばれた場合は、AdMobへGADCustomEventExtrasを付与して広告リクエストを行い、 onFailureが呼ばれた場合は、AdMobへ追加情報を付与せずにリクエストを行います。 AdMobの実装についてはこちらをご覧ください。

#import <DTBiOSSDK/DTBiOSSDK.h>
@interface ViewController () <GADFullScreenContentDelegate, DTBAdCallback>
@end

@implementation ViewController
...

#pragma mark - DTBAdCallback
- (void)onFailure: (DTBAdError)error {
    // APSの入札情報は付与しないでAdMobへリクエストを行う
    [self loadAdMobInterstitialAdsWithExtras:nil];
}

- (void)onSuccess: (DTBAdResponse *)adResponse {
    // APSの入札情報を付与してAdMobへリクエスト行う
    NSString *amznSlots = adResponse.amznSlots;
    NSDictionary *mediationHints = [adResponse mediationHints];
    GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
    [extras setExtras:mediationHints forLabel:amznSlots];
    [self loadAdMobInterstitialAdsWithExtras:extras];
}

#pragma mark - AdMobinterstitial load

- (void)loadAdMobInterstitialAdsWithExtras: (GADCustomEventExtras *)extras
{
    GADRequest *request = [GADRequest request];
    if (extras != nil) {
        // admobへリクエストを行う際にextraへ登録する
        [request registerAdNetworkExtras:extras];
    }

    // AdMobへリクストを行う。
    [GADInterstitialAd loadWithAdUnitID:@"ADMOB_INTERSTITIAL_ID"
                                request:request
                      completionHandler:^(GADInterstitialAd *ad, NSError *error) {
        if (error) {
            NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
            return;
        }
        self.googleInterstitial = ad;
        self.googleInterstitial.fullScreenContentDelegate = self;
    }];
}
import UIKit
import DTBiOSSDK
import GoogleMobileAds

class ViewController: UIViewController, GADFullScreenContentDelegate, DTBAdCallback {
    var googleInterstitial: GADInterstitial!
    ...
    // MARK: DTBAdCallback
    func onFailure(_ error: DTBAdError) {
        // APSの入札情報を付与してAdMobへリクエスト行う
        self.loaodAdMobInterstitialAd(extras: nil)
    }

    func onSuccess(_ adResponse: DTBAdResponse!) {
        // APSの入札情報を付与してAdMobへリクエスト行う
        let amznSlots = adResponse.amznSlots()
        let mediationHints = adResponse.mediationHints()
        let extras = GADCustomEventExtras.init()
        extras.setExtras(mediationHints, forLabel: amznSlots)
        self.loaodAdMobInterstitialAd(extras: extras)
    }

    // MARK: load AdMob interstitial
    func loaodAdMobInterstitialAd(extras: GADCustomEventExtras?) {
        let request = GADRequest()
        if (extras != nil) {
            request.register(extras!)
        }
        GADInterstitialAd.load(withAdUnitID: "ADMOB_INTERSTITIAL_ID", request: request, completionHandler: { ad, error in
            if let error = error {
                print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                return
            }
            self.googleInterstitial = ad;
            self.googleInterstitial.fullScreenContentDelegate = self;
        })
    }
}

広告を表示する

広告の準備ができているか確認してから広告を表示します。

- (void)showInterstitialAd {
    if (self.googleInterstitial) {
        [self.googleInterstitial presentFromRootViewController:self];
    }
}
func showInterstitialAd(){
    if let ad = self.googleInterstitial {
        ad.present(fromRootViewController: self)
    }
}

実装例

#import "APSInterstitialViewController.h"
#import <DTBiOSSDK/DTBiOSSDK.h>
@import GoogleMobileAds;

@interface APSInterstitialViewController () <GADFullScreenContentDelegate, DTBAdCallback>
@property(nonatomic, strong) GADInterstitialAd *googleInterstitial;
@end

@implementation APSInterstitialViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // APSのSDKの初期化を行います。
    [[DTBAds sharedInstance] setAppKey: @"YOUR_APP_ID"];

    [self loadInterstitialAd];
}

- (void)loadInterstitialAd {
    // APSの読み込みを行う。
    DTBAdSize *size = [[DTBAdSize alloc] initInterstitialAdSizeWithSlotUUID:@"YOUR_SLOT_UUID"];
    DTBAdLoader *adLoader = [DTBAdLoader new];
    [adLoader setSizes:size, nil];

    // APSの入札リクエスト
    [adLoader loadAd:self];
}

#pragma mark - DTBAdCallback
- (void)onFailure: (DTBAdError)error {
    // APSの入札情報は付与しないでAdMobへリクエストを行う
    [self loadAdMobInterstitialAdsWithExtras:nil];
}

- (void)onSuccess: (DTBAdResponse *)adResponse {
    // APSの入札情報を付与してAdMobへリクエスト行う
    NSString *amznSlots = adResponse.amznSlots;
    NSDictionary *mediationHints = [adResponse mediationHints];
    GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
    [extras setExtras:mediationHints forLabel:amznSlots];
    [self loadAdMobInterstitialAdsWithExtras:extras];
}

#pragma mark - AdMobInterstitial load

- (void)loadAdMobInterstitialAdsWithExtras: (GADCustomEventExtras *)extras
{
    GADRequest *request = [GADRequest request];
    if (extras != nil) {
        // admobへリクエストを行う際にextraへ登録する
        [request registerAdNetworkExtras:extras];
    }

    // AdMobへリクストを行う。
    [GADInterstitialAd loadWithAdUnitID:@"ADMOB_INTERSTITIAL_ID"
                                request:request
                      completionHandler:^(GADInterstitialAd *ad, NSError *error) {
        if (error) {
            NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
            return;
        }
        self.googleInterstitial = ad;
        self.googleInterstitial.fullScreenContentDelegate = self;
    }];
}

#pragma mark -
#pragma mark GADFullScreenContentDelegate

- (void)adDidPresentFullScreenContent:(id)ad {}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
    [self loadInterstitialAd];
}

- (void)adDidDismissFullScreenContent:(id)ad {
    [self loadInterstitialAd];
}

@end
import UIKit
import DTBiOSSDK
import GoogleMobileAds

class ViewController: UIViewController, GADFullScreenContentDelegate, DTBAdCallback {

    var googleInterstitial: GADInterstitialAd!

    override func viewDidLoad() {
        super.viewDidLoad()

        // APSのSDKの初期化を行います。
        DTBAds.sharedInstance().setAppKey("YOUR_APP_ID")

        self.loadInterstitialAd()
    }


    func loadInterstitialAd() {
        let size = DTBAdSize(interstitialAdSizeWithSlotUUID: "YOUR_SLOT_UUID")
        let adLoader = DTBAdLoader()
        adLoader.setAdSizes([size])
        adLoader.loadAd(self)
    }

    // MARK: DTBAdCallback
    func onFailure(_ error: DTBAdError) {
        // APSの入札情報を付与してAdMobへリクエスト行う
        self.loaodAdMobInterstitialAd(extras: nil)
    }

    func onSuccess(_ adResponse: DTBAdResponse!) {
        // APSの入札情報を付与してAdMobへリクエスト行う
        let amznSlots = adResponse.amznSlots()
        let mediationHints = adResponse.mediationHints()
        let extras = GADCustomEventExtras.init()
        extras.setExtras(mediationHints, forLabel: amznSlots)
        self.loaodAdMobInterstitialAd(extras: extras)
    }

    func loaodAdMobInterstitialAd(extras: GADCustomEventExtras?) {
        let request = GADRequest()
        if (extras != nil) {
            request.register(extras!)
        }
        GADInterstitialAd.load(withAdUnitID: "ADMOB_INTERSTITIAL_ID", request: request, completionHandler: { ad, error in
            if let error = error {
                print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                return
            }
            self.googleInterstitial = ad;
            self.googleInterstitial.fullScreenContentDelegate = self;
        })
    }

    func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {}

    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        self.loadInterstitialAd()
    }

    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        self.loadInterstitialAd()
    }
}