リワード広告アダプタを実装する

メディエーション アダプタは、Google Mobile Ads SDK からメッセージとリクエストを受け取り、それらのリクエストを実行するために第三者ネットワーク SDK と通信します。

このガイドは、Google モバイル広告メディエーション用のリワード広告メディエーション アダプタの構築を検討している広告ネットワークを対象としています。以下のコード スニペットでは、デモ目的でサンプル SDK を使用しています。このサンプル SDK 用に作成されたアダプタの完全な実装は、Androidメディエーション プロジェクトで確認できます。このガイドでは、アダプタのビルド方法について説明します。

アダプタのクラス名とサーバー パラメータを定義する

AdMob メディエーション プラットフォームを介してメディエーションされる広告ネットワークでは通常、パブリッシャーを識別するために 1 つ以上の識別子が必要です。こうした識別子はサーバー パラメータとして表され、AdMob 管理画面でメディエーションで使用する第三者広告ネットワークを設定する際に定義されます。

メディエーション アダプタを開発する前に、アダプタのクラス名と、広告ネットワークへのアクセス権を取得するために必要なその他のパラメータを Google に提供する必要があります。

アダプタクラスを実装する

最初のステップは、Adapter 抽象クラスを実装することです。

...
import com.google.android.gms.ads.mediation.Adapter;
...

public class SampleAdapter extends Adapter {
 ...
}

この変更により、クラスに以下で説明するいくつかのメソッドが実装されるようになります。

バージョン番号を報告する

アダプタは、アダプタ自体のバージョンと第三者 SDK のバージョンの両方を Google Mobile Ads SDK に報告する必要があります。バージョンは、 VersionInfoを使用して報告されます。

Google のオープンソースおよびバージョン対応のアダプタは、4 桁のアダプタ バージョン スキームを使用しますが、 VersionInfo使用できる数字は 3 桁のみです。この問題を回避するには、次に示すように、最後の 2 桁をパッチ バージョンにまとめることをおすすめします。

...
import com.google.android.gms.ads.VersionInfo;
...

public class SampleAdapter extends Adapter implements SampleRewardedAdListener {
  ...
  @Override
  public VersionInfo getVersionInfo() {
    String versionString = BuildConfig.VERSION_NAME;
    String[] splits = versionString.split("\\.");

    if (splits.length >= 4) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }

  @Override
  public VersionInfo getSDKVersionInfo() {
    String versionString = SampleAdRequest.getSDKVersion();
    String[] splits = versionString.split("\\.");

    if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }
  ...
}

アダプターを初期化する

アプリが Google Mobile Ads SDK を初期化すると、AdMob 管理画面で、そのアプリ用に設定されているすべてのアダプタに対して initialize() が呼び出されます。

List<MediationConfiguration> 引数は、AdMob 管理画面で広告ネットワーク用に設定されたすべてのプレースメントに関する情報を提供します。この情報を使用して、広告ネットワーク SDK を初期化します。広告ネットワーク SDK を初期化したら、initialize() 呼び出しで指定された InitializationCompleteCallback 引数で onInitializationSucceeded() メソッドまたは onInitializationFailed() メソッドを呼び出して、初期化の成功または失敗を Google Mobile Ads SDK に通知します。

...
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationConfiguration;
...

public class SampleAdapter extends Adapter {
  ...
  @Override
  public void initialize(
      Context context,
      InitializationCompleteCallback initializationCompleteCallback,
      List<MediationConfiguration> mediationConfigurations) {
    if (context == null) {
      initializationCompleteCallback.onInitializationFailed(
          "Initialization Failed: Context is null.");
      return;
    }

    // The Sample SDK doesn't have an initialization method, so this example
    // immediately reports a success callback.
    initializationCompleteCallback.onInitializationSucceeded();
  }
  ...
}

リワード広告をリクエストする

loadRewardedAd() メソッドを使用して、リワード広告をリクエストします。MediationAdLoadCallback への参照を保持します。これにより、広告の読み込みの成功または失敗を Google Mobile Ads SDK に報告できます。

MediationRewardedAdCallback オブジェクトは、onSuccess() が呼び出されると利用可能になります。このオブジェクトは、クリックや付与された報酬などの他の広告イベントをリレーするために後で使用します。

...
import com.google.ads.mediation.sample.sdk.SampleAdRequest;
import com.google.ads.mediation.sample.sdk.SampleRewardedAd;
import com.google.ads.mediation.sample.sdk.SampleRewardedAdListener;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
...

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...

  /**
   * A MediationAdLoadCallback that handles any callback when a Sample rewarded
   * ad finishes loading.
   */
  private MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallBack;

  /**
   * Represents a SampleRewardedAd.
   */
  private SampleRewardedAd sampleRewardedAd;

  /**
   * Used to forward rewarded video ad events to the Google Mobile Ads SDK..
   */
  private MediationRewardedAdCallback rewardedAdCallback;

  ...

  // Hold a reference to the MediationAdLoadCallback object to report ad load
  // events to the Google Mobile Ads SDK.
  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
          mediationAdLoadCallback) {
    adLoadCallBack = mediationAdLoadCallback;
    MediationRewardedAdConfiguration adConfiguration = mediationRewardedAdConfiguration;

    String adUnitId = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);

    sampleRewardedAd = new SampleRewardedAd(adUnitId);
    SampleAdRequest request = new SampleAdRequest();
    sampleRewardedAd.setListener(this);
    sampleRewardedAd.loadAd(request);
  }

  // Hold a reference to the MediationRewardedAdCallback object to report ad
  // lifecycle events to the Google Mobile Ads SDK.
  @Override
  public void onRewardedAdLoaded() {
    rewardedAdCallback = mediationAdLoadCallBack.onSuccess(this);
  }

  @Override
  public void onRewardedAdFailedToLoad(SampleErrorCode error) {
    mediationAdLoadCallBack.onFailure(error.toString());
  }
  ...
}

広告を表示する

Google Mobile Ads SDK は、広告の読み込み成功が通知された後、いつでもアダプタの showAd() メソッドを呼び出す可能性があります。アダプタがリワード広告を表示します。なんらかの理由で広告を表示できない場合は、onAdFailedToShow() コールバックを呼び出します。

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void showAd(Context context) {
    if (!(context instanceof Activity)) {
      rewardedAdCallback.onAdFailedToShow(
          "An activity context is required to show Sample rewarded ad.");
      return;
    }
    Activity activity = (Activity) context;

    if (!sampleRewardedAd.isAdAvailable()) {
      rewardedAdCallback.onAdFailedToShow("No ads to show.");
      return;
    }
    sampleRewardedAd.showAd(activity);
  }
  ...
}

広告イベントを Mobile Ads SDK にレポートする

広告を表示した後、アダプタは広告の読み込み成功時に提供された MediationRewardedAdCallback オブジェクトを使用して、広告ライフサイクル イベントを Google Mobile Ads SDK に適宜報告する必要があります。

通常、これらのコールバックは、広告ネットワーク SDK によって呼び出されたコールバック メソッドから転送されます。この例では、サンプル SDK のコールバックを実装し、MediationRewardedAdCallback で利用できるコールバックにマッピングしています。

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void onAdRewarded(final String rewardType, final int amount) {
    RewardItem rewardItem =
        new RewardItem() {
          @Override
          public String getType() {
            return rewardType;
          }

          @Override
          public int getAmount() {
            return amount;
          }
        };
    rewardedAdCallback.onUserEarnedReward(rewardItem);
  }

  @Override
  public void onAdClicked() {
    rewardedAdCallback.reportAdClicked();
  }

  @Override
  public void onAdFullScreen() {
    rewardedAdCallback.onAdOpened();
    rewardedAdCallback.onVideoStart();
    rewardedAdCallback.reportAdImpression();
  }

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

  @Override
  public void onAdCompleted() {
    rewardedAdCallback.onVideoComplete();
  }
  ...
}

Google Mobile Ads SDK に報告される広告イベントの詳細は次のとおりです。

広告イベント 説明
onAdOpened() 広告が開かれることを Google Mobile Ads SDK に通知します。
onVideoStart() リワード広告が再生されたことを Google Mobile Ads SDK に通知します。
reportAdImpression() 広告でインプレッションが発生したことを Google Mobile Ads SDK に通知します。
onVideoComplete() リワード広告の再生が終了したことを Google Mobile Ads SDK に通知します。
onUserEarnedReward() ユーザーが報酬を獲得したことを Google Mobile Ads SDK に通知します。
reportAdClicked() 広告がクリックされたことを Google Mobile Ads SDK に通知します。
onAdClosed() 広告が閉じられたことを Google Mobile Ads SDK に通知します。
onAdFailedToShow() 広告の表示に失敗したことを Google Mobile Ads SDK に通知します。