アプリ起動時広告
AppLovin Flutterプラグイン2.3.0に、アプリ起動時広告フォーマットが導入されました。 アプリ起動時広告はインタースティシャル広告に似ていますが、ユーザーがアプリをソフトローンチ、またはコールドスタートした際に表示されます。
- コールドスタート
- デバイス上にアプリの新規セッションを作成
- アプリがデバイスのメモリ上にない
- スプラッシュ/ロード画面が必須
- ソフトローンチ
- アプリをバックグラウンドからフォアグラウンドに戻す、またはアプリがフォアグラウンドモードのときにスマートフォンの電源を入れる
- アプリがメモリ内で一時停止されている
- スプラッシュ/ロード画面が必須
ベストプラクティス
- アプリ起動時広告が表示される前に、スプラッシュ/ロード画面を使用します。広告がアプリ内にどのように配置されるかに関わらず、これを行ってください。
- スプラッシュ/ロード画面内に、ユーザーに広告が表示されることを知らせるメッセージを追加してください。
- 例:「アプリが読み込まれるまで、スポンサーの広告が表示されます。」
- 広告が表示される前に、実際のアプリコンテンツをユーザーに表示させないようにしてください。 正しい順序は、スプラッシュ/ロード画面 ⇒ アプリ起動時広告 ⇒ アプリコンテンツです。
- スプラッシュ/ロード画面内に、ユーザーに広告が表示されることを知らせるメッセージを追加してください。
- アプリ起動時広告をロードする前に、AppLovin SDKが初期化されるようにしてください。
- アプリ起動時広告のロードが完了していない場合(例:コールドスタート時)、最初にアプリ起動時広告をロードしてください。
他の広告フォーマットは後でロードし、アプリ起動時広告と並行してロードすることは避けてください。
- 複数の広告フォーマットを同時にロードすると、端末のリソースや広告配信SDKにとって良くありません。
- ユーザーにアプリ起動時広告を過度に表示しないようにするため、AppLovinは以下の戦略を検討することをお勧めします。
- AppLovin外部で管理するフリークエンシーキャップを使用する。 これにより、広告が表示されるタイミングを完全にコントロールできるようになります。
- アプリ内のユーザー行動に基づいてクールダウン期間を実装する。 例:一定期間ソフトローンチ中に広告を表示せず、その後再度表示する、あるいは、ソフトローンチのたびにではなく、隔回で広告を表示する。
- 新規ユーザーがアプリを起動して数回使用するまで待ち、最初のアプリ起動時広告を表示する。
リテンション
アプリ起動時広告のフォーマットを実装するときは、常にリテンションを考慮してください。
アプリ起動時広告の場合、さまざまな実装戦略から選択できます。
AppLovinは、以下の手法のうち1つまたは複数を使用してテストすることを推奨します。 各アプリには、リテンションやアプリ滞在時間に影響を与えることなく収益を最大化するための独自の設定があります。 ユーザー行動とエンゲージメントは時間とともに変化する可能性があるため、AppLovinはアプリ起動時広告戦略を定期的に再テストすることをおすすめします。 アプリ起動時広告のテストに使用可能な実装方法は、以下のとおりです。
- 適切なユーザーに表示する。
この手法の例としては、以下のようなものがあります。
- 初回インストール後、アプリのコールドスタート時に表示するまで一定の日数が経過するのを待つ。
- 過去数日間にセッションを行ったユーザーにのみ表示する。
- アプリ内である条件に達したユーザーにのみ表示。 例えば、特定のレベルを完了している、アプリを特定の回数開いている、またはリワード提供にエンゲージしていないなど。
- ユーザーに過剰に広告を表示しないようにする。
この手法の例としては、以下のようなものがあります。
- すべての機会で広告を表示しない。 代わりに、2回に1回、3回に1回、または4回に1回のタイミングで広告を表示する。
- アプリが一定の時間(30秒、2分、15分など)バックグラウンドにある場合にのみ広告を表示する。
- コールドスタート広告を表示する場合、一定期間はソフトローンチのアプリ起動時広告またはインタースティシャルを表示しない。
- 頻度の上限を設定する。可能であれば、ユーザーコホートに基づいて上限をカスタマイズする。
- スプラッシュ画面を使用してユーザーに通知する。
- 上記のベストプラクティスのスプラッシュ画面に関するセクションを参照してください。
アプリ起動時広告を使用
アプリがフォアグラウンドに移動する際にアプリ起動時広告が準備されることを確認するには、アプリ起動時広告をプリロードする必要があります。 広告が表示される前に広告リクエストを行うユーティリティクラスを実装します。 準備ができた広告を表示するメソッドを作成し、アプリがフォアグラウンドになったらそのメソッドを呼び出します。
アプリはその後、アプリが起動した際に広告を表示するか、プリロードされていない場合は広告を読み込みます。
アプリのフォアグラウンドイベントを受信
アプリのフォアグラウンドイベントの通知を受けるには、WidgetsBindingObserver
を登録し、didChangeAppLifecycleState
メソッドをオーバーライドします。
これにより、アプリの起動とフォアグラウンドイベントがアプリに通知され、広告を表示できます。
コールドスタートとロード画面
広告をリクエストしてから表示したい広告を受け取るまでには遅延が発生します。 アプリの設計を適切に行わないと、ユーザーが一アプリを見た際に文脈にそぐわない広告が表示され、驚かせてしまう可能性があります。 これはユーザーにとって良くない体験となるため、避ける必要があります。 コールドスタート時に推奨される方法は、アプリコンテンツの前にロード画面を表示し、ロード画面の後に広告を表示することです。 ロード画面の後にアプリのコンテンツを表示する場合は、広告を表示しないでください。
アプリ起動時広告の下にロード画面が表示され、広告が閉じられる前にロード画面が完了する場合は、onAdHiddenCallback
メソッドでロード画面を解除できます。
例
このコード例は、アプリがメモリ上で一時停止中の「ソフトローンチ」でのみ、アプリ起動時広告が表示されることを前提としています。 スプラッシュ/ロード画面は含まれません。 アプリ開発者はスプラッシュ/ロード画面を処理する必要があります。ベストプラクティスをご覧ください。
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); MaxConfiguration? configuration = await AppLovinMAX.initialize(_sdkKey); if (configuration != null) { _isInitialized = true; } runApp(const MyApp());}
class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key);
@override State<MyApp> createState() => _MyAppState();}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver { @override void initState() { super.initState();
if (_isInitialized) { AppLovinMAX.setAppOpenAdListener(AppOpenAdListener( onAdLoadedCallback: (ad) {}, onAdLoadFailedCallback: (adUnitId, error) {}, onAdDisplayedCallback: (ad) { }, onAdDisplayFailedCallback: (ad, error) { AppLovinMAX.loadAppOpenAd(_appOpenAdUnitId); }, onAdClickedCallback: (ad) {}, onAdHiddenCallback: (ad) { AppLovinMAX.loadAppOpenAd(_appOpenAdUnitId); }, onAdRevenuePaidCallback: (ad) {}, ));
AppLovinMAX.loadAppOpenAd(_appOpenAdUnitId); }
WidgetsBinding.instance.addObserver(this); }
@override void dispose() { WidgetsBinding.instance.removeObserver(this);
super.dispose(); }
@override Future<void> didChangeAppLifecycleState(AppLifecycleState state) async { switch (state) { case AppLifecycleState.resumed: await showAdIfReady(); break;
case AppLifecycleState.paused: case AppLifecycleState.inactive: case AppLifecycleState.detached: break; } }
Future<void> showAdIfReady() async { if (!_isInitialized) { return; }
bool isReady = (await AppLovinMAX.isAppOpenAdReady(_appOpenAdUnitId))!; if (isReady) { AppLovinMAX.showAppOpenAd(_appOpenAdUnitId); } else { AppLovinMAX.loadAppOpenAd(_appOpenAdUnitId); } }
⋮}
サポートされているアダプターバージョン
アドネットワーク | 最小アダプターバージョン |
---|---|
BIGO Ads | 4.5.1.0(Android)、4.2.1.0(iOS) |
Google BiddingおよびGoogle AdMob | 22.2.0.2 (Android)、10.9.0.1 (iOS) |
Liftoff Monetize | 6.12.0.2 (Android)、6.12.0.3 (iOS) |
Mintegral | 16.6.61.1 (Android)、7.2.3.0.1 (iOS) |
Pangle | 4.6.0.4.0 (Android)、4.6.2.2.1 (iOS) |