iOS の動画リワード実装

ironSource 動画リワード広告ユニットは、ユーザーの動画広告視聴完了と引き換えに価値のあるアプリ内コンテンツを報酬として付与する魅力的な広告体験を提供します。このユーザー主導の広告ユニットは、ゲームアプリに最適であらゆるアプリ体験を向上させることができます。

Before you start ironSource SDK と追加のアドネットワークアダプターがアプリケーションに正しく実装されていることを確認してください。実装の概要はこちら

ステップ 1. 動画リワードデリゲートを実装する

ironSource SDK はいくつかのイベントを発火させて広告のアベイラビリティと視聴完了を通知するので、ユーザーに報酬を与えるタイミングを知ることができます。

SDK は、以下にリストされているすべての発生しうるイベントをデリゲートに通知します:

+ (void)setLevelPlayRewardedVideoDelegate:(nullable id<LevelPlayRewardedVideoDelegate>)delegate;
#pragma mark - LevelPlayRewardedVideoDelegate
/**
 Called after a rewarded video has changed its availability to true.
 @param adInfo The info of the ad.
 Replaces the delegate rewardedVideoHasChangedAvailability:(true)available 
 */
- (void)hasAdAvailableWithAdInfo:(ISAdInfo *)adInfo {}

/**
 Called after a rewarded video has changed its availability to false.
 Replaces the delegate rewardedVideoHasChangedAvailability:(false)available 
 */
- (void)hasNoAvailableAd {}

/**
 Called after a rewarded video has been viewed completely and the user is eligible for a reward.
 @param placementInfo An object that contains the placement's reward name and amount.
 @param adInfo The info of the ad.
 */
- (void)didReceiveRewardForPlacement:(ISPlacementInfo *)placementInfo withAdInfo:(ISAdInfo *)adInfo {}

/**
 Called after a rewarded video has attempted to show but failed.
 @param error The reason for the error
 @param adInfo The info of the ad.
 */
- (void)didFailToShowWithError:(NSError *)error andAdInfo:(ISAdInfo *)adInfo {}

/**
 Called after a rewarded video has been opened.
 @param adInfo The info of the ad.
 */
- (void)didOpenWithAdInfo:(ISAdInfo *)adInfo {}

/**
 Called after a rewarded video has been dismissed.
 @param adInfo The info of the ad.
 */
- (void)didCloseWithAdInfo:(ISAdInfo *)adInfo {}

/**
 Called after a rewarded video has been clicked. 
 This callback is not supported by all networks, and we recommend using it 
 only if it's supported by all networks you included in your build
 @param adInfo The info of the ad.
 */
- (void)didClick:(ISPlacementInfo *)placementInfo withAdInfo:(ISAdInfo *)adInfo {}

リスナーの完全な実装については、こちらで確認できます。

エラーコード

ironSource は、実装中もしくは本番環境で発生する可能性のあるエラーを理解するのに役立つエラーコードメカニズムを提供しています。こちらのガイドをご覧ください。

コールバック

コールバックが常にメインスレッドで実行されていると想定しないでください。ironSource コールバックから生じる UI インタラクションまたは更新は、実行する前にメインスレッドに渡す必要があります。

ネットワーク接続ステータス

ironSource Network Change Status 関数を使用して、ユーザーのデバイスのインターネット接続状況を判別及びモニタリングすることができます。これにより、SDK はネットワーク状況の変更に応じて広告配信可能な状態を示すアベイラビリティを変更できます。つまり、ネットワーク接続がない場合、アベイラビリティは FALSE になります。この関数のデフォルトは false です。接続の変更を監視する場合は、SDK の初期化において次の文字列を使用してアクティベートします:

[IronSource shouldTrackReachability:YES];

ステップ 2. ユーザーに動画広告を表示する

広告のアベイラビリティ

Rewarded Video Delegate とその関数を正しく実装することにより、hasAdAvailableWithAdInfo を通じて広告配信可能な状態を示すアベイラビリティステータスを受け取ることができます。その後、広告のアベイラビリティが変更されると、以下のデリゲート関数で通知されます:

/**
 Called after a rewarded video has changed its availability to true.
 @param adInfo The info of the ad.
 Replaces the delegate rewardedVideoHasChangedAvailability:(true)available
 */
- (void)hasAdAvailableWithAdInfo:(ISAdInfo *)adInfo {
     //Change the in-app 'Traffic Driver' state according to availability.
}
/**
 Called after a rewarded video has changed its availability to true.
 @param adInfo The info of the ad.
 Replaces the delegate rewardedVideoHasChangedAvailability:(true)available
 */
public func hasAdAvailable(with adInfo: ISAdInfo) {
    //Change the in-app 'Traffic Driver' state according to availability.
}

また、次の関数を直接呼ぶ事で広告のアベイラビリティを取得することができます:

[IronSource hasRewardedVideo];
IronSource.hasRewardedVideo()
Note: ironSource SDK は、セッション全体を通じて広告のアベイラビリティを確保するために、動画リワードを自動的にキャッシュします。

広告プレースメント

ironSource 広告プレースメントを使用すると、動画リワード体験をカスタマイズおよび最適化できます。このツールを使用すると、アプリ内のさまざまな場所でユーザーに動画を表示したり、プレースメントごとに報酬や報酬量をカスタマイズすることができます。以下の関数を使用して、広告を表示する特定のプレースメントを指定できます。詳細については、広告プレースメントのドキュメントをご覧ください。

各広告プレースメントに関連付けられている特定のリワードの詳細を取得するには、次の関数を呼んでください:

ISPlacementInfo *placementInfo = [IronSource rewardedVideoPlacementInfo:(NSString *)placementName];
if(placementInfo != NULL)
{
    NSString *rewardName = [placementInfo rewardName];
    NSNumber *rewardAmount = [placementInfo rewardAmount];
}
let placementInfo = IronSource.rewardedVideoPlacementInfo(<placementName: String>)
if placementInfo != nil {
    let rewardName = placementInfo.placementName
    let rewardAmount = placementInfo.rewardAmount
}
Note: パラメーターとして使用する場合は、プラットフォームに記述されているプレースメント名を使用してください。

キャッピングとペーシング

ironSource の広告プレースメントに加えて、選択したプレースメントの広告表示回数上限であるキャップと、広告表示間隔であるペースが設定できるようになりました。キャッピングとペーシングは、特定の時間内に配信される広告の量を制限することにより、アプリのユーザー体験を向上させます。この機能についての詳細は、こちらをご覧ください。

Note: プレースメントの上限に達したときにユーザーに広告の視聴を促すトラフィックドライバー(動画リワードボタン)を表示しないようにするには、以下のメソッドを呼んで、特定のプレースメントが広告の制限に達しているかどうかを確認する必要があります。
[IronSource isRewardedVideoCappedForPlacement:@"Placement"];
IronSource.isRewardedVideoCapped(forPlacement: <String>)

アベイラビリティをリクエストすると、TRUE の応答が返される場合がありますが、プレースメントが上限に達している場合、広告はユーザーに配信されません

動画広告を配信する

メディエーションを介して、アドネットワークから利用可能な動画が取得出来たら、この動画広告をユーザーに表示する準備が整ったことを意味します。ユーザーにとってベストな広告体験を提供できる様、広告を表示する前にゲームアクション・オーディオを止める事を忘れないでください。

[IronSource showRewardedVideoWithViewController:(UIViewController *)viewController placement:(nullable NSString *)placementName];
IronSource.showRewardedVideo(with: <UIViewController>, placement: <String?>)
Note: placementName パラメーターが null の場合、SDK は ironSource プラットフォームで設定されたデフォルトのプレースメント設定を取得します。

ダイナミックユーザー ID

ダイナミックユーザー ID は、AdRewarded トランザクションを検証するためのパラメーターであり、セッション全体を通して変更できます。サーバー間コールバックを介してこのパラメーターを受け取るには、showRewardedVideo を呼び出す前にパラメーターを設定する必要があります。これにより、リワードの詳細を含む dynamicUserId パラメーターをコールバック URL で受け取ります。

[IronSource setDynamicUserId:@"DynamicUserId"];
IronSource.setDynamicUserId(<dynamicUserId: String>);

ステップ 3. ユーザーにリワードを付与する

ユーザーへ正常にリワードを与えるために、ironSource SDK を初期化する前に、userID を設定していることを確認してください。

ユーザーが正常に動画広告視聴を完了するたびに、ironSource SDK は didReceiveReward イベントを発火します。リワードが与えられると、以下のデリゲート関数で通知されます。

// Called after a rewarded video has been viewed completely and the user is
// eligible for reward.
// @param placementInfo is an object that contains the placement's reward
// name and amount.
// @param adInfo The info of the ad.
- (void)didReceiveRewardForPlacement:(ISPlacementInfo *)placementInfo withAdInfo:(ISAdInfo *)adInfo {
    NSNumber *rewardAmount = [placementInfo rewardAmount];
    NSString *rewardName = [placementInfo rewardName];
}

Note: didReceiveReward イベントと rewardedVideoDidClose イベントは非同期です。rewardedVideoDidClose イベントの後に didReceiveReward が発火された場合でも、必ずリワードを付与するようにリスナーを設定してください。

Placement オブジェクトには、ironSource Admin で定義されているプレースメントのリワード名リワード額の両方が含まれています。

Note: ironSource アカウントのデフォルト設定では、アプリクライアント内の didReceiveReward コールバックを介してユーザーの視聴完了/リワードを通知します。さらに、バックエンドサーバーへの通知も受信したい場合は、サーバー間コールバックをオンにすることができます。

サーバー間コールバック

サーバー間コールバックをオンにする場合は、ironSource SDK の初期化前にユーザー ID を設定し、同じ視聴完了イベントに対してユーザーに二回以上リワードを与えないように注意してください。

クライアント側のコールバックとサーバー間コールバックの両方が発火される為、視聴完了ごとに二つの通知が届きます。

サーバー間コールバックを利用するには、こちらをご覧ください。

完了!
これで、アプリケーションで動画リワードを配信する準備が整いました。

初めての実装のヒント
これがアプリケーションの初めての実装である場合、ironSource ダッシュボードではアプリはデフォルトで「テストモード」になります。アプリがテストモードになっている間、ironSource SDK は、SDK プロセスの可視性を高めるために、より多くのログをコンソールに出力します。広告枠をテストするには、テストデバイスを設定します。また、本番環境をオンにするまでは、収益を生み出さないテスト用広告が配信されます。アプリの本番環境への移行準備ができたら、「 Ad Units 」ページで必ず「 Go Live! 」を選択してください。

ironsource-rewarded-video-test-ads


次のステップは?
実装ガイドに従って、追加の動画リワードアドネットワークを実装するか、追加の広告ユニットを実装します。