เมื่อเกิดการแสดงผล GMA Next-Gen SDK จะให้ข้อมูลรายได้จากโฆษณา ที่เชื่อมโยงกับการแสดงผลนั้น คุณสามารถใช้ข้อมูลเพื่อคำนวณมูลค่าตลอดช่วงชีวิตของผู้ใช้ หรือส่งต่อข้อมูลไปยังระบบอื่นๆ ที่เกี่ยวข้องได้
คู่มือนี้มีไว้เพื่อช่วยคุณติดตั้งใช้งานการบันทึกข้อมูลรายได้จากโฆษณาระดับการแสดงผล ในแอป Android
ข้อกำหนดเบื้องต้น
- ตรวจสอบว่าคุณได้ เปิดใช้ฟีเจอร์รายได้จากโฆษณาระดับการแสดงผล ใน UI ของ AdMob แล้ว
- ตั้งค่า GMA Next-Gen SDK
ก่อนที่จะได้รับรายได้จากโฆษณาระดับการแสดงผล คุณต้องใช้รูปแบบโฆษณาอย่างน้อย 1 รูปแบบต่อไปนี้
ตัวแฮนเดิลเหตุการณ์แบบเสียค่าใช้จ่าย
โฆษณาแต่ละรูปแบบมี
onAdPaid
การเรียกกลับเหตุการณ์
ในวงจรของเหตุการณ์โฆษณา GMA Next-Gen SDK จะตรวจสอบเหตุการณ์การแสดงผลและเรียกใช้ตัวแฮนเดิลด้วยมูลค่าที่ได้รับ
ตัวอย่างต่อไปนี้จัดการเหตุการณ์ที่ชำระเงินสำหรับโฆษณาที่มีการให้รางวัล
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");
}
});
ระบุชื่อแหล่งที่มาของโฆษณาเหตุการณ์ที่กำหนดเอง
สําหรับแหล่งที่มาของโฆษณาเหตุการณ์ที่กําหนดเอง พร็อพเพอร์ตี้ AdSourceResponseInfo.name
จะแสดงชื่อแหล่งที่มาของโฆษณา Custom event หากคุณใช้เหตุการณ์ที่กำหนดเองหลายรายการ ชื่อแหล่งที่มาของโฆษณาจะมีความละเอียดไม่เพียงพอที่จะแยกความแตกต่างระหว่างเหตุการณ์ที่กำหนดเองหลายรายการ หากต้องการค้นหาเหตุการณ์ที่กําหนดเองที่เฉพาะเจาะจง ให้ทําดังนี้
- รับพร็อพเพอร์ตี้
AdSourceResponseInfo.name - ตั้งชื่อแหล่งที่มาของโฆษณาที่ไม่ซ้ำกัน
ตัวอย่างต่อไปนี้จะตั้งชื่อแหล่งที่มาของโฆษณาที่ไม่ซ้ำกันสำหรับเหตุการณ์ที่กำหนดเอง
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;
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับแหล่งที่มาของโฆษณาที่ชนะได้ที่ดึงข้อมูลเกี่ยวกับการตอบกลับของโฆษณา
การผสานรวม App Attribution Partner (AAP)
โปรดดูรายละเอียดทั้งหมดเกี่ยวกับการส่งต่อข้อมูลรายได้จากโฆษณาไปยังแพลตฟอร์มข้อมูลวิเคราะห์ ในคู่มือของพาร์ทเนอร์
| Partner SDK |
|---|
| Adjust |
| AppsFlyer |
| Singular |
| Tenjin |
คู่มือของพาร์ทเนอร์อาจยังไม่อัปเดตเพื่ออ้างอิงถึง GMA Next-Gen SDK
ตัวอย่างต่อไปนี้แสดงวิธีส่งข้อมูลรายได้ระดับการแสดงผลไปยังพาร์ทเนอร์ AAP โดยใช้ GMA Next-Gen SDK
ปรับ
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)
}
}เอกพจน์
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
สำหรับ GMA Next-Gen SDK คุณต้องผสานรวมโดยใช้ออบเจ็กต์ JSON ตัวอย่างต่อไปนี้ จะส่งข้อมูลรายได้ระดับการแสดงผลไปยัง Tenjin โดยใช้ออบเจ็กต์ 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.
}
}
}แนวทางปฏิบัติแนะนำสำหรับการนำไปใช้
- ตั้งค่า Listener ทันทีเมื่อสร้างหรือได้รับสิทธิ์เข้าถึงออบเจ็กต์โฆษณา และก่อนแสดงโฆษณา ซึ่งจะช่วยให้คุณไม่พลาด การเรียกกลับของกิจกรรมแบบชำระเงิน
- ส่งข้อมูลรายได้จากโฆษณาระดับการแสดงผลไปยังเซิร์ฟเวอร์การวิเคราะห์ที่คุณต้องการทันทีเมื่อมีการเรียกใช้การเรียกกลับของเหตุการณ์แบบชำระเงิน วิธีนี้ช่วยให้มั่นใจได้ว่าคุณจะไม่พลาดการเรียกกลับโดยไม่ได้ตั้งใจและหลีกเลี่ยงความคลาดเคลื่อนของข้อมูล
AdValue
AdValue คือคลาสที่แสดงมูลค่าที่เป็นตัวเงินที่ได้รับจากโฆษณา
รวมถึงรหัสสกุลเงินของมูลค่าและประเภทความแม่นยำที่เข้ารหัสดังนี้
| PrecisionType | คำอธิบาย |
|---|---|
UNKNOWN |
มูลค่าโฆษณาที่ไม่รู้จัก ระบบจะแสดงผลเมื่อเปิดใช้การรายงานผล Conversion ของ LTV แต่มีข้อมูลไม่เพียงพอ |
ESTIMATED |
มูลค่าโฆษณาโดยประมาณจากข้อมูลรวม |
PUBLISHER_PROVIDED |
ผู้เผยแพร่โฆษณาเป็นผู้ระบุมูลค่าโฆษณา เช่น CPM ที่กําหนดเองในกลุ่มสื่อกลาง |
PRECISE |
มูลค่าที่แน่นอนในการชำระสำหรับโฆษณานี้ |
ในกรณีของสื่อกลาง AdMob นั้น AdMob จะพยายาม
ระบุESTIMATEDค่าสำหรับแหล่งที่มาของโฆษณาที่
เพิ่มประสิทธิภาพแล้ว
สําหรับแหล่งที่มาของโฆษณาที่ไม่ได้เพิ่มประสิทธิภาพ หรือในกรณีที่มีข้อมูลรวมไม่เพียงพอที่จะรายงานค่าประมาณที่มีความหมาย ระบบจะแสดงค่า PUBLISHER_PROVIDED
ทดสอบการแสดงผลจากแหล่งที่มาของโฆษณาซึ่งใช้การเสนอราคา
หลังจากเหตุการณ์รายได้จากโฆษณาระดับการแสดงผลเกิดขึ้นสำหรับ แหล่งที่มาของโฆษณาที่เสนอราคาผ่านคำขอทดสอบ คุณจะได้รับเฉพาะค่าต่อไปนี้
UNKNOWN: ระบุประเภทความแม่นยำ
0: ระบุมูลค่าโฆษณา
ก่อนหน้านี้ คุณอาจเห็นประเภทความแม่นยำเป็นค่าอื่นที่ไม่ใช่
UNKNOWN และมูลค่าโฆษณามากกว่า 0
ดูรายละเอียดเกี่ยวกับการส่งคำขอโฆษณาทดสอบได้ที่ เปิดใช้อุปกรณ์ทดสอบ