> ## Documentation Index
> Fetch the complete documentation index at: https://beta-guide.daro.so/llms.txt
> Use this file to discover all available pages before exploring further.

# ILRD 사용하기

> DARO Unity SDK에서 impression-level revenue data를 수신하는 방법을 안내합니다.

## 개요

DARO Unity SDK 0.3.0부터 impression-level revenue data, 즉 ILRD를 제공합니다. 광고에서 paid impression이 발생하면 각 광고 인스턴스의 `OnAdRevenuePaid` 이벤트로 수익 정보가 전달됩니다.

## 지원 포맷

* `DaroInterstitialAd`
* `DaroRewardedAd`
* `DaroAppOpenAd`
* `DaroBannerAd`
* `DaroNativeAd`
* `DaroLightPopupAd`

## 이벤트 등록하기

이벤트 시그니처는 모든 포맷에서 동일합니다.

```csharp theme={null}
public event Action<DaroAdInfo, DaroRevenueInfo> OnAdRevenuePaid;
```

예시:

```csharp theme={null}
using System.Globalization;
using Daro;
using UnityEngine;

var ad = new DaroInterstitialAd("YOUR_AD_UNIT_ID");

ad.OnAdRevenuePaid += (info, revenue) =>
{
    Debug.Log(
        $"ILRD: format={info.AdFormat}, " +
        $"adUnitId={info.AdUnitId}, " +
        $"value={revenue.Value.ToString(CultureInfo.InvariantCulture)}, " +
        $"currency={revenue.CurrencyCode}, " +
        $"precision={revenue.Precision}");

    // Send revenue.Value / revenue.CurrencyCode / revenue.Precision
    // to your analytics or LTV pipeline here.
};

ad.Load();
```

## `DaroRevenueInfo` 값

`DaroRevenueInfo`는 다음 값을 포함합니다.

```csharp theme={null}
public sealed class DaroRevenueInfo
{
    public decimal Value { get; }
    public string CurrencyCode { get; }
    public DaroRevenuePrecision Precision { get; }
}
```

`Value`는 해당 impression의 수익 값입니다. DARO 네이티브 SDK에서 fee가 차감된 net revenue가 전달되며, Unity SDK는 이 값을 다시 보정하지 않습니다. 단위는 `CurrencyCode` 기준의 실제 통화 단위입니다. 예를 들어 `0.000012 USD`는 `0.000012` 달러를 의미하며, eCPM 값이 아닙니다.

`CurrencyCode`는 ISO 4217 통화 코드입니다. MAX 디맨드 경로에서는 일반적으로 `"USD"`가 전달됩니다.

`Precision`은 수익 값의 정밀도를 나타냅니다.

```csharp theme={null}
public enum DaroRevenuePrecision
{
    Unknown = 0,
    Estimated = 1,
    PublisherProvided = 2,
    Exact = 3,
}
```

## 주의할 점

* `OnAdRevenuePaid`는 광고 노출 생명주기 이벤트가 아니라 수익 측정 이벤트입니다.
* 모든 impression에서 반드시 revenue event가 발생한다고 가정하면 안 됩니다.
* `OnAdImpression`과 `OnAdRevenuePaid`의 순서는 플랫폼 또는 디맨드 동작에 따라 약간 달라질 수 있습니다.
* 금액 정확도가 중요하면 `float` 대신 `decimal` 또는 문자열 형태로 저장하는 것을 권장합니다.
* Banner처럼 auto-refresh가 있는 포맷은 refresh impression마다 `OnAdRevenuePaid`가 다시 발생할 수 있습니다.

## 공통 핸들러로 관리하기

공통 핸들러로 관리하려면 이렇게 쓸 수 있습니다.

```csharp theme={null}
private void HandleAdRevenuePaid(DaroAdInfo info, DaroRevenueInfo revenue)
{
    var value = revenue.Value.ToString(CultureInfo.InvariantCulture);

    // Example payload:
    // ad_format: info.AdFormat
    // ad_unit_id: info.AdUnitId
    // revenue_value: value
    // currency: revenue.CurrencyCode
    // precision: revenue.Precision
}
```

그리고 각 광고 인스턴스에 연결합니다.

```csharp theme={null}
interstitial.OnAdRevenuePaid += HandleAdRevenuePaid;
rewarded.OnAdRevenuePaid += HandleAdRevenuePaid;
appOpen.OnAdRevenuePaid += HandleAdRevenuePaid;
banner.OnAdRevenuePaid += HandleAdRevenuePaid;
nativeAd.OnAdRevenuePaid += HandleAdRevenuePaid;
lightPopup.OnAdRevenuePaid += HandleAdRevenuePaid;
```
