Skip to content

Amazon_Publisher_Services_iOS

AdGeneration edited this page Mar 5, 2021 · 21 revisions

Amazon Publisher Services - Ad Generation Integration [iOS]

Amazon Publisher ServicesとAd Generation SDKをiOSで連携するためのマニュアルとなります。

サービスご利用にあたって

本連携については、Amazon Publisher Servicesの登録がお済みのうえ、行って頂くようお願いいたします。
Amazon Publisher Servicesのドキュメント等、公式サイトよりご確認お願いいたいます。

対応バージョン

iOS 9.0 以降

注意

  • 広告のリフレッシュ(ローテーション)を行う場合はAmazon Publisher Servicesの機能を用いて実装してください。
    • Ad Generationのローテーション及び、連携SDKのアドネットワークのローテーション設定はOFFにしてください。
  • Amazon Publisher Services(DTB SDK)とAmazon Mobile Ad Network SDKの併用はサポート対象外となります。

Ad Generation管理画面での広告枠設定

  1. 対象枠でカスタムタグを作成する。
  2. カスタムタグ認証情報として「Amazon Header Bidding」を選択する。
  3. アドネットワーク名を入力する。こちらは表示にのみ使用されます。
  4. Key/CPMをデフォルト値から変更したい場合は変更します。

Amazon Publisher Services SDKの導入

CocoaPodを使用する(推奨)

  1. 以下の行をプロジェクトのPodfileに追加します。
    pod 'AmazonPublisherServicesSDK', '~> 3.4.4'

  2. pod installを実行します

手動でインストールする

  • 下記のフレームワークを追加してください。
    • DTBiOSSDK.framework
    • AdSupport
    • CoreGraphics
    • CoreTelephony
    • SystemConfiguration
    • CoreLocation

Ad Generation SDKの導入

手動インストールを行う場合にはADG.framework/Resources/ADG-Resources.bundleのプロジェクトへ追加を必ず行ってください。

Amazon Publisher Services SDK(DTB SDK)の初期設定

AppDelegate.mのdidFinishLaunchingWithOptionsにて初期設定を行います。

@import DTBiOSSDK;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // アプリケーションキーを設定する
    [[DTBAds sharedInstance] setAppKey: @"YOUR_APP_KEY"];

    // 下記二つはDTB SDKのバージョンが2.1.2以降の場合、記述が必須です
    [DTBAds sharedInstance].mraidPolicy = CUSTOM_MRAID;
    [DTBAds sharedInstance].mraidCustomVersions = @ [@"1.0", @"2.0"];
    
    // 位置情報の取得を許容する 
    // [[DTBAds sharedInstance] setUseGeoLocation:YES]; 
    
    // 下記二つはアプリリリース時は呼び出さないでください
    // [[DTBAds sharedInstance] setLogLevel:DTBLogLevelAll]; // ログレベル
    // [[DTBAds sharedInstance] setTestMode:YES]; // テストモード
    
    return YES;
}

DTB SDKの初期設定は必ずメインスレッド上で行う必要があります。

バナー広告

importとdelegate protocolの定義

@import DTBiOSSDK;
@import ADG;

@interface ViewController () <DTBAdCallback, ADGManagerViewControllerDelegate>

DTBAdLoaderの生成と広告リクエスト

// width,height,slotidの指定
DTBAdSize *size = [[DTBAdSize alloc] initBannerAdSizeWithWidth:320 height:50 andSlotUUID:@"your_dtb_slot_id"];
DTBAdLoader *adLoader = [DTBAdLoader new];
[adLoader setSizes:size, nil];
[adLoader loadAd:self];

広告リクエスト結果処理

  • DTBSDKが生成するbid情報(DTBAdResponse)の有効期間は10分となります。
  • DTBAdResponseパラメータの付与以外は通常のAd Genrationの広告リクエストと同様です。
// Amazon広告リクエスト成功時
- (void)onSuccess: (DTBAdResponse *)adResponse {
    // Amazon広告リクエスト成功時は
    // DTBAdResponseのパラメータを付与した上でAd Generationの広告のリクエストを行います。
    [self loadAdg:adResponse];
}

// Amazon広告リクエスト失敗時
- (void)onFailure: (DTBAdError)error {
    // Amazon広告リクエスト失敗時は
    // DTBAdResponseのパラメータを付与せずAd Generationの広告のリクエストを行います。
    [self loadAdg:nil];	
}

- (void)loadAdg: (DTBAdResponse *)adResponse {
    // ADGManagerViewControllerクラスのインスタンスとしてself.adgが定義されているものとする
    // self.adViewが広告表示領域であるとする。
    self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"YOUR_ADGENERATION_AD_ID"
                                                             adType:kADG_AdType_Sp
                                                 rootViewController:self];
    [self.adg addAdContainerView:self.adView]; // 広告Viewを配置するViewを指定
    
    // Amazon広告パラメータのセット
    if (adResponse) {
        [self.adg addHeaderBiddingParamsWithAmznAdResponse:adResponse];
    }
    
    self.adg.delegate = self;
    [self.adg loadRequest]; // Ad Generation広告リクエスト
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}

- (void)dealloc {
    // インスタンスの破棄
    self.adg.delegate = nil;
    self.adg = nil;
}

- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController {
    NSLog(@"Received an ad.");
}

- (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController
                                             code:(kADGErrorCode)code {
    NSLog(@"Failed to receive an ad.");
    // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。
    switch (code) {
        case kADGErrorCodeNeedConnection:   // ネットワーク不通
        case kADGErrorCodeExceedLimit:      // エラー多発
        case kADGErrorCodeNoAd:             // 広告レスポンスなし
            break;
        default:
            [adgManagerViewController loadRequest];
            break;
    }
}

- (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController{
    NSLog(@"Did tap ad.");
}

オートリフレッシュ(ローテーション)の実装

  • 広告のオートリフレッシュ(ローテーション)はAd Generationの機能を使わずにDTB SDKの DTBAdLoaderに設定ください。
    Ad Generationのローテーション及び、連携SDKのアドネットワークのローテーション設定はOFFにしてください。

    [adLoader setAutoRefresh:45]; // 45秒毎にリフレッシュを行う
  • 自動更新を必ず停止してください。自動更新を停止する際の推奨場所はviewDidDisappearです。自動更新処理を不適切に使用するとインプレッション数に矛盾が生じる恐れがあります。

    [adLoader stop];

注意:

  • 広告の自動更新処理を停止し、DTBAdLoaderで使用されているリソースを解放することは、重要です。広告の自動更新処理は、明示的に停止しない限り続行されます。その場合、想定外の挙動になり、またインプレッション数が少なくなります。
  • loadAd を呼び出す前に自動更新のプロパティを設定します。loadAdを1回呼び出す際、DTBAdLoader のインスタンスを1つだけ使用してください。また、stop()が呼び出さるとインスタンスを再使用することはできません。
  • onSuccessonFailureコールバック等で、Viewの上に重ねてViewを生成しないでください。新しいViewを作る場合、以前のViewをクリアするようにしてください。
  • オートリフレッシュは60秒がデフォルトであり、20秒未満に設定した場合、自動的に60秒に上書きされます。

DTBAdLoaderの破棄

  • DTBAdLoaderインスタンスが不要になったタイミングでnilのセットをしてください。

    self.adLoader = nil;

インタースティシャル広告

importとdelegate protocolの定義

@import DTBiOSSDK;
@import ADG;

@interface ViewController () <DTBAdCallback, ADGInterstitialDelegate>

DTBAdLoaderの生成と広告リクエスト

// slotidの指定
DTBAdSize *size = [[DTBAdSize alloc] initInterstitialAdSizeWithSlotUUID:@"your_dtb_slot_id"];
DTBAdLoader *adLoader = [DTBAdLoader new];
[adLoader setSizes:size, nil];
[adLoader loadAd:self];

広告リクエスト結果処理

  • DTBSDKが生成するbid情報(DTBAdResponse)の有効期間は10分となります。
  • DTBAdResponseパラメータの付与以外は通常のAd Genrationの広告リクエストと同様です。
  • Amazon Publisher Servicesのインタースティシャルは全画面に表示されるインタースティシャルとなります。
    RTBによる広告配信時も全画面インタースティシャルの表示を行うために、ADGInterstitialisFullScreenプロパティにYESのセットが必要となります。
// Amazon広告リクエスト成功時
- (void)onSuccess: (DTBAdResponse *)adResponse {
    // Amazon広告リクエスト成功時は
    // DTBAdResponseのパラメータを付与した上でAd Generationの広告のリクエストを行う。
    [self loadAdgInterstitial:adResponse];
}

// Amazon広告リクエスト失敗時
- (void)onFailure: (DTBAdError)error {
    // Amazon広告リクエスト失敗時は
    // DTBAdResponseのパラメータを付与せずAd Generationの広告のリクエストを行う。
    [self loadAdgInterstitial:nil];	
}

- (void) loadAdgInterstitial: (DTBAdResponse *)adResponse {
    NSDictionary *adgparam = @{
        @"locationid" : @"YOUR_ADGENERATION_AD_ID",
        @"adtype" : @(kADG_AdType_Sp)
    };
    
    // ADGInterstitialクラスのインスタンスとしてself.interstitialが定義されているものとする
    self.interstitial = [[ADGInterstitial alloc] init];
    [self.interstitial setLocationId:@"your_adgeneration_ad_id"];
    self.interstitial.delegate = self;
    self.interstitial.isFullscreen = YES;
    
    // Amazon広告パラメータのセット
    if(adResponse){
        [self.interstitial addHeaderBiddingParamsWithAmznAdResponse:adResponse];
    }
    [self.interstitial preload];
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    // 広告非表示
    [self.interstitial dismiss];
}

- (void)dealloc {
    self.interstitial.delegate = nil;
    self.interstitial = nil;
}

- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController {
    NSLog(@"Received an ad.");
    [self.interstitial show];
}

- (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController
                                             code:(kADGErrorCode)code {
    NSLog(@"Failed to receive an ad.");
    // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。
    switch (code) {
        case kADGErrorCodeNeedConnection:   // ネットワーク不通
        case kADGErrorCodeExceedLimit:      // エラー多発
        case kADGErrorCodeNoAd:             // 広告レスポンスなし
            break;
        default:
            [adgManagerViewController loadRequest];
            break;
    }
}

- (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController {
    NSLog(@"Did tap ad.");
}

- (void)ADGInterstitialClose {
    NSLog(@"Closed interstitial ads.");
}

テストモード

テストモードを有効にするには、以下のコードを広告リクエストより前に実行してください。

[[DTBAds sharedInstance] setTestMode:YES];

注: テスト広告は属性の資格がないため、本番ではテストコードを忘れずに削除してください。

通信の検証

通信の検証を行う場合は、下記の公式サイトを参考に検証を行ってください。

Sending Artifacts to APS for Verification
Mobile Integration Self-Check Guide

Home

導入マニュアルのドキュメントはコチラに移行しました。

お手数ですがリンクから遷移してください。 https://docs.sdk.ad-generation.jp/

Clone this wiki locally