# Implement rewarded ads in iOS

> Implement rewarded ads in your iOS app. Load ad content, display it through Objective-C or Swift code, and use a delegate to manage ad events and reward logic.

Rewarding players for watching ads increases user engagement, resulting in higher revenue. For example, games might reward users with in-game currency, consumables, additional lives, or experience-multipliers. For more information on how to effectively design your rewarded ads, refer to the [monetization strategy](/monetization/getting-started/monetization-strategy.md) guide.

## Rewarded video ad load example

Use `UADSLoadConfigurationBuilder` to construct a load request with the placement ID, mediation metadata, and optional ad markup for bidding, then pass it to `UADSRewardedAd.load()`. The completion block receives the loaded `UADSRewardedAd` instance on success. Retain it, as it's required to show the ad later, or an error object on failure.

1. **Objective-C**

   ```objective-c
   @property (strong) UADSRewardedAd *rewardedAd;

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

   [UADSRewardedAd load:[builder build]
           completion:^(UADSRewardedAd *ad, id<UnityAdsError> error) {
     if (error) {
         // Handle error
     } else {
         self.rewardedAd = ad;
     }
   }];
   ```

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
     }
   }
   ```

## Rewarded video ad show and reward handling example

Call `show()` on the retained `UADSRewardedAd` instance, passing a `UADSShowConfiguration` built with the presenting view controller, and a `UADSRewardedShowDelegate`. In addition to the standard `showDidStart`, `showDidClick`, `showDidComplete`, and `showDidFail` callbacks, the delegate provides a dedicated `showDidReceiveReward` callback that fires when the user earns a reward. Grant the reward in `showDidReceiveReward` rather than in `showDidComplete` to avoid conditional completion-state checks.

1. **Objective-C**

   ```objective-c
   @interface 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
   class MyDelegate: NSObject, UADSRewardedShowDelegate {
   func showDidStart(_ unityAd: UADSRewardedAd) {}

   func showDidClick(_ unityAd: UADSRewardedAd) {}

   func showDidComplete(
       _ unityAd: UADSRewardedAd,
       with 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)
   ```

**Next steps**: To expand your implementation, refer to [Implement banner ads in iOS](/ads-ios/4.19.0/sdk-integration/banner-ads.md).
