Pendapatan iklan di tingkat tayangan iklan

Saat tayangan iklan terjadi, GMA Next-Gen SDK memberikan data pendapatan iklan yang terkait dengan tayangan iklan tersebut. Anda dapat menggunakan data ini untuk menghitung nilai seumur hidup pengguna, atau meneruskan data ke sistem lain yang relevan.

Panduan ini dimaksudkan untuk membantu Anda menerapkan pengambilan data pendapatan iklan tingkat tayangan iklan di aplikasi Android Anda.

Prasyarat

Setiap format iklan memiliki callback peristiwa onAdPaid. Selama siklus proses peristiwa iklan, GMA Next-Gen SDK memantau peristiwa tayangan iklan dan memanggil handler dengan nilai yang diperoleh.

Contoh berikut menangani peristiwa berbayar untuk iklan reward:

Kotlin

ad.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(adValue: AdValue) {
      // 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 precisionType = adValue.precisionType

      val loadedAdSourceResponseInfo = ad.getResponseInfo().loadedAdSourceResponseInfo
      val adSourceName = loadedAdSourceResponseInfo?.name
      val adSourceId = loadedAdSourceResponseInfo?.id
      val adSourceInstanceName = loadedAdSourceResponseInfo?.instanceName
      val adSourceInstanceId = loadedAdSourceResponseInfo?.instanceId
      val extras = ad.getResponseInfo().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

ad.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // 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 = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();
        PrecisionType precisionType = value.getPrecisionType();

        AdSourceResponseInfo loadedAdSourceResponseInfo =
            ad.getResponseInfo().getLoadedAdSourceResponseInfo();
        String adSourceName = loadedAdSourceResponseInfo.getName();
        String adSourceId = loadedAdSourceResponseInfo.getId();
        String adSourceInstanceName = loadedAdSourceResponseInfo.getInstanceName();
        String adSourceInstanceId = loadedAdSourceResponseInfo.getInstanceId();

        Bundle extras = ad.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");
      }
    });

Mengidentifikasi nama sumber iklan peristiwa kustom

Untuk sumber iklan peristiwa kustom, properti AdSourceResponseInfo.name menampilkan nama sumber iklan Custom event. Jika Anda menggunakan beberapa peristiwa kustom, nama sumber iklan tidak cukup terperinci untuk membedakan beberapa peristiwa kustom. Untuk menemukan peristiwa kustom tertentu, lakukan:

  1. Dapatkan properti AdSourceResponseInfo.name.
  2. Tetapkan nama sumber iklan yang unik.

Contoh berikut menetapkan nama sumber iklan unik untuk peristiwa kustom:

Kotlin

private fun getUniqueAdSourceName(loadedAdapterResponseInfo: AdSourceResponseInfo): String {
  var adSourceName = loadedAdapterResponseInfo.name
  if (adSourceName == "Custom Event") {
    if (
      loadedAdapterResponseInfo.adapterClassName ==
        "com.google.ads.mediation.sample.customevent.SampleCustomEvent"
    ) {
      adSourceName = "Sample Ad Network (Custom Event)"
    }
  }
  return adSourceName
}

Java

private String getUniqueAdSourceName(@NonNull AdSourceResponseInfo loadedAdapterResponseInfo) {
  String adSourceName = loadedAdapterResponseInfo.getName();
  if (adSourceName.equals("Custom Event")) {
    if (loadedAdapterResponseInfo
        .getAdapterClassName()
        .equals("com.google.ads.mediation.sample.customevent.SampleCustomEvent")) {
      adSourceName = "Sample Ad Network (Custom Event)";
    }
  }
  return adSourceName;
}

Untuk mengetahui informasi selengkapnya tentang sumber iklan pemenang, lihat Mengambil informasi tentang respons iklan.

Integrasi Partner Atribusi Aplikasi (AAP)

Untuk mengetahui detail lengkap tentang meneruskan data pendapatan iklan ke platform analisis, lihat panduan partner:

Partner SDK
Adjust
AppsFlyer
Singular
Tenjin

Panduan partner mungkin belum diperbarui untuk mereferensikan GMA Next-Gen SDK.

Contoh berikut menunjukkan cara mengirim data pendapatan tingkat tayangan iklan ke partner AAP menggunakan GMA Next-Gen SDK:

Sesuaikan

Java

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // Send ad revenue info to Adjust.
        AdjustAdRevenue adRevenue = new AdjustAdRevenue("admob_sdk");
        adRevenue.setRevenue(value.getValueMicros() / 1000000.0, value.getCurrencyCode());
        if (rewardedAd.getResponseInfo().getLoadedAdSourceResponseInfo() != null) {
          adRevenue.setAdRevenueNetwork(
              rewardedAd.getResponseInfo().getLoadedAdSourceResponseInfo().getName());
        }
        Adjust.trackAdRevenue(adRevenue);
      }
    });

Kotlin

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      // Send ad revenue info to Adjust.
      val adRevenue = AdjustAdRevenue("admob_sdk")
      adRevenue.setRevenue(value.valueMicros / 1000000.0, value.currencyCode)
      val loadedAdSourceResponseInfo = rewardedAd.getResponseInfo().loadedAdSourceResponseInfo
      loadedAdSourceResponseInfo?.let { adRevenue.setAdRevenueNetwork(it.name) }
      Adjust.trackAdRevenue(adRevenue)
    }
  }

AppsFlyer

Java

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        long valueMicros = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();

        AFAdRevenueData adRevenueData =
            new AFAdRevenueData(
                "AdMob Mediation", // monetizationNetwork
                MediationNetwork.GOOGLE_ADMOB, // mediationNetwork
                currencyCode, // currencyIso4217Code
                (double) valueMicros // revenue
                );

        Map<String, Object> additionalParameters = new HashMap<>();
        additionalParameters.put(COUNTRY, "US");
        additionalParameters.put(AD_UNIT, AD_UNIT_ID);
        additionalParameters.put(AD_TYPE, AdFormat.REWARDED);

        AppsFlyerLib.getInstance().logAdRevenue(adRevenueData, additionalParameters);
      }
    });

Kotlin

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      val valueMicros = value.valueMicros
      val currencyCode = value.currencyCode

      val adRevenueData =
        AFAdRevenueData(
          "AdMob Mediation", // monetizationNetwork
          MediationNetwork.GOOGLE_ADMOB, // mediationNetwork
          currencyCode, // currencyIso4217Code
          valueMicros.toDouble(), // revenue
        )

      val additionalParameters: MutableMap<String?, Any?> = HashMap()
      additionalParameters[COUNTRY] = "US"
      additionalParameters[AD_UNIT] = AD_UNIT_ID
      additionalParameters[AD_TYPE] = AdFormat.REWARDED

      appsflyer.logAdRevenue(adRevenueData, additionalParameters)
    }
  }

Singular

Java

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // Convert revenue from micros to standard units.
        double revenue = value.getValueMicros() / 1000000.0;
        String currency = value.getCurrencyCode();

        // Validate ad revenue data before sending.
        if (revenue > 0 && !currency.isEmpty()) {
          SingularAdData adData = new SingularAdData("AdMob", currency, revenue);
          Singular.adRevenue(adData);
        }
      }
    });

Kotlin

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      // Convert revenue from micros to standard units.
      val revenue = value.valueMicros / 1000000.0
      val currency = value.currencyCode

      // Validate ad revenue data before sending.
      if (revenue > 0 && currency.isNotEmpty()) {
        val adData = SingularAdData("AdMob", currency, revenue)
        Singular.adRevenue(adData)
      }
    }
  }

Tenjin

Untuk GMA Next-Gen SDK, Anda harus melakukan integrasi menggunakan objek JSON. Contoh berikut mengirimkan data pendapatan tingkat tayangan iklan ke Tenjin menggunakan objek JSON:

Java

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        ResponseInfo responseInfo = rewardedAd.getResponseInfo();

        // Extract the impression-level ad revenue data.
        long valueMicros = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();
        PrecisionType precisionType = value.getPrecisionType();

        JSONObject json = new JSONObject();
        try {
          json.put("ad_unit_id", AD_UNIT_ID);
          json.put("currency_code", currencyCode);
          json.put("response_id", responseInfo.getResponseId());
          json.put("value_micros", valueMicros);
          if (responseInfo.getLoadedAdSourceResponseInfo() != null) {
            json.put(
                "mediation_adapter_class_name",
                responseInfo.getLoadedAdSourceResponseInfo().getAdapterClassName());
          }
          json.put("precision_type", precisionType);

          tenjinInstance.eventAdImpressionAdMob(json);
        } catch (JSONException e) {
          // Handle error.
        }
      }
    });

Kotlin

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      val responseInfo = rewardedAd.getResponseInfo()

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

      val json = JSONObject()
      try {
        json.put("ad_unit_id", AD_UNIT_ID)
        json.put("currency_code", currencyCode)
        json.put("response_id", responseInfo.responseId)
        json.put("value_micros", valueMicros)
        responseInfo.loadedAdSourceResponseInfo?.let {
          json.put("mediation_adapter_class_name", it.adapterClassName)
        }
        json.put("precision_type", precisionType)

        tenjinInstance.eventAdImpressionAdMob(json)
      } catch (_: JSONException) {
        // Handle error.
      }
    }
  }

Praktik terbaik penerapan

  • Tetapkan pemroses segera setelah Anda membuat atau mendapatkan akses ke objek iklan, dan pastikan sebelum menampilkan iklan. Hal ini memastikan Anda tidak melewatkan callback acara berbayar apa pun.
  • Kirim informasi pendapatan iklan di tingkat tayangan iklan ke server analisis pilihan Anda segera saat callback peristiwa berbayar dipanggil. Hal ini memastikan Anda tidak secara tidak sengaja membatalkan panggilan balik dan menghindari perbedaan data.

AdValue

AdValue adalah class yang merepresentasikan nilai uang yang diperoleh untuk iklan, termasuk kode mata uang nilai dan jenis presisinya yang dienkode sebagai berikut.

PrecisionType Deskripsi
UNKNOWN Nilai iklan yang tidak diketahui. Respons ini ditampilkan saat pingback LTV diaktifkan, tetapi data yang tersedia tidak mencukupi.
ESTIMATED Nilai iklan yang diperkirakan dari data gabungan.
PUBLISHER_PROVIDED Nilai iklan yang diberikan penayang, seperti CPM manual dalam grup mediasi.
PRECISE Nilai akurat yang dibayarkan untuk iklan ini.

Dalam kasus Mediasi AdMob, AdMob mencoba memberikan nilai ESTIMATED untuk sumber iklan yang dioptimalkan. Untuk sumber iklan yang tidak dioptimalkan, atau jika tidak ada cukup data gabungan untuk melaporkan estimasi yang bermakna, nilai PUBLISHER_PROVIDED akan ditampilkan.

Menguji tayangan iklan dari sumber iklan bidding

Setelah peristiwa pendapatan iklan di tingkat tayangan iklan terjadi untuk sumber iklan bidding melalui permintaan pengujian, Anda hanya akan menerima nilai berikut:

  • UNKNOWN: menunjukkan jenis presisi.
  • 0: menunjukkan nilai iklan.

Sebelumnya, Anda mungkin melihat jenis presisi sebagai nilai selain UNKNOWN dan nilai iklan lebih dari 0.

Untuk mengetahui detail tentang cara mengirim permintaan iklan pengujian, lihat Mengaktifkan perangkat pengujian.