# Unityのリワード型広告単位APIへの移行

> LevelPlay リワード広告単位 API に遷移するには、SDK の初期化、広告フォーマットの定義、リワード広告のロードと表示に広告単位 ID を使用します。

このガイドでは、広告単位IDをウォーターフォール識別子として使用し、SDKバージョン9.0.0時点でLevelPlay APIを統合し、リワード広告をロードおよびディスプレイする方法について説明します。

> **Important:**
>
> 現在使用されているインテグレーション方法 (Ironsource init、Ironsource ロードリワードリスナー、Rewarded リスナー) の代わりに、この記事で紹介した API を使用します。API の置き換えについては、**API Comparison** セクションを参照してください。
>
> [詳細設定](/grow/levelplay/sdk/unity/additional-settings.md.md)と[規制設定](/grow/levelplay/sdk/unity/regulation-advanced-settings.md.md)は変更されておらず、LevelPlay SDK の初期化の前後にサポートされます。

## LevelPlay プラットフォームで広告単位 ID を確認します。

リワード広告をロードおよびディスプレイするには、LevelPlay メディエーションプラットフォームで利用できる広告単位 ID を使用する必要があります。

1. LevelPlay アカウントで、**設定**> **広告ユニット** に操作します。
2. リワード型広告単位IDをコピーし、コードに統合します。

## LevelPlay SDK の初期化##initializing-the-levelplay-sdk

LevelPlay SDK を初期化するには、以下の手順に従います。

1. 初期化の成功と失敗のイベントを実装します。
2. セッションで初期化する広告フォーマットのリストを定義します。これには、複数の広告単位ではない API を使用するすべての広告フォーマットを含める必要があります。
3. appKey、広告フォーマット、およびユーザー ID (必要な場合) を使用して LevelPlay 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);
```

### LevelPlay Init リスナー##levelplay-init-listeners

**OnInitSuccess**： 初期化が正常に完了したときにトリガーされます。この通知を受け取ったら、広告を作成してロードできます。

**OnInitFailed**：設定が正常に取得されず、広告をロードできません。後で LevelPlay SDK を初期化してみることをお勧めします (インターネット接続が利用可能なとき、または失敗の理由が解決されたとき)。

| コンポーネント | 古い機能                     | 広告単位 (新規)      |
| ------- | ------------------------ | -------------- |
| API     | IronSource.init          | LevelPlay.Init |
| イベント    | onInitializationComplete | OnInitSuccess  |
| N/A     | N/A                      | OnInitFailed   |

## Rewarded Adオブジェクトの作成##create-rewarded-ad-object

リワード広告オブジェクトの作成は、**OnInitSuccess** コールバックを受信した後に実行する必要があります。

オブジェクトは、セッションを通じて複数のロードと表示をハンドルできる再利用可能なインスタンスです。作成後、同じ広告単位の広告をロードおよび表示するために使用します。

より高度な実装では、必要に応じて複数のリワード広告オブジェクトを作成できます。

```cs
非公開の LevelPlayRewardedAd 報酬型広告
// Create rewarded Ad
rewardedAd = new LevelPlayRewardedAd(adUnitId);
```

## リワードイベントに登録##register-to-rewarded-events

作成したリワード型広告単位にリワード型リスナーを設定して、広告配信に関する情報を取得します。

* リワード広告をロードする前にリスナーを設定することをお勧めします。
* 各リワード広告には、独自のリスナー実装が必要です。
* コールバックはメインスレッドで実行されます。

```cs
非公開の LevelPlayRewardedAd 報酬型広告
// 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 リワード広告イベント##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、それ以外の場合は false を返します。

**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);
}
```

いつ
広告がプレイヤーに正常に表示されたら、Rewarded Ad のロード ステップを繰り返して、別の広告をロードできます。一度に 1 つの広告をロードするときに、新しい広告エンティティを作成する必要はありません。

## ユーザーの報酬##reward-the-user

LevelPlay SDK は、ユーザーがビデオを正常に視聴するたびに **OnAdRewarded** を起動します。

**OnAdRewarded** と **OnAdClosed** は非同期です。**OnAdClosed** 後に **OnAdRewarded** が起動された場合でもゲーム内報酬を付与するようにリスナーを設定してください。

```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
{
    非公開の LevelPlayRewardedAd 報酬型広告
    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();
    }
    ブーリアン 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}");
    }    
}
```
