カスタム イベント

このガイドは、AdMob メディエーションを使用して次の処理を行うパブリッシャーを対象としています。

  • AdMob ユーザー インターフェースで直接サポートされていないネットワークの広告を表示する。
  • 広告の代わりにカスタムビューを表示する。

カスタム イベントを使用すると、カスタム メディエーション アダプタを記述して、広告スペースに任意のビューを配置できます。このプロジェクトのソース全体は、GitHub で入手できます。

事前準備

次のサンプルでは、はじめに AdMob メディエーション内にバナーのカスタム イベントを作成します。 そのためには、AdMob インターフェース経由でアプリの特定のクラスを参照するカスタム イベントを定義し、CustomEventBanner を実装してビューを表示する必要があります。 このサンプルでは、メディエーション ガイドで説明しているサンプル広告ネットワークの広告を表示するカスタム イベントを定義します。

ステップ 1: カスタム イベントを定義する

カスタム イベントは、AdMob インターフェースで定義する必要があります。カスタム イベントを作成する方法は、こちらの手順をご覧ください。

次のスクリーンショットは、カスタム イベント設定の例です。

ステップ 2: バナーをリクエストする

CustomEventBanner を実装するクラスを定義します。このクラスをここでは SampleCustomEventBanner と呼ぶことにします。 広告メディエーション フローでカスタム イベントが選択された場合は、設定で指定したクラス名の requestBannerAd() メソッドがメディエーションによって呼び出されます。 このメソッドで提供されるパラメータを使用して、必要なネットワークに対してインタースティシャル リクエストを行います。

カスタム イベントでは、広告の読み込みに成功または失敗した際に、CustomEventBannerListener インターフェース経由で AdMob メディエーションに通知する必要があります。これを行わないと、カスタム イベントはタイムアウトし、広告メディエーションは次のネットワークに進みます。

ライフサイクル メソッドを必要に応じて実装します。 ユーザーが AdView.pause() メソッドと AdView.resume() メソッドを呼び出すと、AdMob メディエーションによって、それぞれ onPause() アクティビティ イベントと onResume() アクティビティ イベントのアダプタが転送されます。サンプル広告ネットワークでは、一時停止や再開の呼び出しがないため、空の実装を提供しています。アダプタが破棄される際、メディエーションによって可能な限り onDestroy() が呼び出されます。必要なクリーンアップはここで行います。

SampleCustomEventBanner.java 実装の例を次に示します。

public class SampleCustomEventBanner implements CustomEventBanner {

  /** The {@link SampleAdView} representing a banner ad. */
  private SampleAdView sampleAdView;

  /** The event is being destroyed. Perform any necessary cleanup here. */
  @Override
  public void onDestroy() {
    if (sampleAdView != null) {
      sampleAdView.destroy();
    }
  }

  /**
   * The app is being paused. This call is only forwarded to the adapter if the developer
   * notifies AdMob Mediation that the app is being paused.
   */
  @Override
  public void onPause() {
    // The sample ad network doesn't have an onPause method, so it does nothing.
  }

  /**
   * The app is being resumed. This call is only forwarded to the
   * adapter if the developer notifies AdMob Mediation that the app is
   * being resumed.
   */
  @Override
  public void onResume() {
    // The sample ad network doesn't have an onResume method, so it does nothing.
  }

  @Override
  public void requestBannerAd(Context context,
                              CustomEventBannerListener listener,
                              String serverParameter,
                              AdSize size,
                              MediationAdRequest mediationAdRequest,
                              Bundle customEventExtras) {

    sampleAdView = new SampleAdView(context);

    // Assumes that the serverParameter is the AdUnit for the Sample Network.
    sampleAdView.setAdUnit(serverParameter);

    sampleAdView.setSize(new SampleAdSize(size.getWidth(), size.getHeight()));

    // Implement a SampleAdListener and forward callbacks to AdMob Mediation.
    // The callback forwarding is handled by SampleBannerEventFowarder.
    sampleAdView.setAdListener(new SampleCustomBannerEventForwarder(listener, sampleAdView));

    // Make an ad request.
    sampleAdView.fetchAd(createSampleRequest(mediationAdRequest));

  }

  private SampleAdRequest createSampleRequest(MediationAdRequest mediationAdRequest) {
    SampleAdRequest request = new SampleAdRequest();
    request.setTestMode(mediationAdRequest.isTesting());
    request.setKeywords(mediationAdRequest.getKeywords());
    return request;
  }
}

ステップ 3: AdMob メディエーションに通知する

ネットワーク用の広告リスナーを実装し、CustomEventBannerListener で関連するコールバックを呼び出して、AdMob メディエーションにメッセージを返します。 以下に示す SampleCustomBannerEventForwarder クラスでは、SampleAdListener インターフェースを実装し、サンプル広告ネットワークからメディエーションにコールバックを転送しています。 AdMob メディエーションでは、次のコールバックがサポートされています。

メソッド 呼び出すタイミング
onAdLoaded() バナー リクエストが成功したとき
onAdFailedToLoad() バナー リクエストが失敗したとき
onAdClicked() バナーがクリックされたとき
onAdOpened() バナーがフルスクリーン ビューで表示されたとき
onAdClosed() ユーザーがバナーをクリックした後で、アプリに戻るとき
onAdLeftApplication() ユーザーがバナー経由でアプリから離れたとき

すべてのコールバックを AdMob メディエーションに通知する必要があります。

SampleCustomBannerEventForwarder.java 実装の例を次に示します。

public class SampleCustomBannerEventForwarder extends SampleAdListener {
    private CustomEventBannerListener mBannerListener;
    private SampleAdView mAdView;

    /**
     * Creates a new {@code SampleBannerEventForwarder}.
     * @param listener An AdMob Mediation {@link CustomEventBannerListener} that should receive
     *                 forwarded events.
     * @param adView   A {@link SampleAdView}.
     */
    public SampleCustomBannerEventForwarder(
            CustomEventBannerListener listener, SampleAdView adView) {
        this.mBannerListener = listener;
        this.mAdView = adView;
    }

    @Override
    public void onAdFetchSucceeded() {
        mBannerListener.onAdLoaded(mAdView);
    }

    @Override
    public void onAdFetchFailed(SampleErrorCode errorCode) {
        switch (errorCode) {
            case UNKNOWN:
                mBannerListener.onAdFailedToLoad(AdRequest.ERROR_CODE_INTERNAL_ERROR);
                break;
            case BAD_REQUEST:
                mBannerListener.onAdFailedToLoad(AdRequest.ERROR_CODE_INVALID_REQUEST);
                break;
            case NETWORK_ERROR:
                mBannerListener.onAdFailedToLoad(AdRequest.ERROR_CODE_NETWORK_ERROR);
                break;
            case NO_INVENTORY:
                mBannerListener.onAdFailedToLoad(AdRequest.ERROR_CODE_NO_FILL);
                break;
        }
    }

    @Override
    public void onAdFullScreen() {
        mBannerListener.onAdClicked();
        mBannerListener.onAdOpened();
        // Only call onAdLeftApplication if your ad network actually exits the developer's app.
        mBannerListener.onAdLeftApplication();
    }

    @Override
    public void onAdClosed() {
        mBannerListener.onAdClosed();
    }
}

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

インタースティシャルのカスタム イベントを実装するには、バナーのカスタム イベントと同じように、はじめに AdMob メディエーション内にインタースティシャルのカスタム イベントを作成します。次に、CustomEventInterstitial を実装してメディエーションに通知します。このサンプルでも、上記と同様にサンプル広告ネットワークを使用します。

ステップ 1: カスタム イベントを定義する

AdMob インターフェースからインタースティシャルのカスタム イベントを定義できます。[クラス名] には必ずフルパスを入力します。[パラメータ] には、カスタム イベントに実装するネットワークに対して広告リクエストを行うために必要な情報を入力します。

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

CustomEventInterstitial を実装するクラスを定義します。このクラスをここでは SampleCustomEventInterstitial と呼ぶことにします。メディエーション フローでカスタム イベントが選択された場合は、設定で指定したクラス名の requestInterstitialAd() メソッドがメディエーションによって呼び出されます。このメソッドで提供されるパラメータを使用して、必要なネットワークに対してインタースティシャル リクエストを行います。次のサンプルでは、カスタム イベント経由でサンプル広告ネットワークからインタースティシャルをリクエストする方法を示しています。

SampleCustomEventInterstitial.java 実装の例を次に示します。

public class SampleCustomEventInterstitial implements CustomEventInterstitial {

  /** Represents a {@link SampleInterstitial}. */
  private SampleInterstitial sampleInterstitial;

  @Override
  public void requestInterstitialAd(Context context,
                                    CustomEventInterstitialListener listener,
                                    String serverParameter,
                                    MediationAdRequest mediationAdRequest,
                                    Bundle customEventExtras) {
    /**
     * In this method, you should:
     * 1. Create your interstitial ad.
     * 2. Set your ad network's listener.
     * 3. Make an ad request.
     */

    sampleInterstitial = new SampleInterstitial(context);

    // Here we're assuming the serverParameter is the ad unit for the sample ad network.
    sampleInterstitial.setAdUnit(serverParameter);

    // Implement a SampleAdListener and forward callbacks to AdMob Mediation.
    sampleInterstitial.setAdListener(new SampleCustomInterstitialEventForwarder(listener));

    // Make an ad request.
    sampleInterstitial.fetchAd(createSampleRequest(mediationAdRequest));
  }

  /**
   * Helper method to create a {@link SampleAdRequest}.
   * @param mediationAdRequest The mediation request with targeting information.
   * @return The created {@link SampleAdRequest}.
   */
  private SampleAdRequest createSampleRequest(MediationAdRequest mediationAdRequest) {
    SampleAdRequest request = new SampleAdRequest();
    request.setTestMode(mediationAdRequest.isTesting());
    request.setKeywords(mediationAdRequest.getKeywords());
    return request;
  }

  @Override
  public void showInterstitial() {
    // Show your interstitial ad.
    sampleInterstitial.show();
  }
}

インタースティシャルのカスタム イベント インターフェースでは、showInterstitial() メソッドを実装する必要があります。Google Mobile Ads SDK にインタースティシャル広告の表示を要求すると、メディエーションによってこのメソッドが呼び出されます。

ステップ 3: AdMob メディエーションに通知する

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

以下に示す SampleCustomInterstitialEventForwarder クラスでは、SampleAdListener インターフェースを実装し、サンプル広告ネットワークからメディエーションにコールバックを転送しています。

public class SampleCustomInterstitialEventForwarder extends SampleAdListener {
    private CustomEventInterstitialListener mInterstitialListener;

    /**
     * Creates a new {@code SampleInterstitialEventForwarder}.
     * @param listener An AdMob Mediation {@link CustomEventInterstitialListener} that should
     *                 receive forwarded events.
     */
    public SampleCustomInterstitialEventForwarder(CustomEventInterstitialListener listener) {
        this.mInterstitialListener = listener;
    }

    @Override
    public void onAdFetchSucceeded() {
        mInterstitialListener.onAdLoaded();
    }

    @Override
    public void onAdFetchFailed(SampleErrorCode errorCode) {
        switch (errorCode) {
            case UNKNOWN:
                mInterstitialListener.onAdFailedToLoad(AdRequest.ERROR_CODE_INTERNAL_ERROR);
                break;
            case BAD_REQUEST:
                mInterstitialListener.onAdFailedToLoad(AdRequest.ERROR_CODE_INVALID_REQUEST);
                break;
            case NETWORK_ERROR:
                mInterstitialListener.onAdFailedToLoad(AdRequest.ERROR_CODE_NETWORK_ERROR);
                break;
            case NO_INVENTORY:
                mInterstitialListener.onAdFailedToLoad(AdRequest.ERROR_CODE_NO_FILL);
                break;
        }
    }

    @Override
    public void onAdFullScreen() {
        mInterstitialListener.onAdOpened();
        // Only call onAdLeftApplication if your ad network actually exits the developer's app.
        mInterstitialListener.onAdLeftApplication();
    }

    @Override
    public void onAdClosed() {
        mInterstitialListener.onAdClosed();
    }
}

これで、インタースティシャルのカスタム イベントの実装が完了しました。 サンプル全体は GitHub で入手できます。 サンプルは、すでにサポートされている広告ネットワークで使用したり、変更してカスタム インタースティシャル広告を表示したりできます。

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