# Unity 노출 수준의 매출 통합

> Impression Level 매출 (ILR) 솔루션을 사용하여 타사 Analytics 플랫폼과 연동하여 각 노출의 매출 데이터를 추적할 수 있습니다.

## 필수 조건##prerequisites

레벨플레이 SDK 9.5.0 이상을 애플리케이션 올바르게 연동했는지 확인합니다. [Unity 패키지 통합](/grow/levelplay/sdk/unity/package-integration.md)을 참고하십시오.

노출 수준 매출(ILR) SDK 기능 및 필수 조건에 대한 자세한 내용은 [노출 수준 매출 서버 측 API](/grow/levelplay/platform/api/impression-level-revenue-server-side.md)를 참조하십시오.

## 노출 이벤트 구현##implement-the-impression-event

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

애플리케이션 ImpressionData 리스너를 추가하려면 레벨플레이 SDK를 초기화하기 전에 리스너를 선언하여 정보 손실을 방지해야 합니다.

레벨플레이 SDK는 백그라운드 스레드 콜백 트리거하여 노출 데이터 포스트백이 성공적으로 수행되었음을 리스너에게 알립니다.

```cs
// This event is triggered on a background thread, not the Unity main thread.
LevelPlay.OnImpressionDataReady += ImpressionDataReadyEvent;
private void ImpressionDataReadyEvent(LevelPlayImpressionData impressionData){}
```

### 노출 이벤트 설정##set-up-the-impression-event

각 광고 오브젝트의 `OnAdImpressionDataReady` 구독 광고 오브젝트 생성하고 로드하거나 표시하기 직후 구독 노출을 놓치지 않도록 합니다. 각 이벤트 해당 광고 인스턴스 대해서만 노출을 제공합니다.

> **Note:**
>
> `OnAdImpressionDataReady`는 Unity 메인 스레드가 아닌 백그라운드 스레드에서 호출됩니다.

```cs
LevelPlayInterstitialAd interstitialAd = new LevelPlayInterstitialAd("adUnitId");
interstitialAd.OnAdImpressionDataReady += OnInterstitialImpressionDataReady;

void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Interstitial OnAdImpressionDataReady: {impressionData}");
}

LevelPlayRewardedAd rewardedAd = new LevelPlayRewardedAd("adUnitId");
rewardedAd.OnAdImpressionDataReady += OnRewardedImpressionDataReady;

void OnRewardedImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Rewarded OnAdImpressionDataReady: {impressionData}");
}

LevelPlayBannerAd bannerAd = new LevelPlayBannerAd("adUnitId");
bannerAd.OnAdImpressionDataReady += OnBannerImpressionDataReady;

void OnBannerImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Banner OnAdImpressionDataReady: {impressionData}");
}
```

## 노출 이벤트 제거##remove-the-impression-event

광고 오브젝트에 대한 노출 데이터 수신을 중지하려면 `-=`를 구독 취소합니다.

```cs
interstitialAd.OnAdImpressionDataReady -= OnInterstitialImpressionDataReady;
rewardedAd.OnAdImpressionDataReady -= OnRewardedImpressionDataReady;
bannerAd.OnAdImpressionDataReady -= OnBannerImpressionDataReady;
```

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

노출 이벤트 구독 후에는 자체 BI 툴과 DWH로 노출 데이터를 전송하거나 타사 툴과 통합할 수 있습니다.

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

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

```cs
private void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData)
{
   string allData = impressionData.AllData;
   string adNetwork = impressionData.AdNetwork;
   double? revenue = impressionData.Revenue;
}
```

필드 설명 및 유형을 비롯한 사용 가능한 ILR 데이터의 전체 목록은 [노출 수준 매출 서버 측 API](/grow/levelplay/platform/api/impression-level-revenue-server-side.md)를 참조하십시오.

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

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

```cs
private void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData) {
    Debug.Log("unity-script: ImpressionDataReadyEvent impressionData = " + impressionData);
    if (impressionData != null) {
        Firebase.Analytics.Parameter[] AdParameters = {
            new Firebase.Analytics.Parameter("ad_platform", "LevelPlay"),
            new Firebase.Analytics.Parameter("ad_source", impressionData.AdNetwork),
            new Firebase.Analytics.Parameter("ad_format", impressionData.AdFormat),
            new Firebase.Analytics.Parameter("ad_unit_name", impressionData.InstanceName),
            new Firebase.Analytics.Parameter("currency", "USD"),
            new Firebase.Analytics.Parameter("value", impressionData.Revenue ?? 0) // null 값에 대한 보호 추가
        };
        Firebase.Analytics.FirebaseAnalytics.LogEvent("custom_ad_impression", AdParameters);
    }
}
```
