カスタム イベント

このガイドは、AdMob メディエーション内でバナーおよびインタースティシャルのカスタム イベントを使用することに関心をお持ちのパブリッシャー様を対象としています。

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

前提条件

広告フォーマットにカスタム イベントを組み込むには、事前にその広告フォーマットをアプリに組み込んでおく必要があります。関連するガイドは次のとおりです。

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

このガイドでは、SampleCustomEventBanner および SampleCustomEventInterstital カスタム イベント クラスを使用して、サンプル広告ネットワークでバナーとインタースティシャルを配信する方法について説明します。サンプル広告ネットワーク 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];
}

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

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

インタースティシャルのカスタム イベントの実装は、バナーのカスタム イベントの実装と同様に行います。主な違いは、作成するインタースティシャルのカスタム イベント クラスで、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];
}

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

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

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

ご不明な点がありましたら、Google のサポートページをご覧ください。