# Android용 노출 수준 매출 통합

> 노출 수준 매출 (ILR) SDK API를 통합하여 각 노출의 실시간 광고 매출 데이터를 캡처하여 세부 수익화 인사이트를 제공하고 타사 Analytics 플랫폼과 원활하게 통합할 수 있습니다.

## 필수 조건##prerequisites

레벨플레이 SDK 9.5.0 이상을 애플리케이션 올바르게 연동했는지 확인합니다. [Android용 통합 체크리스트를 참고하십시오](/grow/levelplay/sdk/android/integration-checklists.md).

## LevelPlayImpressionDataListener 구현##implement-the-levelplayimpressiondatalistener

레벨플레이 SDK는 표시된 광고에 대해 알려주는 포스트백을 실행합니다. LevelPlayImpressionDataListener는 노출 데이터를 수신하기 위해 구현할 수 있는 선택적 리스너입니다. 이 리스너는 모든 광고 유닛에 대한 정보를 제공하며, 노출 수준 매출 사용하여 다양한 광고를 식별 수 있습니다.

애플리케이션 LevelPlayImpressionDataListener를 추가하려면 레벨플레이 SDK를 초기화하기 전에 리스너를 선언하여 정보 손실을 방지하십시오.

```java
public static void addImpressionDataListener(LevelPlayImpressionDataListener listener)
```

레벨플레이 SDK는 노출 데이터와 관련된 성공적인 포스트백을 리스너에게 알립니다.

```java
public static void addImpressionDataListener(ImpressionDataListener listener){
 
   /**
   광고가 성공적으로 표시되고 노출 데이터가 기록된 경우 호출됨 
   **/
  
}
```

### Impression Listener 설정##set-up-the-impression-listener

`setImpressionDataListener()`를 호출하여 각 광고 오브젝트에 `LevelPlayImpressionDataListener`를 구현하고 설정합니다. 광고 오브젝트 구성하고 로드하거나 표시하기 직후 연결, 부착 노출이 누락되지 않도록 합니다. 각 리스너는 연결된 인스턴스 대해서만 노출을 받습니다.

**Java**

```java
import com.unity3d.mediation.impression.LevelPlayImpressionData;
import com.unity3d.mediation.impression.LevelPlayImpressionDataListener;

// Interstitial
LevelPlayInterstitialAd interstitialAd = new LevelPlayInterstitialAd("adUnitId");
interstitialAd.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Interstitial onImpressionSuccess: " + impressionData);
    }
});

// Rewarded
LevelPlayRewardedAd rewardedAd = new LevelPlayRewardedAd("adUnitId");
rewardedAd.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Rewarded onImpressionSuccess: " + impressionData);
    }
});

// Banner
LevelPlayBannerAdView bannerAdView = new LevelPlayBannerAdView(this, "adUnitId");
bannerAdView.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Banner onImpressionSuccess: " + impressionData);
    }
});
```

**Kotlin**

```kotlin
import com.unity3d.mediation.impression.LevelPlayImpressionData
import com.unity3d.mediation.impression.LevelPlayImpressionDataListener

// Interstitial
val interstitialAd = LevelPlayInterstitialAd("adUnitId")
interstitialAd.setImpressionDataListener(object : LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData: LevelPlayImpressionData) {
        Log.d(태그, "인터스티셜 광고 onImpressionSuccess: $impressionData")
    }
})

// Rewarded
val rewardedAd = LevelPlayRewardedAd("adUnitId")
rewardedAd.setImpressionDataListener(object : LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData: LevelPlayImpressionData) {
        Log.d(태그, "ImpressionSuccess에 보상형 광고: $impressionData")
    }
})

// Banner
val bannerAdView = LevelPlayBannerAdView(this, "adUnitId")
bannerAdView.setImpressionDataListener(object : LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData: LevelPlayImpressionData) {
        Log.d(태그, "ImpressionSuccess에 배너: $impressionData")
    }
})
```

### 노출 데이터 리스너 제거##remove-impression-data-listener

광고 오브젝트에 대한 노출 데이터 수신을 중지하려면 `null`를 `setImpressionDataListener()`에 전달합니다.

**Java**

```java
interstitialAd.setImpressionDataListener(null);
rewardedAd.setImpressionDataListener(null);
bannerAdView.setImpressionDataListener(null);
```

**Kotlin**

```kotlin
interstitialAd.setImpressionDataListener(null)
rewardedAd.setImpressionDataListener(null)
bannerAdView.setImpressionDataListener(null)
```

> **Note:**
>
> 레벨플레이 SDK 7.1.0 릴리스부터 setImpressionDataListener는 지원이 사용 중단 예정 addImpressionDataListener로 대체됩니다.

## ILR 데이터 통합##integrate-the-ilr-data

LevelPlayImpressionDataListener를 구현한 후 전용 BI 툴과 DWH로 노출 데이터를 전송하거나 타사 툴과 연동할 수 있습니다.

> **Note:**
>
> 반환된 데이터에는 null 값이 포함될 수 있습니다. 데이터를 할당하기 전에 잠재적인 크래시를 방지하기 위해 보호를 추가합니다.

각 필드 별도로 참조하거나 allData 메서드를 사용하여 모든 정보를 얻을 수 있습니다.

```java
public void onImpressionSuccess (LevelPlayImpressionData impressionData)
{
  Double  revenue = impressionData.getRevenue();
  String  adNetwork = impressionData.getAdNetwork();
  JSONObject allData =  impressionData.getAllData(); 
}
```

필드 설명 및 유형을 비롯한 사용 가능한 ILR 데이터의 전체 목록은 [Impression Level 매출 SDK API](/grow/levelplay/platform/fundamentals/impression-level-revenue-sdk-api.md)를 참조하십시오.

다음 예시는 Impression Level 매출 SDK API 데이터를 Firebase용 Google Analytics 연동하는 방법을 보여 줍니다. 타사 리포트 툴 또는 자체적인 최적화 툴 및 데이터베이스와 연동하기 위해 필요한 변경 사항을 적용하거나 그대로 사용할 수 있습니다.

> **Note:**
>
> 내부 파라미터가 null 아닌지 확인합니다.

```java
/** 
광고가 성공적으로 표시되고 노출 데이터가 기록된 경우 호출됨 
**/ 
@Override 
public void onImpressionSuccess(LevelPlayImpressionData impressionData) { 
 // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened. 
 // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + impressionData); 
   if (impressionData != null) 
   { 
       Bundle bundle = new Bundle(); 
       bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "LevelPlay");  
       bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork());  
       bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdFormat());   
       bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getInstanceName());
       bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD");  
       bundle.putDouble(FirebaseAnalytics.Param.VALUE, java.util.Objects.requireNonNullElse(impressionData.getRevenue(), 0.0)); // null 값에 대한 보호 추가
       
       mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
   
   } 
}
```
