Amazonモバイル広告iOS APIとメディエーションSDKを併用する方法


Amazonモバイル広告iOS APIとメディエーションSDKを併用する方法

Amazonモバイル広告ネットワークのバナー広告とインタースティシャル広告は、優れたメディエーターSDKを利用して取得することもできます。統合に関する一般的なガイドラインを以下に示します。

複数のSDKからの広告の読み込み

Amazonモバイル広告APIは、ほかの広告SDKと組み合わせて使用できます。最初に、Amazonモバイル広告ネットワークを確認することを推奨します。Amazonの広告を読み込む前に、AmazonAdViewDelegateから、成功と失敗のオプションコールバックを実装してください。こうすると、Amazonモバイル広告ネットワークから広告を使用できない場合に、adViewDidFailToLoadコールバックメソッドを使用して別の広告SDKを呼び出すことができます。

最初にAmazon Ad Networkから広告を読み込むプログラムの単純な例を以下に示します。読み込みに失敗すると、別のSDKを介して2回目の広告リクエストを実行します。


public class SimpleAdActivity extends Activity implements AdListener
{
    - (void)viewDidLoad {
      [super viewDidLoad];

      // 広告を読み込みます
      // サイズ320x50のAmazonAdViewインスタンスを作成します。
      self.amazonAdView = [AmazonAdView amazonAdViewWithAdSize:AmazonAdSize_320x50];

      // adOptionsを設定します。
      AmazonAdOptions *options = [AmazonAdOptions options]; options.isTestRequest = YES;

      // ViewControllerをデリゲートに登録してコールバックを受信します。
      amazonAdView.delegate = self;

      // loadAdを呼び出します
      [amazonAdView loadAd:options];
    }
}

AmazonAdViewDelegateプロトコルをViewController内に実装する方法を以下に示します。ユーザーが広告をクリックしたときにブラウザビューなどのモーダルビューを表示/非表示にするためにViewControllerが使用されます。このViewControllerを​AmazonAdViewが認識できるように、viewControllerForPresentingModelViewプロトコルメソッドを実装する必要があります。また、オプションのadViewDidLoadコールバックメソッド内で、必要に応じてAmazonAdViewを親ビューに追加することもできます。

// #pragma mark AmazonAdViewDelegate
// @required
- (UIViewController *)viewControllerForPresentingModalView {
  return self;
}

- (void) adViewDidLoad:(AmazonAdView *)view {
  NSLog(@"広告が読み込まれました");
  if (!self.hasAmazonAdView) {
    [self.otherSDKAdView removeFromSuperview];
  }

  // viewControllerのビューにAmazonAdViewを追加します。
  [self.view addSubView:self.amazonAdView];
  self.hasAmazonAdView = YES;
}

- (void)adViewDidFailToLoad:(AmazonAdView *)view withError:(AmazonAdError *)error {
  NSLog(@"広告を読み込めませんでした。エラーコード%d: %@", error.errorCode, error.errorDescription);
  if (self.hasAmazonAdView) {
    [self.amazonAdView removeFromSuperView];
  }
  // 別のSDKのビュー用のadRequestを作成し、それをこのビューに追加します。
  [self.view addSubView:otherSDKAdView];
}

カスタムイベントを使用してDFPと統合する

Amazonモバイル広告APIを統合するには、GADCustomEventBannerプロトコルに準拠したクラスにより、Amazon広告を読み込むrequestBannerAd:parameter:label:request:メソッドを実装する必要があります。

Amazon広告ネットワークからバナー広告を読み込むDFPバナーの例に基づくコードの抜粋を以下に示します。

#pragma mark GADCustomEventBanner impl

- (void)requestBannerAd:(GADAdSize)adSize
              parameter:(NSString *)serverParameter
                  label:(NSString *)serverLabel
                request:(GADCustomEventRequest *)request
{
    // 前提:adSizeが、Amazon広告ネットワークで使用できる広告サイズのいずれかに一致すること
    // 使用可能な全サイズについては、AmazonAdOptions.hを参照してください
    // サイズが一致しない場合は、Amazon広告サイズを明示的に指定する必要があります
    amazonAdView = [AmazonAdView amazonAdViewWithAdSize:adSize.size];
    amazonAdView.delegate = self;

    // テスト広告を読み込みます
    AmazonAdOptions *options = [AmazonAdOptions options];
    options.isTestRequest = YES;
    [amazonAdView loadAd:options];
}

#pragma mark AmazonAdViewDelegate impl

- (UIViewController *)viewControllerForPresentingModalView
{
    return self;
}

- (void) adViewDidLoad:(AmazonAdView *)view
{
    // 適切な場所にAmazon広告ビューを配置します。
    // この例では、Google広告が既に画面上部にあるため、画面下部に配置します。
    self.amazonAdView.frame = CGRectMake(0, self.view.frame.size.height - amazonAdView.frame.size.height,
                                         self.amazonAdView.frame.size.width, self.amazonAdView.frame.size.height);

    [self.view addSubview:self.amazonAdView];
    NSLog(@"Amazon広告が読み込まれました");
    [self.delegate customEventBanner:self didReceiveAd:amazonAdView];
}

- (void)adViewDidFailToLoad:(AmazonAdView *)view withError:(AmazonAdError *)error
{
    NSLog(@"Amazon広告の読み込みが失敗しました。エラーコード%d: %@", error.errorCode, error.errorDescription);
    NSError *err = [NSError errorWithDomain:@"Amazon広告エラー" code:error.errorCode userInfo:nil];
    [self.delegate customEventBanner:self didFailAd:err];
}

- (void)adViewWillExpand:(AmazonAdView *)view
{
    NSLog(@"Amazon広告は展開します");
    [self.delegate customEventBannerWillPresentModal:self];
}

- (void)adViewDidCollapse:(AmazonAdView *)view
{
    NSLog(@"Amazon広告が折りたたまれました");
    [self.delegate customEventBannerDidDismissModal:self];
}