# Unity 보상형 광고 광고 유닛 API 마이그레이션

> SDK를 초기화하고 광고 형식을 정의하고 광고 유닛 ID를 사용하여 보상형 광고를 로드하고 표시하여 레벨플레이 보상형 광고 광고 광고 유닛 API 전환.

이 가이드에서는 광고 유닛 ID를 워터폴 식별자 사용하여 SDK 버전 9.0.0부터 레벨플레이 API를 연동하여 보상형 광고 광고를 로드하고 표시하는 방법을 설명합니다.

> **Important:**
>
> 현재 사용 중인 통합 방법 대신 이 문서에 소개된 API를 사용합니다(아이언소스 init, 아이언소스 로드 보상형 광고, 보상형 광고 리스너). **API Comparison** 섹션 API 대체 항목을 확인할 수 있습니다.
>
> [고급 설정](/grow/levelplay/sdk/unity/additional-settings.md.md) 및 [규정 설정](/grow/levelplay/sdk/unity/regulation-advanced-settings.md.md)은 변경되지 않았으며 레벨플레이 SDK 초기화 전 또는 후에 지원됩니다.

## 레벨플레이 플랫폼에서 광고 유닛 ID 찾기

보상형 광고 광고를 로드하고 표시하려면 레벨플레이 Mediation 플랫폼에서 사용할 수 있는 광고 유닛 ID를 사용해야 합니다.

1. 레벨플레이 계정에서 **설정** > **광고 단위**로 이동합니다.
2. 보상형 광고 유닛 ID를 복사하여 코드에 통합합니다.

## 레벨플레이 SDK 초기화##initializing-the-levelplay-sdk

레벨플레이 SDK를 초기화하려면 다음 단계를 따르십시오.

1. 초기화 성공 및 실패를 위한 이벤트를 구현합니다.
2. 세션에서 초기화할 광고 형식 리스트를 정의합니다. 여기에는 다중 광고 유닛이 아닌 API를 사용하려는 모든 광고 형식이 포함되어야 합니다.
3. 해당하는 경우 appKey, 광고 형식, 사용자 ID를 사용하여 레벨플레이 init API 호출.

```cs
using Unity.Services.LevelPlay;
// Init the SDK when implementing the Multiple Ad Units API for Interstitial, Banner, and Rewarded
LevelPlay.OnInitSuccess += SdkInitializationCompletedEvent;
LevelPlay.OnInitFailed += SdkInitializationFailedEvent;
LevelPlay.Init(appKey);
```

### 레벨플레이 Init 리스너##levelplay-init-listeners

**OnInitSuccess**: 초기화가 성공적으로 완료되면 트리거됩니다. 이 표시를 수신하면 광고를 생성하고 로드할 수 있습니다.

**OnInitFailed**: 설정이 성공적으로 검색되지 않았으며 광고를 로드할 수 없습니다. 나중에 레벨플레이 SDK를 초기화하는 것이 좋습니다(인터넷 연결이 가능하거나 오류 원인이 해결된 경우).

| 컴포넌트  | 레거시                      | 광고 단위(신규)      |
| ----- | ------------------------ | -------------- |
| API   | IronSource.init          | LevelPlay.Init |
| 이벤트   | onInitializationComplete | OnInitSuccess  |
| 해당 없음 | 해당 없음                    | OnInitFailed   |

## 보상형 광고 오브젝트 생성##create-rewarded-ad-object

보상형 광고 오브젝트의 생성은 **OnInitSuccess** 콜백을 수신한 후에 수행해야 합니다.

오브젝트 세션 전체에 걸쳐 여러 로드와 표시를 처리할 수 있는 재사용 가능한 인스턴스. 생성되면 동일한 광고 유닛의 광고를 로드하고 표시하는 데 사용해야 합니다.

더 고급 구현을 위해 필요한 경우 여러 보상형 광고 객체를 생성할 수 있습니다.

```cs
private LevelPlayRewardedAd rewardedAd;
// Create rewarded Ad
rewardedAd = new LevelPlayRewardedAd(adUnitId);
```

## 보상형 광고 이벤트 등록하기##register-to-rewarded-events

생성된 보상형 광고 광고 유닛의 보상형 광고 리스너를 설정하여 광고 게재를 알립니다.

* 보상형 광고 광고를 로드하기 전에 리스너를 설정하는 것이 좋습니다.
* 각 보상형 광고 광고에는 고유한 리스너 구현이 있어야 합니다.
* 콜백은 메인 스레드 실행됩니다.

```cs
private LevelPlayRewardedAd rewardedAd;
// Create rewarded Ad
rewardedAd = new LevelPlayRewardedAd(adUnitId);
// Register to events
rewardedAd.OnAdLoaded += OnAdLoaded;
rewardedAd.OnAdLoadFailed += OnAdLoadFailed;
rewardedAd.OnAdDisplayed += OnAdDisplayed;
rewardedAd.OnAdDisplayFailed += OnAdDisplayFailed;
rewardedAd.OnAdRewarded += OnAdRewarded;
rewardedAd.OnAdClosed += OnAdClosed;
// Optional
rewardedAd.OnAdClicked += OnAdClicked;
rewardedAd.OnAdInfoChanged += OnAdInfoChanged;
```

### 레벨플레이 보상형 광고 광고 이벤트##levelplay-rewarded-ad-events

**OnAdLoaded**: 광고가 성공적으로 로드되면 제공됩니다.

**OnAdLoadFailed**: 광고 로드 실패 시 제공됩니다. 광고 유닛 정보가 포함됩니다.

**OnAdDisplayed**: 광고가 표시될 때 제공됩니다. 이는 노출과 동일합니다.

**OnAdDisplayFailed**: 광고가 표시되지 않을 때 제공됩니다.

**OnAdRewarded**: 광고 보상형 광고 제공될 때 제공됩니다. 광고 유닛 정보와 보상 정보가 포함됩니다.

**OnAdClicked**(선택 사항): 사용자 광고를 클릭할 때 제공됩니다.

**OnAdClosed**: 광고가 닫힐 때 제공됩니다.

**OnAdInfoChanged**(선택 사항): 광고 정보가 업데이트될 때 제공됩니다. 다른 광고가 로드되었을 때 사용 가능하며 CPM/Rate가 더 높습니다.

| 컴포넌트 | 레거시                           | 광고 단위(신규)           |
| ---- | ----------------------------- | ------------------- |
| 청자   | IronSourceRewardedVideoEvents | LevelPlayRewardedAd |
| 이벤트  | onAdReady                     | OnAdLoaded          |
|      | onAdLoadFailed                | OnAdLoadFailed      |
|      | onAdOpened                    | OnAdDisplayed       |
|      | onAdClosed                    | OnAdClosed          |
|      | onAdShowFailed                | OnAdDisplayFailed   |
|      | onAdRewarded                  | OnAdRewarded        |
|      | onAdClicked                   | OnAdClicked         |
|      | onAdShowSucceeded             | n/a (사용 중단 예정)      |
|      | n/a                           | OnAdInfoChanged     |

## 보상형 광고 로드##load-rewarded-ad

**OnInitSuccess** 이벤트를 수신하면 보상형 광고를 로드할 수 있습니다. 이는 메서드를 사용하여 수행해야 합니다.

```cs
// Load or reload the ad
rewardedAd.LoadAd();
```

## 보상형 광고 표시##show-rewarded-ad

**ShowAd** API를 사용하여 **OnAdLoaded** 이벤트를 수신한 후 보상형 광고를 표시할 수 있습니다.
[플레이스먼트를](/grow/levelplay/platform/settings/placements.md) 사용하는 경우 아래와 같이 API의 일부로 이름을 공유합니다.

```cs
// Show ad without placement 
rewardedAd.ShowAd();
// Show ad with placement 
rewardedAd.ShowAd(placementName);
```

### 광고가 준비되었는지 확인##check-ad-is-ready

표시 실패를 방지하고 광고가 올바르게 표시되었는지 확인하기 위해 **ShowAd** API를 호출하기 전에 다음 API를 사용하는 것이 좋습니다.

**IsAdReady**: 광고가 성공적으로 로드되고 광고 유닛이 제한되지 않거나 거짓이 아닌 경우 true를 반환합니다.

**IsPlacementCapped**: 유효한 플레이스먼트가 제한되면 true를 반환합니다. 플레이스먼트가 유효하지 않거나 제한이 없는 경우 이 API false를 반환합니다.

```cs
// Check that ad is ready and that the placement is not capped
if (rewardedAd.IsAdReady() && !LevelPlayRewardedAd.IsPlacementCapped(placementName))
{
    rewardedAd.ShowAd(placementName);
}
```

언제
광고가 플레이어 성공적으로 표시되면 Load 보상형 광고 Ad 단계를 반복하여 다른 광고를 로드할 수 있습니다. 한 번에 하나의 광고를 로드할 때 새 광고 엔티티 생성할 필요가 없습니다.

## 사용자 보상##reward-the-user

레벨플레이 SDK는 사용자가 동영상을 성공적으로 완료할 때마다 **OnAdRewarded를** 작동시킵니다.

**OnAdRewarded** 및 **OnAdClosed**는 비동기입니다.  **OnAdRewarded가** **OnAdClosed** 이후에 해지되는 경우에도 보상을 제공하도록 리스너를 설정해야 합니다.

```cs
// Subscribe to the OnAdRewarded event
ad.OnAdRewarded += (adInfo, reward) => 
{
    // Grant the reward to the user
    Debug.Log($"Ad Completed: {adInfo.PlacementName}, Reward: {reward.Name} - {reward.Amount}");
    GrantReward(reward.Name, reward.Amount);
};
// Example method to process the reward
private void GrantReward(문자열 rewardName, int rewardAmount)
{
    // TODO: 로직을 구현하여 사용자 보상을 부여합니다.
    Debug.Log($"Granting reward: {rewardName} with amount: {rewardAmount}");
}
```

## 여러 광고 유닛 보상형 광고 API##multiple-ad-unit-rewarded-apis

| 컴포넌트 | 레거시                            | 광고 단위(신규)           |
| ---- | ------------------------------ | ------------------- |
| 클래스  | 아이언소스(IronSource)              | LevelPlayRewardedAd |
| API  | loadRewardedVideo              | LoadAd              |
|      | showRewardedVideo              | ShowAd              |
|      | isRewardedVideoPlacementCapped | IsPlacementCapped   |
|      | isRewardedVideoAvailable       | IsAdReady           |
|      | placement.getRewardName        | reward.Name         |
|      | placement.getRewardAmount      | reward.Amount       |

## 보상형 광고 광고의 전체 구현 예시##full-implementation-example-of-rewarded-ad

```cs
public class LevelPlaySample : MonoBehaviour
{
    private LevelPlayRewardedAd rewardedAd;
    void CreateRewardedAd(string adUnitId)
    {
        rewardedAd = new LevelPlayRewardedAd(adUnitId);
        rewardedAd.OnAdLoaded += OnAdLoaded;
        rewardedAd.OnAdLoadFailed += OnAdLoadFailed;
        rewardedAd.OnAdDisplayed += OnAdDisplayed;
        rewardedAd.OnAdDisplayFailed += OnAdDisplayFailed;
        rewardedAd.OnAdRewarded += OnAdRewarded;
        rewardedAd.OnAdClicked += OnAdClicked;
        rewardedAd.OnAdClosed += OnAdClosed;
        rewardedAd.OnAdInfoChanged += OnAdInfoChanged;
    }
    void LoadRewardedAd()
    {
        rewardedAd.LoadAd();
    }
    void ShowRewardedAd(string placementName = null)
    {
        if (rewardedAd.IsAdReady() &&!LevelPlayRewardedAd.IsPlacementCapped(placementName))
        {
            rewardedAd.ShowAd(placementName);
        }
    }
    bool CheckIfRewardedAdIsReady()
    {
        return rewardedAd.IsAdReady();
    }
    bool CheckIfPlacementIsCapped(문자열 placementName)
    {
        return LevelPlayRewardedAd.IsPlacementCapped(placementName);
    }
    void OnAdLoaded(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"Rewarded ad loaded with ad info {adInfo}");
    }
    void OnAdLoadFailed(LevelPlayAdError adError)
    {
        Debug.Log($"Rewarded ad failed to load with ad error {adError}");
    }
   
    void OnAdDisplayed(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"Rewarded ad displayed with ad info {adInfo}");
    }
       
    void OnAdDisplayFailed(LevelPlayAdInfo adInfo, LevelPlayAdError error)
    {
        Debug.Log($"Rewarded ad failed to display with ad info: {adInfo} and error: {error}");
    }
    
    void OnAdRewarded(LevelPlayAdInfo adInfo, LevelPlayReward adReward)
    {
        Debug.Log($"Rewarded ad gained reward with adInfo {adInfo} and reward {adReward}");
    }
    void OnAdClicked(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"Rewarded ad clicked with ad info {adInfo}");
    }
    
    void OnAdClosed(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"Rewarded ad closed with ad info {adInfo}");
    }
    
    void OnAdInfoChanged(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"Rewarded ad info changed with ad info {adInfo}");
    }    
}
```
