カスタム イベント

このガイドは、AdMob メディエーション内でバナーおよびインタースティシャルのカスタム イベントのサポートを追加しようとしているパブリッシャーが対象です。 カスタム イベントを使用すると、任意のビューを広告スペースに入れることができます。 カスタム イベントを通じて、メディエーションで直接サポートされていない広告ネットワークでも、アプリケーションを収益化できます。カスタム イベントは、GADCustomEventBanner または GADCustomEventInterstitial プロトコルを通じて実装されます。

事前準備

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

このガイドでは、SampleCustomEventBanner および SampleCustomEventInterstital カスタム イベント クラスを使用してサンプル広告ネットワークからバナーやインタースティシャルを配信する方法について説明します。 サンプル広告ネットワーク SDK は、カスタム イベントの実際の実装がどのようになるかを示す目的で開発されたモック SDK です。 この SDK には、ほとんどの広告ネットワークで提供されている典型的なクラスが含まれています。クラスの詳細については、SDK 実装のサンプル一式をご覧ください。

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

カスタム イベントは AdMob 管理画面で定義する必要があります。 広告ユニットを指定してメディエーションを編集する手順は、こちらのヘルプセンター ガイドをご覧ください。

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

  1. [Custom Event] 画面に移動します。

  2. 画面上の項目に、以下のように入力します。

    Class Name カスタム イベントを実装するクラスの完全修飾名を入力します。
    Label イベントの固有名を入力します。
    Parameter カスタム イベントに引数を渡す場合は、適切な文字列を入力します。

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

バナーをリクエストする

カスタム イベントのバナー リクエストの場合、カスタム イベントのクラスがインスタンス化された直後に requestBannerAd:parameter:label:request: メソッドが呼び出されます。 このメソッドは、何も返しません。 アダプタがネットワーク経由で非同期の広告フェッチを開始することが、前提となっています。 カスタム イベントは、コールバックをリッスンするために、SDK へのデリゲートとして機能する必要があります。

お使いの SDK が、指定された広告サイズをサポートしていない場合やバナー広告をサポートしていない場合は、カスタム イベントのデリゲートの customEventBanner:didFailAd: メソッドを呼び出してください。 serverParameter および serverLabel パラメータは、AdMob フロントエンドでカスタム イベントを作成するときに定義されたパラメータとラベル フィールドに対応します。

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

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];
}

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)
}

カスタム イベントは、広告の受け取りに成功するか失敗すると、カスタム イベントのデリゲートを介してメディエーションを通知する必要があります。 これを行わないと、カスタム イベントはタイムアウトし、メディエーションは次のネットワークに進みます。

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

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

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];
}

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)
}

詳細については、カスタム イベント バナーのサンプル実装を参照してください。

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

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

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

カスタム イベントのインタースティシャル リクエストの場合、カスタム イベントのクラスがインスタンス化された直後に requestInterstitialAdWithParameter:label:request: メソッドが呼び出されます。 このメソッドは、何も返しません。 アダプタがネットワーク経由で非同期の広告フェッチを開始することが、前提となっています。 カスタム イベントは、コールバックをリッスンするために、SDK へのデリゲートとして機能する必要があります。 serverParameter および serverLabel パラメータは、AdMob フロントエンドでカスタム イベントを作成するときに定義されたパラメータとラベル フィールドに対応します。

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

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];
}

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)
}

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

Objective-C

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

Swift

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

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

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

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];
}

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)
}

メッセージをメディエーションに返すと、メディエーション プロセスが続行されます。

詳細については、インタースティシャル カスタム イベントのサンプル実装を参照してください。

フィードバックを送信...