# Android でのリワード広告の実装

> Android アプリケーションにリワード広告を実装します。広告コンテンツをロードし、Java コードで表示し、リスナーを使用して広告イベントと報酬ロジックを管理します。

広告を視聴したユーザーに報酬を与えると、ユーザーエンゲージメントが向上し、収益の増加につながります。例えば、ユーザーに与える報酬には、ゲーム内通貨、消耗品、追加のライフ、経験値の倍増などがあります。リワード広告を効果的にデザインする方法の詳細については、[収益化戦略](/monetization/getting-started/monetization-strategy.md) ガイドを参照してください。

## リワード動画広告のロード例##rewarded-video-ad-load-example

保持されている `show()` インスタンスで `RewardedAd` を呼び出し、アクティビティ、`ShowConfiguration`、`RewardedShowListener` を渡します。リスナーは、標準的な広告ライフサイクルイベントの `onStarted`、`onClicked`、`onFailed` コールバックに加え、リワード固有の2つのコールバックを提供します。ユーザーがリワードを獲得したときに発生する `onRewarded` と、その後に広告が閉じられたときに発生する `onCompleted` です。両方のコールバックが連続して発生する可能性があるため、リワードの付与が重複しないよう、通常は `shouldAlwaysRewardUser()` のようなフラグを確認して、いずれか一方のコールバックでリワード処理を行う必要があります。

広告は、ロード後に表示されないまま一定時間が経過すると期限切れになります。これを検出するには、ロードされた広告インスタンスで `onAdExpired` を設定します。これはリワード広告において特に重要です。リワード広告は多くの場合、プリロードされ、ユーザーがオプトインするまで保持されるためです。期限切れの広告で `show()` を呼び出すと失敗するため、コールバックを使用して保存された参照をクリアし、新しい `load()` 呼び出しを発行して、必要なときに新しい広告が準備されるようにしてください。

1. **Java**

   ```java
   RewardedAd.load(loadConfig, (rewardedAd, error) -> {
       if (rewardedAd != null) {
           // 広告の読み込みに成功しました。表示可能です。
           this.rewardedAd = rewardedAd;
           rewardedAd.setOnAdExpired(expiredAd -> {
               this.rewardedAd = null;
               // ここでリロードします
           });
       } else {
           // 読み込みエラーを処理します
       }
   });
   ```

2. **Kotlin**

   ```kotlin
   RewardedAd.load(loadConfig, { rewardedAd, error ->
       if (rewardedAd != null) {
           // 広告の読み込みに成功しました。表示可能です。
           this.rewardedAd = rewardedAd
           rewardedAd.onAdExpired = AdExpiredListener { _ ->
               this.rewardedAd = null
               // ここでリロードします
           }
       } else {
           // 読み込みエラーを処理します
       }
   })
   ```

## リワード動画広告の表示例##rewarded-video-ad-show-example

1. **Java**

   ```java
   rewardedAd.show(activity, showConfig, rewardedAdShowListener)
   {
        @Override
        public void onStarted(@NonNull InterstitialAd ad)   
        { /* 表示されました */ }

        @Override
        public void onClicked(@NonNull InterstitialAd ad)   
        { /* クリックされました */ }

        @Override
        public void onCompleted(@NonNull InterstitialAd ad, @NonNull ShowFinishState state) 
        { /* 非表示になりました */ }

        @Override
        public void onFailed(@NonNull InterstitialAd ad, @NonNull UnityAdsError error)      
        { /* 失敗 */ }
     } 
   ```

2. **Kotlin**

   ```kotlin
   rewardedAd.show(activity, showConfig, rewardedAdShowListener)
   {
        @Override
        public void onStarted(@NonNull InterstitialAd ad)   
        { /* 表示されました */ }

        @Override
        public void onClicked(@NonNull InterstitialAd ad)   
        { /* クリックされました */ }

        @Override
        public void onCompleted(@NonNull InterstitialAd ad, @NonNull ShowFinishState state) 
        { /* 非表示になりました */ }

        @Override
        public void onFailed(@NonNull InterstitialAd ad, @NonNull UnityAdsError error)      
        { /* 失敗 */ }
     } 
   ```

**次のステップ**: [Android でのバナー広告の実装](/ads-android/4.19.0/sdk-integration/banner-ads.md) を参照してください。
