इंप्रेशन-लेवल पर विज्ञापन से मिलने वाला रेवेन्यू

प्लैटफ़ॉर्म चुनें: Android New-selected Android iOS Unity

जब कोई इंप्रेशन मिलता है, तो GMA Next-Gen SDK विज्ञापन रेवेन्यू डेटा उपलब्ध कराता है जो उस इंप्रेशन से जुड़ा होता है. इस डेटा का इस्तेमाल, किसी उपयोगकर्ता की लाइफ़टाइम वैल्यू का हिसाब लगाने के लिए किया जा सकता है. इसके अलावा, इस डेटा को डाउनस्ट्रीम में, अन्य काम के सिस्टम को भी भेजा जा सकता है.

इस गाइड का मकसद, आपके Android ऐप्लिकेशन में इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू का डेटा कैप्चर करने की सुविधा को लागू करने में आपकी मदद करना है.

ज़रूरी शर्तें

  • पक्का करें कि आपने AdMob यूज़र इंटरफ़ेस (यूआई) में, इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू की सुविधा चालू की हो.

हर विज्ञापन फ़ॉर्मैट में, an 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 दिखाती है. अगर एक से ज़्यादा कस्टम इवेंट का इस्तेमाल किया जाता है, तो विज्ञापन सोर्स का नाम इतना विस्तृत नहीं होता कि एक से ज़्यादा कस्टम इवेंट के बीच अंतर किया जा सके. किसी खास कस्टम इवेंट का पता लगाने के लिए, यह तरीका अपनाएं:

  1. AdSourceResponseInfo.name प्रॉपर्टी पाएं.
  2. विज्ञापन सोर्स के लिए कोई यूनीक नाम सेट करें.

यहां कस्टम इवेंट के लिए, विज्ञापन सोर्स का कोई यूनीक नाम सेट करने का उदाहरण दिया गया है:

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;
}

विज्ञापन सोर्स के बारे में ज़्यादा जानने के लिए, विज्ञापन के जवाब के बारे में जानकारी पाना लेख पढ़ें.

ऐप्लिकेशन एट्रिब्यूशन पार्टनर (एएपी) इंटिग्रेशन

विज्ञापन से मिलने वाले रेवेन्यू का डेटा, Analytics प्लैटफ़ॉर्म पर फ़ॉरवर्ड करने के बारे में पूरी जानकारी पाने के लिए, पार्टनर की गाइड देखें:

पार्टनर का SDK टूल
Adjust
AppsFlyer
Singular
Tenjin

हो सकता है कि पार्टनर की गाइड को GMA Next-Gen SDK के रेफ़रंस के लिए अपडेट न किया गया हो.

यहां दिए गए उदाहरणों में, GMA Next-Gen SDK का इस्तेमाल करके, एएपी पार्टनर को इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू का डेटा भेजने का तरीका बताया गया है:

Adjust

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

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 विज्ञापन की ऐसी वैल्यू जिसके बारे में जानकारी न हो. यह वैल्यू तब दिखती है, जब LTV पिंगबैक की सुविधा चालू हो , लेकिन ज़रूरी डेटा उपलब्ध न हो.
ESTIMATED कुल डेटा से ली गई अनुमानित विज्ञापन वैल्यू.
PUBLISHER_PROVIDED पब्लिशर की ओर से दी गई विज्ञापन वैल्यू, जैसे कि किसी मीडिएशन ग्रुप में मौजूद मैन्युअल सीपीएम.
PRECISE इस विज्ञापन के लिए चुकाई गई सटीक वैल्यू.

AdMob मीडिएशन के मामले में, AdMob, ऑप्टिमाइज़ किए गए विज्ञापन सोर्स के लिए ESTIMATED वैल्यू उपलब्ध कराने की कोशिश करता है. ऑप्टिमाइज़ न किए गए विज्ञापन सोर्स के लिए या ऐसे मामलों में जहां अनुमान की सटीक जानकारी देने के लिए, कुल डेटा उपलब्ध नहीं होता, वहां PUBLISHER_PROVIDED वैल्यू दिखती है.

बिडिंग विज्ञापन सोर्स से मिलने वाले इंप्रेशन को टेस्ट करना

टेस्ट अनुरोध के ज़रिए, बिडिंग विज्ञापन सोर्स के लिए इंप्रेशन-लेवल पर विज्ञापन से मिलने वाले रेवेन्यू का इवेंट होने के बाद, आपको सिर्फ़ ये वैल्यू मिलती हैं:

  • UNKNOWN: यह सटीक जानकारी का टाइप दिखाता है.
  • 0: यह विज्ञापन की वैल्यू दिखाता है.

पहले, आपको सटीक जानकारी का टाइप, UNKNOWN के अलावा कोई दूसरी वैल्यू और विज्ञापन की वैल्यू, 0 से ज़्यादा दिख सकती थी.

टेस्ट विज्ञापन दिखाने का अनुरोध भेजने के बारे में जानने के लिए, टेस्ट डिवाइस चालू करना लेख पढ़ें.