Gösterim düzeyinde reklam geliri

Bir gösterim gerçekleştiğinde GMA Next-Gen SDK, bu gösterimle ilişkili reklam geliri verilerini sağlar. Bu verileri kullanarak bir kullanıcının yaşam boyu değerini hesaplayabilir veya verileri diğer ilgili sistemlere iletebilirsiniz.

Bu kılavuz, Android uygulamanızda gösterim düzeyinde reklam geliri veri yakalama özelliğini uygulamanıza yardımcı olmak için hazırlanmıştır.

Ön koşullar

Her reklam biçiminin bir etkinlik geri çağırması vardır. onAdPaid Bir reklam etkinliğinin yaşam döngüsü sırasında GMA Next-Gen SDK, gösterim etkinliklerini izler ve işleyiciyi kazanılan bir değerle çağırır.

Aşağıdaki örnekte, ödüllü reklamlar için ücretli etkinlikler işlenmektedir:

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

Özel etkinlik reklam kaynağı adı belirleme

Özel etkinlik reklam kaynakları için AdSourceResponseInfo.name özelliği, Custom event reklam kaynağı adını döndürür. Birden fazla özel etkinlik kullanıyorsanız reklam kaynağı adı, birden fazla özel etkinlik arasında ayrım yapacak kadar ayrıntılı değildir. Belirli bir özel etkinliği bulmak için:

  1. AdSourceResponseInfo.name özelliğini alın.
  2. Benzersiz bir reklam kaynağı adı belirleyin.

Aşağıdaki örnekte, özel bir etkinlik için benzersiz bir reklam kaynağı adı ayarlanmaktadır:

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

Kazanan reklam kaynağı hakkında daha fazla bilgi için Reklam yanıtı hakkında bilgi alma bölümüne bakın.

Uygulama İlişkilendirme Ortakları (AAP) entegrasyonu

Reklam geliri verilerini analiz platformlarına yönlendirme hakkında ayrıntılı bilgi için iş ortağının kılavuzuna bakın:

İş Ortağı SDK'sı
Adjust
AppsFlyer
Singular
Tenjin

İş ortağının kılavuzu, GMA Next-Gen SDK referansını içerecek şekilde güncellenmemiş olabilir.

Aşağıdaki örneklerde, GMA Next-Gen SDK kullanılarak AAP iş ortaklarına gösterim düzeyinde gelir verilerinin nasıl gönderileceği gösterilmektedir:

Ayarla

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

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

AppsFlyer

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

Tekil

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

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

Tenjin

GMA Next-Gen SDK için JSON nesnesi kullanarak entegrasyon yapmanız gerekir. Aşağıdaki örnekte, gösterim düzeyinde gelir verileri bir JSON nesnesi kullanılarak Tenjin'e gönderilmektedir:

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

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

Kullanımla ilgili en iyi uygulamalar

  • Reklam nesnesini oluşturduktan veya nesneye erişim elde ettikten hemen sonra ve kesinlikle reklamı göstermeden önce dinleyiciyi ayarlayın. Bu sayede, ücretli etkinlik geri çağırmalarını kaçırmazsınız.
  • Ücretli etkinlik geri çağırma işlevi çağrıldığında, gösterim düzeyinde reklam geliri bilgilerini hemen tercih ettiğiniz analiz sunucusuna gönderin. Bu sayede, geri çağırmaları yanlışlıkla silmez ve veri tutarsızlıklarını önlersiniz.

AdValue

AdValue, bir reklamdan kazanılan maddi değeri temsil eden bir sınıftır. Değerin para birimi kodu ve kesinlik türü aşağıdaki gibi kodlanır.

PrecisionType Açıklama
UNKNOWN Bilinmeyen bir reklam değeri. Bu, YBD geri pingi etkinleştirildiğinde ancak yeterli veri olmadığında döndürülür.
ESTIMATED Birleştirilmiş verilerden tahmin edilen bir reklam değeridir.
PUBLISHER_PROVIDED Uyumlulaştırma grubundaki manuel BGBM'ler gibi yayıncı tarafından sağlanan reklam değeri.
PRECISE Bu reklam için ödenen kesin değer.

AdMob Uyumlulaştırması'nda AdMob, optimize edilmiş reklam kaynakları için ESTIMATED değeri sağlamaya çalışır. Optimize edilmemiş reklam kaynakları için veya anlamlı bir tahmin raporlamak için yeterli birleştirilmiş veri olmadığında PUBLISHER_PROVIDED değeri döndürülür.

Teklifli sistem reklam kaynaklarından gelen test gösterimleri

Bir teklifli sistem reklam kaynağı için test isteği aracılığıyla gösterim düzeyinde reklam geliri etkinliği gerçekleştiğinde yalnızca aşağıdaki değerleri alırsınız:

  • UNKNOWN: Kesinlik türünü gösterir.
  • 0: Reklam değerini gösterir.
Daha önce kesinlik türünü UNKNOWN dışında bir değer, reklam değerini ise 0 değerinden yüksek olarak görmüş olabilirsiniz.

Test reklamı isteği gönderme hakkında ayrıntılı bilgi için Test cihazlarını etkinleştirme başlıklı makaleyi inceleyin.