> ## 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.

# 리워드 비디오 광고

> Unity 프로젝트에서 DARO 리워드 비디오 광고를 구현하는 방법을 알아봅니다.

## 리워드 비디오 광고 형태 소개

* 사용자가 광고 시청을 선택하고, 시청 완료 후 보상을 받는 광고입니다.
* 보상 지급은 반드시 `OnEarnedReward` 이벤트에서 처리하세요.

***

## 광고 연동하기

<Steps>
  <Step title="광고 인스턴스 생성">
    ```csharp theme={null}
    private DaroRewardedAd ad;

    ad = new DaroRewardedAd("your-rewarded-ad-unit-id");
    ```
  </Step>

  <Step title="이벤트 핸들러 등록">
    ```csharp theme={null}
    ad.OnAdLoaded += info => Debug.Log("rewarded loaded");
    ad.OnAdFailedToLoad += error => Debug.LogWarning(error.Message);
    ad.OnEarnedReward += (info, reward) =>
    {
        Debug.Log($"earned {reward.Amount} {reward.RewardType}");
    };
    ```
  </Step>

  <Step title="광고 로드">
    ```csharp theme={null}
    ad.Load();
    ```
  </Step>

  <Step title="광고 표시">
    ```csharp theme={null}
    if (ad != null && ad.IsReady())
    {
        ad.SetCustomData("user=12345");
        ad.Show();
    }
    ```
  </Step>

  <Step title="광고 해제">
    ```csharp theme={null}
    ad?.Dispose();
    ad = null;
    ```
  </Step>
</Steps>

***

## Example

```csharp expandable theme={null}
using Daro;
using UnityEngine;

public sealed class RewardedHost : MonoBehaviour
{
    [SerializeField] private string adUnitId = "your-rewarded-ad-unit-id";
    private DaroRewardedAd ad;

    private void OnEnable()
    {
        ad = new DaroRewardedAd(adUnitId);
        ad.OnAdLoaded += info => Debug.Log("rewarded loaded");
        ad.OnAdFailedToLoad += error => Debug.LogWarning(error.Message);
        ad.OnEarnedReward += OnEarnedReward;
        ad.OnAdDismissed += info => ad?.Load();
        ad.Load();
    }

    public void ShowForReward()
    {
        if (ad != null && ad.IsReady())
        {
            ad.SetCustomData("user=12345");
            ad.Show();
        }
    }

    private void OnEarnedReward(DaroAdInfo info, DaroRewardItem reward)
    {
        Debug.Log($"earned {reward.Amount} {reward.RewardType}");
        // Grant the in-game reward here.
    }

    private void OnDisable()
    {
        ad?.Dispose();
        ad = null;
    }
}
```

<Warning>
  `OnAdDismissed`에서 보상을 지급하지 마세요. 사용자가 광고를 끝까지 시청한 경우에만 `OnEarnedReward`가 호출됩니다.
</Warning>
