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
- Pastikan Anda telah mengaktifkan fitur pendapatan iklan di tingkat tayangan iklan di UI AdMob.
- Siapkan GMA Next-Gen SDK.
Sebelum dapat menerima pendapatan iklan di tingkat tayangan iklan, Anda harus menerapkan setidaknya satu format iklan:
Pengendali peristiwa berbayar
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:
- Dapatkan properti
AdSourceResponseInfo.name. - 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.