รายได้จากโฆษณาระดับการแสดงผล

เลือกแพลตฟอร์ม: Android เลือกใหม่ Android iOS Unity

เมื่อเกิดการแสดงผล GMA Next-Gen SDK จะให้ข้อมูลรายได้จากโฆษณา ที่เชื่อมโยงกับการแสดงผลนั้น คุณสามารถใช้ข้อมูลเพื่อคำนวณมูลค่าตลอดช่วงชีวิตของผู้ใช้ หรือส่งต่อข้อมูลไปยังระบบอื่นๆ ที่เกี่ยวข้องได้

คู่มือนี้มีไว้เพื่อช่วยคุณติดตั้งใช้งานการบันทึกข้อมูลรายได้จากโฆษณาระดับการแสดงผล ในแอป Android

ข้อกำหนดเบื้องต้น

โฆษณาแต่ละรูปแบบมี 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;
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับแหล่งที่มาของโฆษณาที่ชนะได้ที่ดึงข้อมูลเกี่ยวกับการตอบกลับของโฆษณา

การผสานรวม 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

ดูรายละเอียดเกี่ยวกับการส่งคำขอโฆษณาทดสอบได้ที่ เปิดใช้อุปกรณ์ทดสอบ