アプリ起動時広告
AppLovin SDK v11.5.0では、App Open Ad形式が導入されています。アプリ起動時広告はインタースティシャル広告と似ていますが、ユーザーがアプリをソフトローンチまたはコールドスタートしたときに表示されます。
- コールドスタート
- デバイス上にアプリの新規セッションを作成
- アプリがデバイスのメモリ上にない
- スプラッシュ/ロード画面が必須
- ソフトローンチ
- アプリをバックグラウンドからフォアグラウンドに戻す、またはアプリがフォアグラウンドモードのときにスマートフォンの電源を入れる
- アプリがメモリ内で一時停止されている
- スプラッシュ/ロード画面が必須
ベストプラクティス
- アプリ起動時広告が表示される前に、スプラッシュ/ロード画面を使用します。広告がアプリ内にどのように配置されるかに関わらず、これを行ってください。
- スプラッシュ/ロード画面内に、ユーザーに広告が表示されることを知らせるメッセージを追加してください。
- 例:「アプリが読み込まれるまで、スポンサーの広告が表示されます。」
- 広告が表示される前に、実際のアプリコンテンツをユーザーに表示させないようにしてください。 正しい順序は、スプラッシュ/ロード画面 ⇒ アプリ起動時広告 ⇒ アプリコンテンツです。
- スプラッシュ/ロード画面内に、ユーザーに広告が表示されることを知らせるメッセージを追加してください。
- アプリ起動時広告をロードする前に、AppLovin SDKが初期化されるようにしてください。
- アプリ起動時広告のロードが完了していない場合(例:コールドスタート時)、最初にアプリ起動時広告をロードしてください。
他の広告フォーマットは後でロードし、アプリ起動時広告と並行してロードすることは避けてください。
- 複数の広告フォーマットを同時にロードすると、端末のリソースや広告配信SDKにとって良くありません。
- ユーザーにアプリ起動時広告を過度に表示しないようにするため、AppLovinは以下の戦略を検討することをお勧めします。
- AppLovin外部で管理するフリークエンシーキャップを使用する。 これにより、広告が表示されるタイミングを完全にコントロールできるようになります。
- アプリ内のユーザー行動に基づいてクールダウン期間を実装する。 例:一定期間ソフトローンチ中に広告を表示せず、その後再度表示する、あるいは、ソフトローンチのたびにではなく、隔回で広告を表示する。
- 新規ユーザーがアプリを起動して数回使用するまで待ち、最初のアプリ起動時広告を表示する。
リテンション
アプリ起動時広告のフォーマットを実装するときは、常にリテンションを考慮してください。
アプリ起動時広告の場合、さまざまな実装戦略から選択できます。
AppLovinは、以下の手法のうち1つまたは複数を使用してテストすることを推奨します。 各アプリには、リテンションやアプリ滞在時間に影響を与えることなく収益を最大化するための独自の設定があります。 ユーザー行動とエンゲージメントは時間とともに変化する可能性があるため、AppLovinはアプリ起動時広告戦略を定期的に再テストすることをおすすめします。 アプリ起動時広告のテストに使用可能な実装方法は、以下のとおりです。
- 適切なユーザーに表示する。
この手法の例としては、以下のようなものがあります。
- 初回インストール後、アプリのコールドスタート時に表示するまで一定の日数が経過するのを待つ。
- 過去数日間にセッションを行ったユーザーにのみ表示する。
- アプリ内である条件に達したユーザーにのみ表示。 例えば、特定のレベルを完了している、アプリを特定の回数開いている、またはリワード提供にエンゲージしていないなど。
- ユーザーに過剰に広告を表示しないようにする。
この手法の例としては、以下のようなものがあります。
- すべての機会で広告を表示しない。 代わりに、2回に1回、3回に1回、または4回に1回のタイミングで広告を表示する。
- アプリが一定の時間(30秒、2分、15分など)バックグラウンドにある場合にのみ広告を表示する。
- コールドスタート広告を表示する場合、一定期間はソフトローンチのアプリ起動時広告またはインタースティシャルを表示しない。
- 頻度の上限を設定する。可能であれば、ユーザーコホートに基づいて上限をカスタマイズする。
- スプラッシュ画面を使用してユーザーに通知する。
- 上記のベストプラクティスのスプラッシュ画面に関するセクションを参照してください。
アプリ起動時広告を使用
アプリがフォアグラウンドに移動した時にアプリ起動時広告が準備できていることを確認するには、MaxAppOpenAd
をプリロードする必要があります。
ユーティリティクラスを作成し、Application
クラス内でインスタンス化します。
これにより、必要な広告表示の前に、そのクラスが広告リクエストを行うことができます。
広告が準備できていれば表示するメソッドを作成して、Lifecycle.Event.ON_START
ライフサイクルイベント内でこのメソッドを呼び出します。
アプリはその後、アプリが起動した際に広告を表示するか、プリロードされていない場合は広告を読み込みます。
アプリのフォアグラウンド イベントをリッスンする
アプリのフォアグラウンドイベントの通知を受けるには、LifecycleObserver
を登録する必要があります。
ライフサイクルライブラリをアプリケーションレベルのbuild.gradle
ファイルに追加しなければならない場合があります。
implementation("androidx.lifecycle:lifecycle-process:2.2.0")
コールドスタートとロード画面
広告をリクエストしてから表示したい広告を受け取るまでには遅延が発生します。 アプリの設計を適切に行わないと、ユーザーが一アプリを見た際に文脈にそぐわない広告が表示され、驚かせてしまう可能性があります。 これはユーザーにとって良くない体験となるため、避ける必要があります。 コールドスタート時に推奨される方法は、アプリコンテンツの前にロード画面を表示し、ロード画面の後に広告を表示することです。 ロード画面の後にアプリのコンテンツを表示する場合は、広告を表示しないでください。
アプリ起動時広告の下にロード画面が表示され、広告が閉じられる前にロード画面が完了する場合があります。
その場合、onAdHidden()
メソッドでロード画面を解除できます。
例
このコード例は、アプリがメモリ上で一時停止中の「ソフトローンチ」でのみ、アプリ起動時広告が表示されることを前提としています。 スプラッシュ/ロード画面は含まれません。 アプリ開発者はスプラッシュ/ロード画面を処理する必要があります。ベストプラクティスをご覧ください。
public class MyApplication extends Application{ private final ExampleAppOpenManager appOpenManager;
@Override public void onCreate() { super.onCreate();
AppLovinSdk.initializeSdk( this, new AppLovinSdk.SdkInitializationListener() { @Override public void onSdkInitialized(final AppLovinSdkConfiguration configuration) { appOpenManager = new ExampleAppOpenManager( this ); } } ); }}
public class ExampleAppOpenManager implements LifecycleObserver, MaxAdListener{ private final MaxAppOpenAd appOpenAd; private final Context context;
public AppOpenManager(final Context context) { ProcessLifecycleOwner.get().getLifecycle().addObserver( this );
this.context = context;
appOpenAd = new MaxAppOpenAd( "«ad-unit-ID»", context); appOpenAd.setListener( this ); appOpenAd.loadAd(); }
private void showAdIfReady() { if ( appOpenAd == null || !AppLovinSdk.getInstance( context ).isInitialized() ) return;
if ( appOpenAd.isReady() ) { appOpenAd.showAd( "«test-placement»" ); } else { appOpenAd.loadAd(); } }
@OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { showAdIfReady(); }
@Override public void onAdLoaded(final MaxAd ad) {} @Override public void onAdLoadFailed(final String adUnitId, final MaxError error) {} @Override public void onAdDisplayed(final MaxAd ad) {} @Override public void onAdClicked(final MaxAd ad) {}
@Override public void onAdHidden(final MaxAd ad) { appOpenAd.loadAd(); }
@Override public void onAdDisplayFailed(final MaxAd ad, final MaxError error) { appOpenAd.loadAd(); }}
class MyApplication : Application(){ private lateinit var appOpenManager: ExampleAppOpenManager
override fun onCreate() { super.onCreate()
AppLovinSdk.getInstance( this ).initializeSdk({ configuration: AppLovinSdkConfiguration -> { appOpenManager = ExampleAppOpenManager(applicationContext) }) }}
class ExampleAppOpenManager(applicationContext: Context?) : LifecycleObserver, MaxAdListener{ private lateinit var appOpenAd: MaxAppOpenAd private lateinit var context: Context
init { ProcessLifecycleOwner.get().lifecycle.addObserver(this)
context = applicationContext
appOpenAd = MaxAppOpenAd("«ad-unit-ID»", applicationContext!!) appOpenAd.setListener(this) appOpenAd.loadAd() }
private fun showAdIfReady() { if (appOpenAd == null || !AppLovinSdk.getInstance(context).isInitialized) return
if (appOpenAd.isReady) { appOpenAd.showAd("«test-placement»") } else { appOpenAd.loadAd() } }
@OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() { showAdIfReady() }
override fun onAdLoaded(ad: MaxAd) {} override fun onAdLoadFailed(adUnitId: String, error: MaxError) {} override fun onAdDisplayed(ad: MaxAd) {} override fun onAdClicked(ad: MaxAd) {}
override fun onAdHidden(ad: MaxAd) { appOpenAd.loadAd() }
override fun onAdDisplayFailed(ad: MaxAd, error: MaxError) { appOpenAd.loadAd() }}
サポートされているアダプターのバージョン
アドネットワーク | アダプターの最小バージョン |
---|---|
BIGO Ads | 4.5.1.0 |
Google 入札と Google AdMob | 22.2.0.2 |
Liftoffマネタイズ | 6.12.0.2 |
Mintegral | 16.6.61.1 |
Pangle | 4.6.0.4.0 |