インプレッション単位の広告収益

インプレッションが発生すると、そのインプレッションに関連する広告収益データが Google Mobile Ads SDK によって提供されます。このデータを使用して、ユーザーのライフタイム バリューを計算したり、データをダウンストリームの他の関連システムに転送したりできます。

このガイドでは、Android アプリにインプレッション単位の広告収益データ キャプチャを実装する方法を説明しています。

前提条件

  • Google Mobile Ads SDK 21.1.0 以降をインポートしていること。

各広告フォーマットには OnPaidEventListener があります。Google Mobile Ads SDK は広告イベントのライフサイクル全体でインプレッション イベントを監視しており、インプレッションが発生すると、得られた収益の値とともにハンドラを呼び出します。

次の例では、リワード広告の有料イベントを処理します。

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : AppCompatActivity() {
  private var rewardedAd: RewardedAd? = null
  private final var TAG = "MainActivity"

  override fun onCreate(savedInstanceState: Bundle?) {
    val adRequest = AdRequest.Builder().build()

    RewardedAd.load(this, "AD_UNIT_ID",
      adRequest, object: RewardedAdLoadCallback() {
        override fun onAdLoaded(ad: RewardedAd) {
          rewardedAd = ad
          // Set paid event listener
          rewardedAd.onPaidEventListener = OnPaidEventListener { adValue ->
            // TODO: Send the impression-level ad revenue information to your preferred
            // analytics server directly within this callback.

            // Extract the impression-level ad revenue data.
            val valueMicros = adValue.valueMicros
            val currencyCode = adValue.currencyCode
            val precision = adValue.precisionType

            // Get the ad unit ID.
            val adUnitId = rewardedAd.adUnitId

            val loadedAdapterResponseInfo = rewardedAd.responseInfo.loadedAdapterResponse
            val adSourceName = loadedAdapterResponseInfo.adSourceName
            val adSourceId = loadedAdapterResponseInfo.adSourceId
            val adSourceInstanceName = loadedAdapterResponseInfo.adSourceInstanceName
            val adSourceInstanceId = loadedAdapterResponseInfo.adSourceInstanceId
            val extras = rewardedAd.responseInfo.responseExtras
            val mediationGroupName = extras.getString("mediation_group_name")
            val mediationABTestName = extras.getString("mediation_ab_test_name")
            val mediationABTestVariant = extras.getString("mediation_ab_test_variant")
          }
        }
    })
  }
}

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {
  private RewardedAd rewardedAd;
  private final String TAG = "MainActivity";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    AdRequest adRequest = new AdRequest.Builder().build();

    RewardedAd.load(this, "AD_UNIT_ID",
      adRequest, new RewardedAdLoadCallback(){
        @Override
        public void onAdLoaded(@NonNull RewardedAd ad) {
          rewardedAd = ad;
          // Set paid event listener
          rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
            @Override
            public void onPaidEvent(AdValue adValue) {
              // TODO: Send the impression-level ad revenue information to your
              //preferred analytics server directly within this callback.

              // Extract the impression-level ad revenue data.
              long valueMicros = adValue.getValueMicros();
              String currencyCode = adValue.getCurrencyCode();
              int precision = adValue.getPrecisionType();

              // Get the ad unit ID.
              String adUnitId = rewardedAd.getAdUnitId();
              
              AdapterResponseInfo loadedAdapterResponseInfo = rewardedAd.getResponseInfo().
                  getLoadedAdapterResponseInfo();
              String adSourceName = loadedAdapterResponseInfo.getAdSourceName();
              String adSourceId = loadedAdapterResponseInfo.getAdSourceId();
              String adSourceInstanceName = loadedAdapterResponseInfo.getAdSourceInstanceName();
              String adSourceInstanceId = loadedAdapterResponseInfo.getAdSourceInstanceId();

              Bundle extras = rewardedAd.getResponseInfo().getResponseExtras();
              String mediationGroupName = extras.getString("mediation_group_name");
              String mediationABTestName = extras.getString("mediation_ab_test_name");
              String mediationABTestVariant = extras.getString("mediation_ab_test_variant");
            }
          });
        }
    });
  }
}

広告枠を落札した広告ソースについてさらに詳しい情報が必要な場合は、広告レスポンスに関する情報を取得するをご覧ください。

App Attribution Partner(AAP)との連携

広告収益データを分析プラットフォームに転送する方法について詳しくは、各パートナーのガイドをご覧ください。

パートナー SDK
調整
AppsFlyer
単数形
Tenjin

実装に関するベスト プラクティス

  • リスナーの設定は、広告を表示するよりも前に行う必要があります。広告オブジェクトを作成したら、あるいは広告オブジェクトへのアクセス権を得たら、すぐに済ませましょう。こうすることで、有料イベントのコールバックを逃すことがなくなります。
  • 有料イベント コールバックが呼び出されたらすぐに、ご希望の分析サーバーにインプレッション単位の広告収益情報を送信します。誤ってコールバックを逃すことを防ぎ、データ不一致の発生を回避できます。

AdValue

AdValue は、広告で得られた金銭的価値を表すクラスで、その金銭的価値の通貨コードと、以下に示すエンコードされた精度タイプが含まれます。

PrecisionType 説明
UNKNOWN 広告の価値が不明。LTV Pingback が有効になっているものの、十分なデータがない場合に返されます。
ESTIMATED 集計データから推定された広告の価値。
PUBLISHER_PROVIDED パブリッシャーが指定した広告の価値(メディエーション グループ内の手動 CPM など)。
PRECISE 広告に支払われた正確な金額。

AdMob メディエーションの場合、AdMob は最適化された広告ソースの ESTIMATED 値を提供しようとします。

最適化されていない広告ソースの場合や、意味のある推計を得るのに十分な集計データがない場合は、PUBLISHER_PROVIDED 値が返されます。

入札広告ソースのインプレッションをテストする

テスト リクエストを介して入札広告ソースのインプレッション単位の広告収益イベントが発生すると、次の値のみが返されます。

  • UNKNOWN: 精度タイプを示します。
  • 0: 広告の価値を示します。

以前は、精度タイプが UNKNOWN 以外の値で、広告値が 0 を超えている場合がありました。

テスト広告リクエストの送信の詳細については、テストデバイスを有効にするをご覧ください。