# Android向けリワード型広告単位APIへの移行

> SDKの初期化、広告単位IDを持つリワード型広告オブジェクトの作成、広告イベントのリスナーの実装によって、LevelPlayリワード型広告単位APIに移行します。

このガイドでは、広告単位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. 必要に応じて appKey とユーザー ID を使用して LevelPlay init API を呼び出します。

1) **Java**

   ```java
   LevelPlayInitRequest initRequest = new LevelPlayInitRequest.Builder(appKey)
     .withUserId("UserID")
     .build();
   LevelPlayInitListener initListener = new LevelPlayInitListener() {
     @Override
     public void onInitFailed(@NonNull LevelPlayInitError error) {}
     @Override
     public void onInitSuccess(LevelPlayConfiguration configuration) {}
   };
   LevelPlay.init(context, initRequest, initListener);
   ```

2) **Kotlin**

   ```kotlin
   val initRequest = LevelPlayInitRequest.Builder("AppKey")
     .withUserId("UserId")
     .build()
   LevelPlay.init(context, initRequest, object :LevelPlayInitListener {
     override fun onInitSuccess(configuration:LevelPlayConfiguration) {}
     オーバーライド fun onInitFailed(エラー:LevelPlayInitError) {}
   })
   ```

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

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

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

| Init   | 古い機能                     | 広告単位 (新規)      |
| :----- | :----------------------- | :------------- |
| API    | IronSource.init          | LevelPlay.init |
| コールバック | onInitializationComplete | onInitSuccess  |
|        | –                        | onInitFailed   |

## **リワード型広告オブジェクトの作成**##**create-rewarded-ad-object**

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

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

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

1. **Java**

   ```java
   // リワード広告の作成
   mRewardedAd = new LevelPlayRewardedAd("adUnitId");
   ```

2. **Kotlin**

   ```kotlin
   // リワード広告の作成
   mRewardedAd = LevelPlayRewardedAd("adUnitId")
   ```

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

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

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

1. **Java**

   ```java
   // リワード広告の作成
   mRewardedAd = new LevelPlayRewardedAd("adUnitId");
   // リスナーの設定
   mRewardedAd.setListener(this);

   // LevelPlayRewardedAdListener methods
   @Override
   public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
   @Override
   public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {}
   ```

2. **Kotlin**

   ```kotlin
   // リワード広告の作成
   mRewardedAd = LevelPlayRewardedAd("adUnitId") 
   // リスナーの設定
   mRewardedAd.setListener(this)
   // LevelPlayRewardedAdListener methods
   override fun onAdLoaded(adInfo:LevelPlayAdInfo) {}
   override fun onAdLoadFailed(error:LevelPlayAdError) {}
   オーバーライド fun onAdInfoChanged(adInfo:LevelPlayAdInfo) {}
   override fun onAdDisplayed(adInfo:LevelPlayAdInfo) {}
   オーバーライド fun onAdDisplayFailed(エラー:LevelPlayAdError、adInfo：LevelPlayAdInfo) {}
   override fun onAdClicked(adInfo:LevelPlayAdInfo) {}
   override fun onAdClosed(adInfo:LevelPlayAdInfo) {}
   オーバーライド fun onAdRewarded(reward:LevelPlayReward, adInfo:LevelPlayAdInfo) {}
   ```

### LevelPlay リワード広告コールバック##levelplay-rewarded-ad-callbacks

**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** コールバックを受信すると、リワード広告をロードする準備ができます。これは、 メソッドを使用して行う必要があります。

1. **Java**

   ```java
   // 広告のロードまたはリロード
   mRewardedAd.loadAd();
   ```

2. **Kotlin**

   ```kotlin
   // 広告のロードまたはリロード
   mRewardedAd.loadAd()
   ```

## **リワード広告の表示**##**show-rewarded-ad**

**showAd** API を使用して、**onAdLoaded** コールバックの受信後にリワード広告を表示できます。
[プレースメント](/grow/levelplay/platform/settings/placements.md)を使用している場合は、次に示すように、プレースメントの名前を API の一部として共有します。

1. **Java**

   ```java
   // 配置なしで広告を表示 
   mRewardedAd.showAd(this);
   // 配置で広告を表示 
   mRewardedAd.showAd(this, placementName);
   ```

2. **Kotlin**

   ```kotlin
   // 配置なしで広告を表示 
   mRewardedAd.showAd(this)
   // 配置で広告を表示 
   mRewardedAd.showAd(this, placementName)
   ```

### 広告の準備ができているか確認##check-ad-is-ready

表示の失敗を避け、広告が正しく表示されるようにするために、**showAd** API を呼び出す前に以下の API を使用することをお勧めします。

**isAdReady** – 広告のロードが成功し、広告単位が上限に達していない場合は true、それ以外の場合は false を返します。

**isPlacementCapped** – 有効な配置に上限がある場合に true を返します。配置が有効でないか、上限がない場合、この API は false を返します。

1. **Java**

   ```java
   // 広告の準備ができていることと、配置に上限がないことを確認します。 
   if(mRewardedAd.isAdReady() &amp;&amp; !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
       mRewardedAd.showAd(this, placementName);
   }
   ```

2. **Kotlin**

   ```kotlin
   // 広告の準備ができていることと、配置に上限がないことを確認します。 
   if (mRewardedAd.isAdReady() &amp;&amp; !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
       mRewardedAd.showAd(this, placementName)
   }
   ```

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

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

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

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

1. **Java**

   ```java
   @Override
   public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {
     // ユーザーに報酬を付与するロジックを実装します
     String name = reward.getName();
     int amount = reward.getAmount();
   }
   ```

2. **Kotlin**

   ```kotlin
   オーバーライド fun onAdRewarded(reward:LevelPlayReward, adInfo:LevelPlayAdInfo) {
     // ユーザーに報酬を付与するロジックを実装します
     val name：String = reward.name
     val amount：Int = reward.amount
   }
   ```

## 複数の広告単位リワード型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

1. **Java**

   ```java
   public class RewardedAdActivity extends Activity implements LevelPlayRewardedAdListener {
     private LevelPlayRewardedAd mRewardedAd
     void createRewardedAd() {
       mRewardedAd = new LevelPlayRewardedAd("adUnitId");
       mRewardedAd.setListener(this);
     }
     void loadRewardedAd() {
       // 広告のロードまたはリロード
       mRewardedAd.loadAd();
     }
     void showRewardedAd() {
       if (mRewardedAd.isAdReady()) {
         mRewardedAd.showAd(this);
       }
     }
     void showRewardedAd(@NonNull String placementName) {
       // 広告の準備ができていることと、配置に上限がないことを確認します。
       if (mRewardedAd.isAdReady() &amp;&amp; !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
         mRewardedAd.showAd(this, placementName);
       }
     }
     // LevelPlayRewardedAdListener methods
     @Override
     public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
     @Override
     public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
     @Override
     public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {}
   }
   ```

2. **Kotlin**

   ```kotlin
   クラス RewardedAdActivity ：Activity(), LevelPlayRewardedAdListener {
   private lateinit var mRewardedAd:LevelPlayRewardedAd
   fun createRewardedAd() {
       mRewardedAd = LevelPlayRewardedAd("adUnitId")
       mRewardedAd.setListener(this)
   }
   fun loadRewardedAd() {
       mRewardedAd.loadAd()
   }
   fun showRewardedAd() {
       if (mRewardedAd.isAdReady()) {
           mRewardedAd.showAd(this)
       }
   }
   fun showRewardedAd(placementName:文字列) {
       // 広告の準備ができていることと、配置に上限がないことを確認します。 
       if (mRewardedAd.isAdReady() &amp;&amp; !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
           mRewardedAd.showAd(this, placementName)
       }
   }
   // LevelPlayRewardedAdListener methods
   override fun onAdLoaded(adInfo:LevelPlayAdInfo) {}
   override fun onAdLoadFailed(error:LevelPlayAdError) {}
   オーバーライド fun onAdInfoChanged(adInfo:LevelPlayAdInfo) {}
   override fun onAdDisplayed(adInfo:LevelPlayAdInfo) {}
   オーバーライド fun onAdDisplayFailed(エラー:LevelPlayAdError、adInfo：LevelPlayAdInfo) {}
   override fun onAdClicked(adInfo:LevelPlayAdInfo) {}
   override fun onAdClosed(adInfo:LevelPlayAdInfo) {}
   オーバーライド fun onAdRewarded(reward:LevelPlayReward, adInfo:LevelPlayAdInfo) {}
   }
   ```
