iOS の動画リワード実装

Unity LevelPlay 動画リワードは、ユーザー主導の広告ユニットで、アプリ内報酬と引き換えにフルスクリーン広告にエンゲージする機会をユーザーに提供し、ポジティブなユーザーエクスペリエンスを維持しながらエンゲージメントを強化します。

Before you start
  • ironSource SDK がアプリケーションに正しく実装されていることを確認してください。実装の概要はこちら
  • LevelPlay Initialization API を使用して SDK を初期化してください。
  • AdUnitID は LevelPlay ダッシュボードで確認できます。詳細はこちら
  • このドキュメントは SDK 8.5.0+ に対応するものです。レガシー動画リワード API (SDK 8.5.0 以前) のドキュメントはこちら

動画リワード広告オブジェクトを作成する

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

このオブジェクトは再利用可能なインスタンスで、セッション中に複数のロードと表示が可能です。作成されたインスタンスは、同一の広告ユニットのロードと表示に使用できます。

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

self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")

デリゲートを実装する

LPMRewardedAdDelegate を実装して、広告配信に関する情報を取得します。

  • 動画リワード広告のロード前にデリゲートを設定することをお勧めします。
  • 各動画リワード広告にデリゲート実装が必要であることに注意してください。
  • デリゲートメソッドはメインスレッドで実行されます。
self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"]; 
self.rewardedAd.delegate = self;

#pragma mark - LPMRewardedAdDelegate Methods
- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {}
self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId") 
self.rewardedAd.setDelegate(self)
  
// MARK: LPMRewardedAdDelegate methods
func didLoadAd(with adInfo: LPMAdInfo) {}
func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
func didDisplayAd(with adInfo: LPMAdInfo) {}
func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
func didClickAd(with adInfo: LPMAdInfo) {}
func didCloseAd(with adInfo: LPMAdInfo) {}
func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {}

LevelPlay Ad Info

Ad Info

LPMAdInfo パラメーターはロードに成功した広告の情報を含んでいます。

利用可能なフィールドの詳細については、こちらをご覧ください。

動画リワード広告をロードする

動画リワード広告をロードするには、loadAd メソッドを呼びます。

[self.rewardedAd loadAd];
self.rewardedAd.loadAd()

動画リワード広告を表示する

didLoadAd コールバックを受信したら、動画リワード広告を表示します。

  • ViewController を渡す必要があります。
  • プレースメントを使用している場合は、後述のようにプレースメント名を showAd API に渡します。
  • 広告がユーザーに正常に表示されたら、ロード手順を繰り返すことで別の広告をロードすることができます。
- (void)showRewardedAd {
    // Check that ad is ready
    if ([self.rewardedAd isAdReady]) {
        // Show without placement
        [self.rewardedAd showAdWithViewController:self placementName:NULL];
    }
}
func showRewardedAd() {
    // Check that ad is ready  
    if self.rewardedAd.isAdReady() {
        // Show without placement
        self.rewardedAd.showAd(viewController: self, placementName: nil)
    }
}

広告のアベイラビリティを確認する

表示の失敗を回避し、広告が正しく表示されることを確認するには、showAd API を呼ぶ前に次の API を使用することをお勧めします。

isAdReady – 広告が正常に読み込まれ、広告ユニットに対するキャップが設定されていない場合、または視聴回数が広告ユニットに対して設定されたキャップに達していない場合は true を返し、それ以外の場合は false を返します。

isPlacementCapped – 有効なプレースメントに対する視聴回数がキャップに達している場合は true を返します。プレースメント名が有効でない場合、キャップが設定されていない場合、または視聴回数がプレースメントに対して設定されたキャップに達していない場合、この API は false を返します。

// Check that ad is ready and that the placement is not capped 
if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
    [self.rewardedAd showAdWithViewController:self placementName:placementName];
}
// Check that ad is ready and that the placement is not capped 
if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
    self.rewardedAd.showAd(viewController: self, placementName: placementName)
}

プレースメント

LevelPlay ダッシュボードで動画リワードのプレースメント、ペーシング、キャッピングをサポートしています。

動画リワード広告のプレースメントを設定している場合は、showAd メソッドを呼び出して、特定のプレースメントに対して動画リワード広告を配信します。

// Check that ad is ready and that the placement is not capped
 if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
    // Show ad with placement
    [self.rewardedAd showAdWithViewController:self placementName:@"PlacementName"];
}
// Check that ad is ready and that the placement is not capped 
if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
    // Show ad with placement
    self.rewardedAd.showAd(viewController: self, placementName: placementName) 
}

リワードを付与する

LevelPlay SDK は、ユーザーが正常にビデオ視聴を完了するたびに didRewardAd を発火します。

didRewardAddidCloseAd は非同期です。didCloseAd の後に didRewardAd が発火された場合でも、リワードを付与するようにリスナーを設定してください。

- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {
    // Implement logic to grant the reward to the user
    NSString *name = reward.name; 
    NSInteger *amount = reward.amount;
}
func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {
    // Implement logic to grant the reward to the user
    let name: String = reward.name 
    let amount: Int = reward.amount
}

動画リワード広告の実装例

NS_ASSUME_NONNULL_BEGIN
@interface RewardedAdViewController () <LPMRewardedAdDelegate>
@property(nonatomic, strong) LPMRewardedAd *RewardedAd;
@end
@implementation RewardedAdViewController
- (void)createRewardedAd {
    self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
    self.rewardedAd.delegate = self;
}
- (void)loadRewardedAd {
    // used to load or reload the ad
    [self.rewardedAd loadAd];
}
- (void)showRewardedAd {
    if ([self.rewardedAd isAdReady]) {
        [self.rewardedAd showAdWithViewController:self placementName:NULL];
    }
}
- (void)showRewardedAdWithPlacementName:(NSString *)placementName {
    // check that ad is ready and that the placement is not capped 
    if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
        [self.rewardedAd showAdWithViewController:self placementName:placementName];
    }
}
#pragma mark - LPMRewardedAdDelegate Methods
- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {} 
@end
NS_ASSUME_NONNULL_END
class RewardedAdViewController: UIViewController, LPMRewardedAdDelegate {
    var RewardedAd: LPMRewardedAd!
    
    func createRewardedAd() {
        self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
        self.rewardedAd.setDelegate(self)
    }
    
    func loadRewardedAd() {
        // used to load or reload the ad
        self.rewardedAd.loadAd()
    }
    
    func showRewardedAd() {
        if self.rewardedAd.isAdReady() {
            self.rewardedAd.showAd(viewController: self, placementName: nil)
        }
    }
    
    func showRewardedAd(withPlacementName placementName: String) {
        // check that ad is ready and that the placement is not capped 
        if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
            self.rewardedAd.showAd(viewController: self, placementName: placementName)
        }
    }
    
    // MARK: LPMRewardedAdDelegate methods
    func didLoadAd(with adInfo: LPMAdInfo) {}
    func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
    func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
    func didDisplayAd(with adInfo: LPMAdInfo) {}
    func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
    func didClickAd(with adInfo: LPMAdInfo) {}
    func didCloseAd(with adInfo: LPMAdInfo) {}
    func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {} 
}

LevelPlay メディエーションデモアプリ

実装デモアプリでは、動画リワード広告ユニット API をアプリに実装する方法を確認できます。

iOS デモアプリダウンロード

完了!
これで、アプリケーションで動画リワードを配信するように設定されました。Test Suite を使用してインテグレーションを確認します。


次のステップは?
インテグレーションガイドに従って、追加の広告ユニットを実装します。