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

> iOS アプリケーションにリワード広告を実装します。広告コンテンツをロードし、Objective-C または Swift コードを使用して表示し、デリゲートを使用して広告イベントと報酬ロジックを管理します。

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

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

`UADSLoadConfigurationBuilder`を使用して、配置 ID、メディエーションメタデータ、入札用の任意の広告マークアップを含むロードリクエストを作成し、それを`UADSRewardedAd.load()`に渡します。completion ブロックは、成功したときにロードされた`UADSRewardedAd`インスタンスを受け取ります。後で広告を表示する必要があるため保持します。失敗した場合はエラー オブジェクトを表示します。

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

1. **Objective-C**

   ```objective-c
   @プロパティ（強）UADSRewardedAd *rewardedAd;

   UADSLoadConfigurationBuilder *builder =
       [[UADSLoadConfigurationBuilder alloc] initWithPlacementId:placementId];
   builder = [builder withMediationInfo:self.mediationInfo];
   builder = [builder withAdMarkup:bidResponse];

   [UADSRewardedAd ロード：[ビルダービルド]]
           completion:^(UADSRewardedAd *ad, id<UnityAdsError> error) {
       if (error) {
           // Handle error
       } else {       
            __weak typeof(self) weakSelf = self;
            ad.onAdExpired = ^(UnityAd *expiredAd) {
             weakSelf.rewardedAd = nil;
             // reload here
           };
       }
   }];
   ```

2. **Swift**

   ```swift
   var rewardedAd:UADSRewardedAd?

   let config = UADSLoadConfigurationBuilder(placementId: placementId)
     .with(mediationInfo: mediationInfo)
     .with(adMarkup: bidResponse)
     .build()

   UADSRewardedAd.load(config) { ad, error in
     if let error = error {
         // Handle error
     } else {
         self.rewardedAd = ad
         ad?.onAdExpired = { [weak self] _ in
         self?.rewardedAd = nil
         // reload here
         }
     }
   }
   ```

## 動画リワード広告の表示と報酬処理の例##rewarded-video-ad-show-and-reward-handling-example

保持された`UADSRewardedAd`のインスタンスで`show()`を呼び出し、表示ビューコントローラーで構築された`UADSShowConfiguration`と`UADSRewardedShowDelegate`を渡します。標準の`showDidStart`、`showDidClick`、`showDidComplete`、`showDidFail`のコールバックに加えて、デリゲートはユーザーが報酬を獲得したときに発生する専用の`showDidReceiveReward`コールバックを提供します。条件付きの完了状態チェックを避けるために、`showDidComplete`ではなく`showDidReceiveReward`で報酬を付与します。

1. **Objective-C**

   ```objective-c
   @インターフェース MyDelegate ：NSObject <UADSRewardedShowDelegate>
   @end

   @implementation MyDelegate
   - (void)showDidStart:(UADSRewardedAd *)unityAd {}
   - (void)showDidClick:(UADSRewardedAd *)unityAd {}
   - (void)showDidComplete:(UADSRewardedAd *)unityAd
                     with:(UADSShowFinishState)finishState {
   }
   - (void)showDidFail:(UADSRewardedAd *)unityAd
               error:(id<UnityAdsError>)error {}
   - (void)showDidReceiveReward:(UADSRewardedAd *)unityAd {
     // reward callback
   }
   @end

   UADSShowConfigurationBuilder *builder =
   [[UADSShowConfigurationBuilder alloc] init];
   builder = [builder withViewController:viewController];

   [self.rewardedAd show:[builder build] delegate:delegate];
   ```

2. **Swift**

   ```swift
   クラス MyDelegate：NSObject, UADSRewardedShowDelegate {
   func showDidStart(_ unityAd:UADSRewardedAd) {}

   func showDidClick(_ unityAd:UADSRewardedAd) {}

   func showDidComplete()
       _ unityAd:UADSRewardedAd,
       finishState でUADSShowFinishState
   ) {
   }

   func showDidFail(
       _ unityAd:UADSRewardedAd,
       error：UnityAdsError
   ) {}

   func showDidReceiveReward(_ unityAd:UADSRewardedAd) {
       // reward callback
     }
   }

   let config = UADSShowConfigurationBuilder()
     .with(viewController: viewController)
     .build()

   rewardedAd?.show(config, delegate: delegate)
   ```

**次のステップ**: 実装を拡張するには、[iOS でのバナー広告の実装](/ads-ios/4.19.0/sdk-integration/banner-ads.md) を参照してください。
