जब कोई इंप्रेशन मिलता है, तो GMA Next-Gen SDK उस इंप्रेशन से जुड़ा विज्ञापन रेवेन्यू डेटा उपलब्ध कराता है. इस डेटा का इस्तेमाल, किसी उपयोगकर्ता की लाइफ़टाइम वैल्यू का हिसाब लगाने के लिए किया जा सकता है. इसके अलावा, इस डेटा को अन्य काम के सिस्टम में भी भेजा जा सकता है.
इस गाइड का मकसद, Android ऐप्लिकेशन में इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू का डेटा कैप्चर करने में आपकी मदद करना है.
ज़रूरी शर्तें
- पक्का करें कि आपने AdMob यूज़र इंटरफ़ेस (यूआई) में, इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू की सुविधा चालू की हो.
- सेट अप करें GMA Next-Gen SDK पर क्लिक करें.
इंप्रेशन-लेवल पर विज्ञापन से मिलने वाला रेवेन्यू पाने के लिए, आपको कम से कम एक विज्ञापन फ़ॉर्मैट लागू करना होगा:
पैसे चुकाकर देखे जाने वाले इवेंट का हैंडलर
हर विज्ञापन फ़ॉर्मैट में
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;
}
विज्ञापन दिखाने के लिए चुने गए सोर्स के बारे में ज़्यादा जानने के लिए, विज्ञापन रिस्पॉन्स के बारे में जानकारी पाना लेख पढ़ें.
ऐप्लिकेशन एट्रिब्यूशन पार्टनर (एएपी) इंटिग्रेशन
विज्ञापन से मिलने वाले रेवेन्यू के डेटा को आंकड़ों के प्लैटफ़ॉर्म पर फ़ॉरवर्ड करने के बारे में पूरी जानकारी के लिए, पार्टनर की गाइड देखें:
| Partner SDK |
|---|
| Adjust |
| AppsFlyer |
| Singular |
| Tenjin |
ऐसा हो सकता है कि पार्टनर की गाइड को GMA Next-Gen SDK के हिसाब से अपडेट न किया गया हो.
यहां दिए गए उदाहरणों में, 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 ऑब्जेक्ट का इस्तेमाल करके इंटिग्रेट करना होगा. यहां दिए गए उदाहरण में, JSON ऑब्जेक्ट का इस्तेमाल करके इंप्रेशन लेवल पर रेवेन्यू का डेटा Tenjin को भेजा गया है:
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.
}
}
}लागू करने के सबसे सही तरीके
- विज्ञापन ऑब्जेक्ट बनाने या उसका ऐक्सेस पाने के तुरंत बाद लिसनर सेट करें. साथ ही, विज्ञापन दिखाने से पहले ऐसा ज़रूर करें. इससे यह पक्का किया जाता है कि आपसे किसी भी सशुल्क इवेंट के कॉलबैक न छूटें.
- पैसे चुकाकर दिखाए जाने वाले इवेंट के लिए कॉलबैक फ़ंक्शन को कॉल किए जाने पर, इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू की जानकारी को अपने पसंदीदा Analytics सर्वर पर तुरंत भेजें. इससे यह पक्का होता है कि आपसे गलती से कोई कॉलबैक न छूट जाए. साथ ही, इससे डेटा में अंतर आने से भी बचा जा सकता है.
AdValue
AdValue एक क्लास है. यह विज्ञापन से मिली मॉनेटरी वैल्यू को दिखाती है. इसमें वैल्यू का मुद्रा कोड और सटीक टाइप शामिल होता है. इसे इस तरह से कोड किया जाता है.
| PrecisionType | ब्यौरा |
|---|---|
UNKNOWN |
विज्ञापन की ऐसी वैल्यू जिसकी जानकारी नहीं है. यह तब दिखता है, जब एलटीवी पिंगबैक की सुविधा चालू हो, लेकिन ज़रूरत के मुताबिक डेटा उपलब्ध न हो. |
ESTIMATED |
कुल डेटा से ली गई अनुमानित विज्ञापन वैल्यू. |
PUBLISHER_PROVIDED |
पब्लिशर की ओर से दी गई विज्ञापन वैल्यू, जैसे कि किसी मीडिएशन ग्रुप में मौजूद मैन्युअल सीपीएम. |
PRECISE |
इस विज्ञापन के लिए चुकाए गए पैसे. |
AdMob मीडिएशन के मामले में, AdMob उन विज्ञापन सोर्स के लिए ESTIMATED वैल्यू देने की कोशिश करता है जिन्हें ऑप्टिमाइज़ किया गया है.
जिन विज्ञापन सोर्स को ऑप्टिमाइज़ नहीं किया गया है उनके लिए या ऐसे मामलों में जहां अनुमानित वैल्यू की रिपोर्टिंग के लिए, एग्रीगेट किया गया ज़रूरी डेटा उपलब्ध नहीं है वहां PUBLISHER_PROVIDED वैल्यू दिखाई जाती है.
बिडिंग विज्ञापन स्रोतों से मिले इंप्रेशन को टेस्ट करना
टेस्ट के अनुरोध के ज़रिए, बिडिंग वाले विज्ञापन सोर्स के लिए इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू का इवेंट होने के बाद, आपको सिर्फ़ ये वैल्यू मिलती हैं:
UNKNOWN: यह सटीक होने के टाइप के बारे में बताता है.
0: इससे विज्ञापन की वैल्यू का पता चलता है.
पहले, आपको सटीक टाइप की वैल्यू, UNKNOWN के अलावा कोई और वैल्यू दिख सकती थी. साथ ही, विज्ञापन की वैल्यू 0 से ज़्यादा दिख सकती थी.
टेस्ट विज्ञापन दिखाने का अनुरोध भेजने के बारे में ज़्यादा जानने के लिए, टेस्ट डिवाइस चालू करना लेख पढ़ें.