概要
バナー広告は、画面の一部領域に表示される長方形の広告です。UIKitとSwiftUIの両方で使用できます。主な特徴
- 画面の上部、下部、または中央に固定配置可能
- 画像および動画広告に対応
- UIKitおよびSwiftUIの両方をサポート
- デリゲートによる広告イベント処理
開発環境ではテストユニットIDを使用してください:
PUBLIC_TEST_UNIT_ID_320_100UIKit実装
UIKit環境ではAdropBannerクラスを使用してバナー広告を実装します。
基本実装
AdropBannerの初期化
String
必須
Adropコンソールで作成したユニットID
広告の読み込み
バナーを画面に追加した後、load()メソッドを呼び出して広告をリクエストします。
Context IDの設定
コンテキストターゲティングのためにContext IDを設定できます。SwiftUI実装
SwiftUI環境ではAdropBannerRepresentedを使用してバナー広告を実装します。
基本実装
デリゲート処理
デリゲートを通じて広告イベントを処理できます。Context IDの設定
Objective-C実装
Objective-C環境でバナー広告を実装する方法です。基本実装
Context IDの設定
デリゲートメソッド
AdropBannerDelegateプロトコルは広告のライフサイクルイベントを処理します。
onAdReceived (必須)
広告受信が成功したときに呼び出されます。onAdFailedToReceive (必須)
広告受信が失敗したときに呼び出されます。onAdImpression (オプション)
広告が画面に表示されたときに呼び出されます。onAdClicked (オプション)
ユーザーが広告をクリックしたときに呼び出されます。onAdVideoStart (オプション)
動画広告の再生が開始されたときに呼び出されます。onAdVideoEnd (オプション)
動画広告の再生が完了したときに呼び出されます。クロージャコールバック
デリゲートの代わりにクロージャベースのコールバックを使用できます。デリゲートとクロージャの両方を設定すると、両方が呼び出されます。
ライフサイクル管理
destroy()
バナーを使用しなくなったらdestroy() を呼び出してリソースを解放してください。WebView、トラッキング、動画再生などバナーが保持しているリソースを能動的にクリーンアップします。
destroy() は idempotent なので複数回呼び出しても安全ですが、呼び出し後は該当インスタンスを再利用できません。
広告サイズ
バナー広告は、ユニットに設定したサイズに合わせてビューのサイズを指定する必要があります。一般的なバナーサイズ
UIKit
SwiftUI
ベストプラクティス
1. メモリ管理
ビューコントローラーが解放されるときにdestroy() を呼び出してバナーリソースをクリーンアップしてください。
2. 画面の可視性
バナーが画面に表示されるときに広告を読み込んでください。3. バナーインスタンスの再利用
AdropBanner インスタンスは1つだけ保持し、新しい広告が必要になるたびに load() を再度呼び出してください。広告更新のたびに新しい AdropBanner を作成しないでください。
バナーを毎回作り直すと、リクエストごとに新しい WKWebView と WebContent プロセスが割り当てられます。特にビデオバナーで頻繁に更新を繰り返すと、リソースが蓄積してレンダリングパフォーマンスに影響する可能性があります。
load() を再度呼び出すたびに onAdReceived が再度呼び出されるため、既存のデリゲートが新しい広告を自動的に処理します。4. エラー処理
広告読み込み失敗時に適切なエラー処理を実装してください。テストユニットID
開発およびテスト時には以下のテストユニットIDを使用してください。使用例
動画再生制御
動画バナー広告の場合、play()とpause()を使用してビデオ再生を手動で制御できます。
play()
動画の再生を再開します。ポップアップが閉じたり、アプリがバックグラウンドから復帰してバナーが再び表示されるときに呼び出してください。pause()
動画の再生を一時停止します。バナーがポップアップで隠れたり、アプリがバックグラウンドに移行するときに呼び出してください。例:バックグラウンド/フォアグラウンドの処理
play()とpause()は動画バナー広告にのみ影響します。画像バナーには効果がありません。カスタムクリック処理
useCustomClickを使用して、広告クリック動作を直接制御できます。有効にすると、SDKはクリック時に自動的にデスティネーションURLを開かず、自分で処理できます。
useCustomClick
useCustomClickがtrueの場合、広告クリック時にSDKが自動的にデスティネーションURLを開きません。onAdClickedデリゲートコールバックは引き続き呼び出され、open()メソッドを使用するか、ナビゲーションを自分で処理できます。
open()
広告のデスティネーションURLを開きます。オプションでカスタムURLを渡すことができます。一括ロード (loads)
AdropBanner.loads(...)を使用すると、1回の呼び出しで複数のバナー広告をまとめてリクエストできます。カルーセルやページネーション付きフィード、広告プールのプリフェッチなどに有用です。
シグネチャ
使用方法
デリゲートメソッド
定数
Int
デフォルト:"5"
1回の
loads(...)呼び出しで返却される広告の最大数。制約事項
- 呼び出しあたり最大5個。 サーバーがそれ以上を返しても先頭の5個のみ配信されます。
- バックフィルは適用されません。 ダイレクト広告が埋まらない場合、バックフィル設定に関わらず
onAdsFailedToReceiveがERROR_CODE_AD_NO_FILLで呼ばれます。 onAdsReceivedの中でdestroy()を呼び出さないでください。 まず各バナーをビュー階層に追加してから、ビューコントローラーが解放されるタイミングでdestroy()を呼び出してください。onAdsReceivedは広告データが適用され次第発火し、単体load()と同じ動作です — ビューに追加後にクリエイティブが描画されます。- 返却されたバナーへの強参照を保持してください(例: ビューコントローラーに保存)。ビュー階層に追加される前に解放されると黙って破棄されます。
バックフィル広告
バックフィル広告が有効な場合、ダイレクト広告がない時に自動的にバックフィル広告がロードされます。isBackfilledプロパティでバックフィル広告かどうかを確認できます。
バックフィル広告を使用するには、
AdropAds-Backfill依存性を追加する必要があります。はじめにを参照してください。バックフィル広告のプリロード (preload)
SDK 1.17.0から、AdropBanner.preload()でバックフィルバナー広告をプリロードしておくことができます。同じユニットIDと同じサイズでload()したバナーが、ダイレクト広告なしでバックフィル広告に切り替わると、バックフィル広告を再度リクエストせず、プリロードしておいた広告をすぐに表示します。
load()はpreloadに関係なく、まずダイレクト広告をリクエストします。ダイレクト広告が表示された場合、プリロードしておいた広告はそのまま残ります。preloadを呼び出さなければ、動作はこれまでと同じです。
動作条件
adrop-adsとadrop-ads-backfillの両方が1.17.0以降である必要があります。- 現在表示するダイレクト広告がないとサーバーからアプリに通知されている状態でのみ、バックフィル広告を受信します。それ以外の場合は、バックフィル広告をリクエストせずに
ERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。ダイレクト広告のキャンペーンがあるアプリでは正常な結果です。 - アプリのインストール直後、アプリキーを変更した直後、
setUIDで別のユーザーに切り替えた直後は、サーバーの応答を受信するまでERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。 - テストユニットIDでは常に
ERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。
使用方法
バナーがある画面を表示する直前に呼び出してください。プリロードした広告は使用されないと30分後に破棄されるため、すぐに表示するバナーに対してのみ呼び出してください。結果を待ってからload()する必要はありません。まだ受信中の場合は、load()がその結果を待って使用します。
delegateは弱参照で保持されます。結果コールバックを受け取るには、結果が届くまでdelegateオブジェクトを保持してください。
load()を呼び出す前に、バナーのframeのサイズをpreloadに渡したadSizeと同じに合わせてください。
プリロードした広告が使われる条件
- 同じユニットIDと同じサイズ:
load()するときに、バナーのframeのサイズがpreloadに渡したadSizeと同じである必要があります。Auto Layoutだけでサイズを決める場合、load()の時点ではサイズがまだ決まっていないことがあります。サイズが異なる場合、プリロードした広告はそのまま残り、load()は通常どおりバックフィル広告をリクエストします。 - 画面とは無関係: preloadはビューコントローラーを受け取りません。別の画面でプリロードした広告も、
load()したバナーに使用されます。 - 一度だけ使用: プリロードした広告は、1回の
load()で使用されるとなくなります。再度プリロードするには、preloadをもう一度呼び出してください。 - 有効期間と個数: 30分以内に使用されなかった広告は破棄されます。同じユニット・サイズには1個のみ保持し、バナーは異なるユニット・サイズの組み合わせを最大5個まで保持します。5個を超えると、最も早く受信した広告から破棄します。
- 再度呼び出す場合: 同じユニット・サイズで再度呼び出しても、新たにリクエストしません。受信済みの広告がある場合は新しいリクエストなしで
onAdPreloadReceivedが呼び出され、受信中の場合はそのロードの結果(成功または失敗)がそのまま伝えられます。広告を更新する用途には使用できません。ただし、その間にユーザーの同意状態が変わった場合は、既存の広告を破棄して新たに受信します。 - 同意状態の変更: プリロードした後にユーザーの同意状態が変わると、その広告は
load()に使用されません。
結果デリゲートメソッド
AdropBannerDelegateに次のオプションメソッドが追加されました。preloadを呼び出すたびに、いずれか一方がメインスレッドで1回呼び出されます。preloadでは、ほかのdelegateメソッドは呼び出されません。
2番目の引数
contextIdは、preloadに渡した値をそのまま返します(デフォルト:空文字列)。プリロードした広告の選択には使用されません。
失敗コード
次のステップ
ネイティブ広告
UIに合わせてカスタマイズ可能なネイティブ広告の実装
インタースティシャル広告
画面全体を覆うインタースティシャル広告の実装
ターゲティング設定
ユーザー属性とコンテキストターゲティングの設定
リファレンス
クラス、デリゲート、エラーコードの参照