노출 수준 광고 수익

노출이 발생하면 Google 모바일 광고 SDK가 해당 노출과 연결된 광고 수익 데이터를 제공합니다. 이 데이터를 사용하여 사용자의 평생 가치를 계산하거나 데이터 다운스트림을 다른 관련 시스템으로 전달할 수 있습니다.

이 가이드에서는 Android 앱에서 노출 수준 광고 수익 데이터의 포착을 구현하는 방법을 설명합니다.

기본 요건

  • Google 모바일 광고 SDK 21.1.0 이상을 가져옵니다.

각 광고 형식에는 OnPaidEventListener가 있습니다. 광고 이벤트의 수명 주기 동안 Google 모바일 광고 SDK가 노출 이벤트를 모니터링하고 획득한 값으로 핸들러를 호출합니다.

다음 예에서는 보상형 광고의 유료 이벤트를 처리합니다.

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : AppCompatActivity() {
  private var rewardedAd: RewardedAd? = null
  private final var TAG = "MainActivity"

  override fun onCreate(savedInstanceState: Bundle?) {
    val adRequest = AdRequest.Builder().build()

    RewardedAd.load(this, "AD_UNIT_ID",
      adRequest, object: RewardedAdLoadCallback() {
        override fun onAdLoaded(ad: RewardedAd) {
          rewardedAd = ad
          // Set paid event listener
          rewardedAd.onPaidEventListener = OnPaidEventListener { adValue ->
            // TODO: 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 precision = adValue.precisionType

            // Get the ad unit ID.
            val adUnitId = rewardedAd.adUnitId

            val loadedAdapterResponseInfo = rewardedAd.responseInfo.loadedAdapterResponse
            val adSourceName = loadedAdapterResponseInfo.adSourceName
            val adSourceId = loadedAdapterResponseInfo.adSourceId
            val adSourceInstanceName = loadedAdapterResponseInfo.adSourceInstanceName
            val adSourceInstanceId = loadedAdapterResponseInfo.adSourceInstanceId
            val extras = rewardedAd.responseInfo.responseExtras
            val mediationGroupName = extras.getString("mediation_group_name")
            val mediationABTestName = extras.getString("mediation_ab_test_name")
            val mediationABTestVariant = extras.getString("mediation_ab_test_variant")
          }
        }
    })
  }
}

자바

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {
  private RewardedAd rewardedAd;
  private final String TAG = "MainActivity";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    AdRequest adRequest = new AdRequest.Builder().build();

    RewardedAd.load(this, "AD_UNIT_ID",
      adRequest, new RewardedAdLoadCallback(){
        @Override
        public void onAdLoaded(@NonNull RewardedAd ad) {
          rewardedAd = ad;
          // Set paid event listener
          rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
            @Override
            public void onPaidEvent(AdValue adValue) {
              // TODO: 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 = adValue.getValueMicros();
              String currencyCode = adValue.getCurrencyCode();
              int precision = adValue.getPrecisionType();

              // Get the ad unit ID.
              String adUnitId = rewardedAd.getAdUnitId();
              
              AdapterResponseInfo loadedAdapterResponseInfo = rewardedAd.getResponseInfo().
                  getLoadedAdapterResponseInfo();
              String adSourceName = loadedAdapterResponseInfo.getAdSourceName();
              String adSourceId = loadedAdapterResponseInfo.getAdSourceId();
              String adSourceInstanceName = loadedAdapterResponseInfo.getAdSourceInstanceName();
              String adSourceInstanceId = loadedAdapterResponseInfo.getAdSourceInstanceId();

              Bundle extras = rewardedAd.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");
            }
          });
        }
    });
  }
}

낙찰된 광고 소스에 대한 자세한 내용은 광고 응답에 관한 정보 가져오기를 참고하세요.

앱 기여 분석 파트너 (AAP) 통합

광고 수익 데이터를 분석 플랫폼으로 전달하는 방법에 대해 자세히 알아보려면 파트너 가이드를 읽어보세요.

파트너 SDK
Adjust
AppsFlyer
Singular
Tenjin

구현 권장사항

  • 광고 객체를 만들거나 광고 객체에 액세스할 수 있게 되면 즉시 리스너를 설정하세요. 광고 게재 전에 설정해야 합니다. 이렇게 하면 유료 이벤트 콜백이 누락되지 않습니다.
  • 유료 이벤트 콜백이 호출되는 시점에 노출 수준 광고 수익 정보를 원하는 분석 서버로 즉시 전송하세요. 이렇게 하면 의도치 않은 콜백 누락이 발생하지 않으며, 데이터 불일치를 방지할 수 있습니다.

AdValue

AdValue는 광고에서 획득한 금전적 가치를 나타내는 클래스입니다(예: 값의 통화 코드, 아래와 같이 인코딩된 정밀도 유형).

PrecisionType 설명
UNKNOWN 알 수 없는 광고 값입니다. LTV 핑백이 사용 설정되었지만 사용 가능한 데이터가 충분하지 않은 경우 반환됩니다.
ESTIMATED 합산 데이터에서 예상되는 광고 값입니다.
PUBLISHER_PROVIDED 미디에이션 그룹의 수동 CPM처럼 게시자가 제공한 광고 값입니다.
PRECISE 광고에 지불된 정확한 값입니다.

AdMob 미디에이션의 경우 AdMob은 최적화된 광고 소스에 대해 ESTIMATED 값을 제공하려고 합니다.

최적화되지 않은 광고 소스의 경우 또는 의미 있는 추정치를 보고할 만큼 충분한 집계 데이터가 없는 경우 PUBLISHER_PROVIDED 값이 반환됩니다.

입찰 광고 소스의 노출수 테스트

테스트 요청을 통해 입찰 광고 소스에 노출 수준 광고 수익 이벤트가 발생하면 다음 값만 수신됩니다.

  • UNKNOWN: 정밀도 유형을 나타냅니다.
  • 0: 광고 가치를 나타냅니다.

이전에는 정밀도 유형이 UNKNOWN이 아닌 값으로 표시되고 광고 값이 0보다 클 수 있었습니다.

테스트 광고 요청을 보내는 방법에 관한 자세한 내용은 테스트 기기 사용 설정을 참고하세요.