バナー広告とインタースティシャル広告のカスタム イベント

このガイドは、AdMob メディエーション内にバナーやインタースティシャルのカスタム イベント対応を追加したいと考えているパブリッシャー様を対象としています。

カスタム イベントを使用すると、広告スペースにご希望のビューを何でも配置できます。また、メディエーションで直接サポートされていない広告ネットワークを使って、アプリを収益化することもできます。カスタム イベントは、GADCustomEventBanner プロトコルか GADCustomEventInterstitial プロトコルを使って実装します。

前提条件

バナーやインタースティシャル広告のカスタム イベントを組み込むには、その広告フォーマットを事前にアプリに組み込む必要があります。その手順については、次の関連ガイドをご覧ください。

サンプル広告ネットワーク

このガイドでは、カスタム イベント クラス SampleCustomEventBannerSampleCustomEventInterstital を使用して、サンプル広告ネットワークからバナーやインタースティシャルを配信する方法について説明します。サンプル広告ネットワークの SDK は、カスタム イベントの現実的な実装方法を示すために開発された演習用の SDK です。この SDK には、ほとんどの広告ネットワークで提供される代表的なイベント クラスが含まれています。これらのクラスの詳細については、サンプル SDK の実装の全記述をご覧ください。

次の例では、まず AdMob メディエーション内にバナーのカスタム イベントを作成します。そのためには、アプリ内のそのクラスを指すカスタム イベントを AdMob の管理画面で定義したうえで、バナーのカスタム イベントを実装し、ビューを返す必要があります。

カスタム イベントを定義する

カスタム イベントは、AdMob 管理画面で定義する必要があります。管理画面の操作方法については、カスタム イベントの作成に関する説明をご覧ください。

ここでは、カスタム イベントの設定例のスクリーンショットを示します。

次の表に、これらのパラメータを指定する方法を示します。

クラス名

カスタム イベントを実装するクラスの完全修飾名を入力します。

クラスを Swift で実装する場合は、クラス名の先頭にアプリやフレームワーク モジュールの名前を付ける必要があります(例: appName.className)。

プロジェクトに複数のターゲットがある場合や、プロジェクト名がターゲット名と異なる場合は、ターゲット名が必要です。ターゲット名がある場合は、appName_targetName.className のようになります。また、英数字以外の文字(ダッシュなど)は必ずアンダースコアに置き換えてください。

詳しくは、こちらの例をご覧ください。

ラベル そのイベントに固有の名前を入力します。
パラメータ カスタム イベントに引数を渡す場合は、適切な文字列を入力します。

バナーをリクエストする

カスタム イベントのバナー リクエストでは、カスタム イベントのクラスがインスタンス化された直後に requestBannerAd:parameter:label:request: メソッドが呼び出されます。このメソッドは、何も返しません。カスタム イベントは、対象ネットワークで非同期広告の取得を開始することを前提としています。カスタム イベントは、SDK へのデリゲートとしてコールバックをリッスンする必要があります。

利用対象の SDK が、所定の広告サイズやバナー広告をサポートしていない場合は、カスタム イベント デリゲートの customEventBanner:didFailAd: メソッドを呼び出します。serverParameter パラメータと serverLabel パラメータは、AdMob 管理画面でカスタム イベントを作成した際に定義した、パラメータ フィールドとラベル フィールドに対応しています。

次に、サンプル広告ネットワークを使用した requestBannerAd:parameter:label:request: の実装例を示します。

Swift

func requestBannerAd(adSize: GADAdSize, parameter serverParameter: String!,
    label serverLabel: String!, request: GADCustomEventRequest!) {
  // Create a banner view with the appropriate size.
  bannerAd = SampleBanner(frame: CGRectMake(
      0, 0, adSize.size.width, adSize.size.height))
  bannerAd.delegate = self
  bannerAd.adUnit = serverParameter
  let adRequest = SampleAdRequest()
  adRequest.testMode = request.isTesting
  adRequest.keywords = request.userKeywords
  bannerAd.fetchAd(adRequest)
}

Objective-C

- (void)requestBannerAd:(GADAdSize)adSize
              parameter:(NSString *)serverParameter
                  label:(NSString *)serverLabel
                request:(GADCustomEventRequest *)request {
  // Create the bannerView with the appropriate size.
  self.bannerAd =
      [[SampleBanner alloc] initWithFrame:CGRectMake(0,
                                                     0,
                                                     adSize.size.width,
                                                     adSize.size.height)];

  self.bannerAd.delegate = self;
  self.bannerAd.adUnit = serverParameter;
  SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
  adRequest.testMode = request.isTesting;
  adRequest.keywords = request.userKeywords;
  [self.bannerAd fetchAd:adRequest];
}

カスタム イベントのリクエストに対して広告ネットワークの追加パラメータを送信する

リクエストと一緒に広告ネットワークの追加パラメータを送信してカスタム イベントで処理するには、GADRequest registerAdNetworkExtras: 関数を使用します。GADCustomEventRequest.additionalParameters プロパティに値を入力するには、GADCustomEventExtras のインスタンス(GADAdNetworkExtras プロトコルに準拠するインスタンス)を作る必要があります。追加パラメータを渡すには GADCustomEventExtras setExtras:forLabel: を呼び出し、追加パラメータを辞書として渡し、AdMob 管理画面で定義したカスタム イベントのラベルも渡します。

次のコード スニペットでは、先ほど定義した SampleCustomEvent ラベルに SampleExtra パラメータを渡す方法を示します。

Swift

let request = GADRequest()
let extras = GADCustomEventExtras()
extras.setExtras(["SampleExtra": true], forLabel: "SampleCustomEvent")
request.register(extras)

Objective-C

GADRequest *request = [GADRequest request];
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
[extras setExtras:@{@"SampleExtra": @(YES)} forLabel:@"SampleCustomEvent"];
[request registerAdNetworkExtras:extras];

カスタム イベント リクエストに対して GADCustomEventExtras のインスタンスを登録しない場合、GADCustomEventRequestadditionalParameters プロパティは nil になります。

AdMob メディエーションに通知する

利用するネットワーク用の広告リスナーを実装し、カスタム イベントのデリゲートで関連するコールバックを呼び出して、メディエーションにメッセージを返します。次の例では、サンプル広告ネットワークの SampleBannerAdDelegate インターフェースを実装して、これらのメッセージを送信しています。

Swift

/// Type property for Sample Ad Network custom event error domain.
static let customEventErrorDomain = "com.google.CustomEvent"

// Sent when banner ad has loaded.
func bannerDidLoad(banner: SampleBanner!) {
  delegate.customEventBanner(self, didReceiveAd: banner)
}

// Sent when banner has failed to load.
func banner(banner: SampleBanner!, didFailToLoadAdWithErrorCode error: SampleErrorCode) {
  let nsError = NSError(domain: SampleCustomEventBanner.customEventErrorDomain,
      code: error.rawValue, userInfo: nil)
  delegate.customEventBanner(self, didFailAd: nsError)
}

// Sent when a banner is clicked and an external application is launched
func bannerWillLeaveApplication(banner: SampleBanner!) {
  delegate.customEventBannerWasClicked(self)
  delegate.customEventBannerWillLeaveApplication(self)
}

Objective-C

/// Constant for Sample Ad Network custom event error domain.
static NSString *const customEventErrorDomain = @"com.google.CustomEvent";

// Sent when banner ad has loaded.
- (void)bannerDidLoad:(SampleBanner *)banner {
  [self.delegate customEventBanner:self didReceiveAd:banner];
}

// Sent when banner has failed to load.
- (void)banner:(SampleBanner *)banner
    didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
  NSError *error = [NSError errorWithDomain:customEventErrorDomain
                                       code:errorCode
                                   userInfo:nil];
  [self.delegate customEventBanner:self didFailAd:error];
}

// Sent when a banner is clicked and an external application is launched.
- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
  [self.delegate customEventBannerWasClicked:self];
  [self.delegate customEventBannerWillLeaveApplication:self];
}

AdMob メディエーションでは、次のコールバックがサポートされています。

メソッド 呼び出すタイミング
customEventBanner:didReceiveAd: バナー リクエストが成功したとき
customEventBanner:didFailAd: バナー リクエストが失敗したとき
customEventBannerWillPresentModal: バナーがフルスクリーン モーダルビューで表示されようとしているとき
customEventBannerWillDismissModal: バナーがフルスクリーン モーダルビューで閉じようとしているとき
customEventBannerDidDismissModal: バナーがフルスクリーン モーダルビューで閉じたとき
customEventBannerWillLeaveApplication: ユーザーがバナー経由でアプリから離れたとき
customEventBannerWasClicked: バナーがクリックされたとき

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

メソッド 呼び出すタイミング
customEventInterstitial:DidReceiveAd: インタースティシャル リクエストが成功したとき
customEventInterstitial:didFailAd: インタースティシャル リクエストが失敗したとき
customEventInterstitialWillPresent: インタースティシャルがフルスクリーン モーダルビューで表示されようとしているとき
customEventInterstitialWillDismiss: インタースティシャル広告がフルスクリーン モーダルビューで閉じようとしているとき
customEventInterstitialDidDismiss: インタースティシャルがフルスクリーン モーダルビューで閉じたとき
customEventInterstitialWillLeaveApplication: ユーザーがインタースティシャル経由でアプリから離れたとき
customEventInterstitialWasClicked: インタースティシャルがクリックされたとき

詳しくは、バナーのカスタム イベントの実装サンプルをご覧ください。

インタースティシャルのカスタム イベント

インタースティシャルのカスタム イベントの実装は、バナーのカスタム イベントの実装と似ています。主な違いは、作成するインタースティシャル カスタム イベント クラスで、GADCustomEventBanner プロトコルではなく GADCustomEventInterstitial プロトコルを実装する必要がある点です。

カスタム イベントを定義する

カスタム イベントは、AdMob 管理画面で定義する必要があります。管理画面の操作方法については、カスタム イベントの作成に関する説明をご覧ください。

ここでは、カスタム イベントの設定例のスクリーンショットを示します。

次の表に、これらのパラメータを指定する方法を示します。

クラス名

カスタム イベントを実装するクラスの完全修飾名を入力します。

クラスを Swift で実装する場合は、クラス名の先頭にアプリやフレームワーク モジュールの名前を付ける必要があります(例: appName.className)。

プロジェクトに複数のターゲットがある場合や、プロジェクト名がターゲット名と異なる場合は、ターゲット名が必要です。ターゲット名がある場合は、appName_targetName.className のようになります。また、英数字以外の文字(ダッシュなど)は必ずアンダースコアに置き換えてください。

詳しくは、こちらの例をご覧ください。

ラベル そのイベントに固有の名前を入力します。
パラメータ カスタム イベントに引数を渡す場合は、適切な文字列を入力します。

インタースティシャルをリクエストする

カスタム イベントのインタースティシャル リクエストでは、カスタム イベントのクラスがインスタンス化された直後に requestInterstitialAdWithParameter:label:request: メソッドが呼び出されます。このメソッドは、何も返しません。想定では、カスタム イベントが対象ネットワークで非同期広告の取得を始めます。

カスタム イベントは、SDK へのデリゲートとしてコールバックをリッスンする必要があります。serverParameter パラメータと serverLabel パラメータは、AdMob 管理画面でカスタム イベントを作成した際に定義した、パラメータ フィールドとラベル フィールドに対応しています。

次に、サンプル広告ネットワークを使用した requestInterstitialAdWithParameter:label:request: の実装例を示します。

Swift

func requestInterstitialAdWithParameter(serverParameter: String!,
    label serverLabel: String!, request: GADCustomEventRequest!) {
  interstitial = SampleInterstitial()
  interstitial.delegate = self
  interstitial.adUnit = serverParameter
  let adRequest = SampleAdRequest()
  adRequest.testMode = request.isTesting
  adRequest.keywords = request.userKeywords
  interstitial.fetchAd(adRequest)
}

Objective-C

- (void)requestInterstitialAdWithParameter:(NSString *)serverParameter
                                     label:(NSString *)serverLabel
                                   request:(GADCustomEventRequest *)request {
  self.interstitial = [[SampleInterstitial alloc] init];
  self.interstitial.delegate = self;
  self.interstitial.adUnit = serverParameter;
  SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
  adRequest.testMode = request.isTesting;
  adRequest.keywords = request.userKeywords;
  [self.interstitial fetchAd:adRequest];
}

GADCustomEventInterstitial カスタム イベント プロトコルでは、presentFromRootViewController: メソッドの実装が必要になります。次のように、インタースティシャルを表示するよう Mobile Ads SDK に伝えると、メディエーションでこのメソッドが呼び出されます。

Swift

func presentFromRootViewController(rootViewController: UIViewController!) {
  if interstitial.interstitialLoaded {
    interstitial.show()
  }
}

Objective-C

- (void)presentFromRootViewController:(UIViewController *)rootViewController {
  if ([self.interstitial isInterstitialLoaded]) {
    [self.interstitial show];
  }
}

カスタム イベントのリクエストに対して広告ネットワークの追加パラメータを送信する

リクエストと一緒に広告ネットワークの追加パラメータを送信してカスタム イベントで処理するには、GADRequest registerAdNetworkExtras: 関数を使用します。GADCustomEventRequest.additionalParameters プロパティに値を入力するには、GADCustomEventExtras のインスタンス(GADAdNetworkExtras プロトコルに準拠するインスタンス)を作る必要があります。追加パラメータを渡すには GADCustomEventExtras setExtras:forLabel: を呼び出し、追加パラメータを辞書として渡し、AdMob 管理画面で定義したカスタム イベントのラベルも渡します。

次のコード スニペットでは、先ほど定義した SampleCustomEvent ラベルに SampleExtra パラメータを渡す方法を示します。

Swift

let request = GADRequest()
let extras = GADCustomEventExtras()
extras.setExtras(["SampleExtra": true], forLabel: "SampleCustomEvent")
request.register(extras)

Objective-C

GADRequest *request = [GADRequest request];
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
[extras setExtras:@{@"SampleExtra": @(YES)} forLabel:@"SampleCustomEvent"];
[request registerAdNetworkExtras:extras];

カスタム イベント リクエストに対して GADCustomEventExtras のインスタンスを登録しない場合、GADCustomEventRequestadditionalParameters プロパティは nil になります。

AdMob メディエーションに通知する

バナーのカスタム イベントと同様に、ネットワークの広告リスナーを実装して、メディエーションにメッセージを返します。次の例は、サンプル広告ネットワークの SampleInterstitialAdDelegate インターフェースの実装方法を示しています。

Swift

/// Type property for Sample Ad Network custom event error domain.
static let customEventErrorDomain = "com.google.CustomEvent"

// Sent when an interstitial ad has loaded.
func interstitialDidLoad(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialDidReceiveAd(self)
}

// Sent when interstitial ad has failed to load.
func interstitial(interstitial: SampleInterstitial!,
    didFailToLoadAdWithErrorCode errorCode: SampleErrorCode) {
  let nsError = NSError(domain: SampleCustomEventInterstitial.customEventErrorDomain,
      code: errorCode.rawValue, userInfo: nil)
  delegate.customEventInterstitial(self, didFailAd: nsError)
}

// Sent when an interstitial is about to be shown.
func interstitialWillPresentScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWillPresent(self)
}

// Sent when an interstitial is about to be dismissed.
func interstitialWillDismissScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWillDismiss(self)
}

// Sent when an interstitial has been dismissed.
func interstitialDidDismissScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialDidDismiss(self)
}

// Sent when an interstitial is clicked and an external application is launched.
func interstitialWillLeaveApplication(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWasClicked(self)
  delegate.customEventInterstitialWillLeaveApplication(self)
}

Objective-C

/// Constant for Sample Ad Network custom event error domain.
static NSString *const customEventErrorDomain = @"com.google.CustomEvent";

// Sent when an interstitial ad has loaded.
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialDidReceiveAd:self];
}

// Sent when an interstitial ad has failed to load.
- (void)interstitial:(SampleInterstitial *)interstitial
    didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
  NSError *error = [NSError errorWithDomain:customEventErrorDomain
                                       code:errorCode
                                   userInfo:nil];
  [self.delegate customEventInterstitial:self didFailAd:error];
}

// Sent when an interstitial is about to be shown.
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWillPresent:self];
}

// Sent when an interstitial is about to be dismissed.
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWillDismiss:self];
}

// Sent when an interstitial has been dismissed.
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialDidDismiss:self];
}

// Sent when an interstitial is clicked and an external application is launched.
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWasClicked:self];
  [self.delegate customEventInterstitialWillLeaveApplication:self];
}

メディエーションにメッセージを返すことで、メディエーションのフローを続行できます。

詳しくは、インタースティシャル カスタム イベントの実装サンプルをご覧ください。