iOS 向けリワード広告インテグレーション
動画リワード広告単位をiOSアプリケーションに実装するには、広告単位の初期化、デリゲートの設定、広告イベントの処理を行います。
読み終わるまでの所要時間 22 分最終更新 2日前
Unity LevelPlay Rewardedは全画面の広告単位であり、通常はアプリケーションのライフサイクルにおける自然な遷移ポイントで提供されます。
前提条件
- LevelPlay SDK がアプリケーションに正しく統合されていることを確認します。インテグレーションの概要はこちらです。
- LevelPlay 初期化 API を使用して SDK を初期化していることを確認します。
- LevelPlay ダッシュボードで AdUnitID を見つけます。
Rewarded Adオブジェクトの作成
リワード広告オブジェクトの作成は、onInitSuccess コールバックを受信した後に実行する必要があります。
オブジェクトは、セッションを通じて複数のロードと表示をハンドルできる再利用可能なインスタンスです。作成後、同じ広告単位の広告をロードおよび表示するために使用する必要があります。
より高度な実装では、必要に応じて複数のリワード広告オブジェクトを作成できます。
self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"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 {}
LevelPlay 広告情報
LPMAdInfo パラメーターには、ロードされた広告に関する情報が含まれます。
LPMAdInfo の実装と使用可能なフィールドの詳細については、こちらを参照してください。
リワード広告の詳細を取得する
getReward API を使用して、LevelPlay ダッシュボードで設定した報酬データにアクセスします。他のメディエーション API とは異なり、これは初期化期化後に SDK にローカルに保存されたデータを返す独立した呼び出しです。これにより、広告を表示する前にユーザーに潜在的なゲーム内報酬を通知する動的なデータ駆動型 UI をビルドできるため、アプリケーション内で報酬値をハードコードする必要がなくなります。
前提条件
getReward API を実装する前に、プロジェクトが以下の技術要件を満たしていることを確認してください。
- SDK 初期化:initSDK を呼び出し、onInitializationSuccess コールバックが報酬データがキャッシュされていることを確認します。
- 広告オブジェクトインスタンス:API を呼び出す前に、有効な広告単位 ID でリワード広告オブジェクトをインスタンス化します。
- 最低 SDK バージョン:LevelPlay SDK バージョン 8.1.0 以上 (ネイティブまたは Unity パッケージ) を使用する。
ベストプラクティス
以下の推奨事項に従って、安定した予測可能なインテグレーションを行ってください。
- 初期化成功時の呼び出し:getReward を呼び出し最適なタイミングは、初期化化成功リスナーのすぐ内側です。これにより、ユーザーが画面に入った瞬間に UI が準備されます。
- 空のステートをチェックします。UI を更新する前に、必ず 0 を超える値を確認してください。これにより、初期化期化中にネットワークワークエラーが発生しても滑らかななユーザー体験が保証されます。
- 配置精度:getReward("placementName") で使用される文字文字列が LevelPlay ダッシュボードで定義された名前と正確に一致していることを確認します。
API 構造体
getReward メソッドを使用すると、LevelPlay ダッシュボードから同期された報酬データにアクセスできます。このメソッドを使用して、ローカル SDK キャッシュに特定の配置値またはグローバル広告単位のデフォルトをクエリします。
getReward
- (LPMReward *)getRewardWithPlacementName:(NSString *)placementName;
特定の配置またはデフォルトの広告単位の報酬の名前と金額を取得します。その他に使用するパラメーターはありません。
パラメーター | 説明 |
|---|---|
| placementName | LevelPlay ダッシュボードで定義されている配置の一意のの識別子。 |
名前 (文字列) と金額 (int) を含む LPMReward オブジェクトを返します。
初期設定
getReward API は、LevelPlay SDK のコア コンポーネントとして機能し、以下のロジックで動作して待ち時間なしでデータを利用できるようにします。
- 統合特徴:報酬データはSDKの初期設定中に取得されるため、API呼び出しは瞬時に行われ、ネットワークリクエストを必要としません。
- エディター設定:アプリケーションを LevelPlay SDK と統合すると、API はすぐに使用できます。この機能をテストするために追加のアセットやプラグインは必要ありません。
報酬選択ロジックについて
API は、特定の階層に基づく LPMReward オブジェクトを返します。このロジックを理解することで、特定の報酬が表示される理由のトラブルシューティングに役立ちます。
- 配置レベル:呼び出しで有効な配置名が指定されている場合、SDKはダッシュボードでその配置に設定された特定の報酬を返します。
- 広告単位レベル:配置名が nil の場合、または見つからなかった場合、SDK は広告単位で定義されたデフォルトの報酬にフォールバックします。
- フォールバック状態:初期化が完了する前に API が呼び出された場合は、空の文字列列名と金額 0 の報酬オブジェクトが返されます。
UIの動的更新
getReward API を使用して、静的ボタンを意図的なアクション喚起に Transform します。例えば、ジェネリックのWatch Videoボタンの代わりに、Watch to Earned 50 Goldとディスプレイできます。
- 検証量:UI コンポーネントを更新する前に、reward.amount が 0 を超えていることを常に確認してください。
- イベント主導型更新:初期化成功リスナー内で API を呼び出して、ユーザーが画面に入った瞬間に UI が正確であることを確認します。
- 大文字と小文字の区別:コード内の配置名の文字文字列が LevelPlay ダッシュボードと正確に一致していることを確認します。文字列が一致しないと、広告単位のフォールフォールバックがトリガーされます。
報酬データ例の取得
以下の例は、iOS 用の reward API の呼び出し方法を示しています。
/** * 広告に関連付けられた報酬を取得します。 * このメソッドを使用して、広告単位または配置に設定された報酬を取得します。ザ * 配置固有の報酬は、有効な配置名の場合は広告単位の報酬よりも優先されます。 * が表示されます。 * @param 配置 報酬を取得する配置名、または広告単位の報酬を使用する`nil`。 * @return A `LPMReward` オブジェクト。失敗した場合は空の報酬を返します (`name: ""` と `amount: 0`)。 */ LPMReward *reward = [self.rewardedAd getRewardWithPlacementName:@"main_menu"];NSLog(@"Reward: %ld %@", (long)reward.amount, reward.name);
getReward API 実装のトラブルシューティング
- Reward amount は 0 を返します。これは通常、onInitializationSuccess コールバックの前に API が呼び出された場合に発生します。ゲーム内報酬のクエリを実行する前に、SDKの準備が完全にできていることを確認します。
- 間違った報酬タイプ:複数のプレースメントがあるかどうかを確認します。配置名のスペルに誤りがある場合、SDKはデフォルトで特定の配置報酬ではなくプライマリ広告単位の報酬を使用します。
リワード型広告のロード
リワード広告をロードするには、loadAd を使用します。
[self.rewardedAd loadAd];
リワード広告の表示
didLoadAd コールバックの受信後にリワード広告を表示します。
- ViewController の共有に必要です。
- プレースメントを使用する場合は、後述のプレースメントのセクションで示すように、showAd API に配置名を渡します。
- ユーザーに広告が正常に表示されたら、ロードステップを繰り返して別の広告をロードできます。
- (void)showRewardedAd { // 広告の準備ができていることを確認します if ([self.rewardedAd isAdReady]) { // 配置なしで表示 [self.rewardedAd showAdWithViewController:self placementName:NULL]; }}
広告の準備ができているか確認
表示の失敗を避け、広告が正しく表示されるようにするために、showAd API を呼び出す前に以下の API を使用することをお勧めします。
isAdReady – 広告のロードが成功し、広告単位が上限に達していない場合は true、それ以外の場合は false を返します。
isPlacementCapped – 有効な配置に上限がある場合に true を返します。配置が有効でないか、上限がない場合、この API は false を返します。
// 広告の準備ができていることと、配置に上限がないことを確認します。 if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) { [self.rewardedAd showAdWithViewController:self placementName:placementName];}
Placements
LevelPlayダッシュボードでは、Rewardedのプレースメント ペーシングと上限設定をサポートしています。
リワード広告にプレースメントが設定されている場合は、 showAd メソッドを呼び出して特定の配置の広告を配信します。
// 広告の準備ができていることと、配置に上限がないことを確認します。if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) { // 配置で広告を表示 [self.rewardedAd showAdWithViewController:self placementName:@"PlacementName"];}
Dynamic UserId
動的ユーザー ID は、AdRewarded トランザクションを検証するために使用されるパラメーターで、セッションを通じて変更できます。このパラメーターは、サーバー間の広告リワード型コールバックを通じて受け取ります。showAd を呼び出す前に設定する必要があります。
- 文字列 値は 1 ~ 64 文字の英数字でなければなりません。
- コールバックURLで報酬の詳細とともにパラメーターを受け取ります。
dynamicUserId
[LevelPlay setDynamicUserId:@"userId"];
ユーザーの報酬
LevelPlay SDK は、ユーザーがビデオを正常に視聴するたびに didRewardAd を起動します。
didRewardAd と didCloseAd は非同期です。didCloseAd の後で didRewardAd が起動された場合でもゲーム内報酬を付与するようにリスナーを設定してください。
- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward { // ユーザーに報酬を付与するロジックを実装します NSString *name = reward.name; NSInteger amount = reward.amount;}
リワード広告の完全な実装例
NS_ASSUME_NONNULL_BEGIN@interface RewardedAdViewController () <LPMRewardedAdDelegate>@プロパティ(非アトミック、強)LPMRewardedAd *rewardedAd;@end@implementation RewardedAdViewController- (void)createRewardedAd { self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"]; self.rewardedAd.delegate = self;}- (void)loadRewardedAd { // 広告のロードまたはリロードに使用 [self.rewardedAd loadAd];}- (void)showRewardedAd { if ([self.rewardedAd isAdReady]) { [self.rewardedAd showAdWithViewController:self placementName:NULL]; }}- (void)showRewardedAdWithPlacementName:(NSString *)placementName { // 広告の準備ができていることと、配置に上限がないことを確認します。 if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) { [self.rewardedAd showAdWithViewController:self placementName:placementName]; }}#pragma mark - LPMRewardedAdDelegate メソッド- (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 {} @endNS_ASSUME_NONNULL_END
LevelPlay Mediation デモアプリケーション
インテグレーション Demo (インテグレーションデモ) アプリケーションは、リワード広告単位 API をアプリケーションに統合する方法を示します。
インテグレーションテストスイートとのインテグレーションを確認します。
次のステップ
インテグレーション ガイドに従って、追加のリワード型広告ネットワークを統合したり、追加の広告フォーマットを設定したりできます。