
前提条件
アプリ内メッセージを統合する前に、app/build.gradle に以下の依存関係を追加します。
- MoEngage In-App モジュール — BOM を使用した統合を推奨します。BOM を使用したインストールを参照してください。BOM を構成すると、バージョン番号は自動的に管理されます。
- Glide — In-App バージョン 7.0.0 以降、SDK はアプリ内メッセージで画像と GIF を描画するために Glide を必要とします。実行時に Glide がない場合、画像や GIF を含むアプリ内メッセージはクラッシュします。
注: これらの依存関係にはバージョン番号は不要です。BOM がバージョンを自動的に管理します。
アプリ内メッセージの表示
MoEngage は、meta API 呼び出しを介して対象となるアプリ内キャンペーンのリストを更新します。アクティブなセッション中は、アプリがバックグラウンドからフォアグラウンドに戻ったときにリストが更新され (最大で 15 分に 1 回)、新しいセッションが開始されたとき、またはアプリが強制終了されて再起動されたときには即座に更新されます。
Nudge の表示
バージョン **7.0.0** 以降、MoEngage InApp SDK は邪魔にならない (Non-Intrusive) Nudge の表示をサポートしています。 MoEngage はデフォルトでは Nudge を表示できないため、アプリはユーザーに Nudge を表示する必要がある箇所で以下のメソッドを呼び出す必要があります。このメソッドは、Activity の onStart() または Fragment の onResume() に追加することを推奨します。MoEInAppHelper.getInstance().showNudge(context)構成変更の処理
SDK バージョン 11.4.00 以降、アプリ内メッセージは縦向きモードと横向きモードの両方でサポートされています。Activity の再起動がシステムによって処理される場合、SDK は画面の向きの変更時のアプリ内メッセージの表示を内部で処理します。 Activity が構成変更を独自に処理している場合は、Activity がフレームワークから onConfigurationChanged() コールバックを受け取ったときに、MoEInAppHelper.getInstance().onConfigurationChanged() API を呼び出して SDK に通知し、SDK がアプリ内メッセージを再描画できるようにする必要があります。コンテキストに応じたアプリ内メッセージ
アプリ内キャンペーンを特定の画面/Activity に制限するだけでなく、アプリケーション内のユーザーのコンテキストに基づいてアプリ内メッセージを制限することもできます。アプリケーション内のユーザーのコンテキストを設定するには、以下のように setInAppContext() API を使用します。コンテキストの設定
showInApp() を呼び出す前に、Activity または Fragment の onStart() で以下のメソッドを呼び出します。コンテキストのリセット
ユーザーがそのコンテキストから離れたら、restInAppContext() API を使用して既存のコンテキストをリセット/クリアします。WebView のカスタマイズ
In-App SDK バージョン 9.6.0 以降、SDK は HTML アプリ内メッセージの描画に使用される基盤の WebView のカスタマイズをサポートしています。これにより、HTML アプリ内メッセージの描画に使用される WebView に対して、WebView の設定の変更、カスタム JavaScript インターフェースの追加、その他の構成の実装が可能になります。 WebView をカスタマイズするには、MoEInAppHelper.getInstance().setInAppWebViewCustomizer() API を呼び出す必要があります。この API を使用して定義したカスタム設定は、MoEngage In-App のデフォルトの WebView 設定をオーバーライドします。
セルフハンドルのアプリ内メッセージ
セルフハンドルのアプリ内メッセージとは、SDK がアプリケーションに配信するメッセージであり、アプリケーションは SDK が配信したペイロードを使用して UI を構築します。単一のセルフハンドルのアプリ内メッセージ
セルフハンドルのアプリ内メッセージを取得するには、以下の API を使用します。上記のメソッドは非同期であり、ペイロードをすぐには返しません。ペイロードが利用可能になると、リスナーのコールバックである onSelfHandledAvailable() がペイロードとともに呼び出されます。
イベントトリガー型のセルフハンドルのアプリ内メッセージ
イベントトリガー型のコールバックを受け取るには、SelfHandledAvailableListener を実装し、MoEInAppHelper.getInstance().setSelfHandledListener() を使用してリスナーを登録します。キャンペーンが利用可能になると、SDK は登録されたリスナーに通知します。 トリガーイベントが複数の画面で発生する可能性がある場合は、このリスナーを Application クラスの onCreate() で登録することを推奨します。複数のセルフハンドルのアプリ内メッセージ
- この機能には、カタログバージョン 4.5.0 以上が必要です
- イベントトリガー型の複数のセルフハンドルのアプリ内メッセージはサポートされていません。
上記のメソッドは非同期であり、ペイロードをすぐには返しません。ペイロードが利用可能になると、リスナーの onCampaignsAvailable() コールバックがペイロードとともに呼び出されます。
複数のセルフハンドルのアプリ内メッセージの統計情報のトラッキング
onCampaignsAvailable() コールバックメソッドは、SelfHandledCampaignData オブジェクトのリストを含む SelfHandledCampaignsData を返します。各 SelfHandledCampaignData オブジェクトの統計情報は、以下の API を使用して個別にトラッキングする必要があります。コンテキストに応じた複数のセルフハンドルのアプリ内メッセージの取得
コンテキストに応じた複数のセルフハンドルのアプリ内メッセージを取得するには、*getSelfHandledInApps()* を呼び出す前に、setInAppContext() を使用してアプリ内メッセージのコンテキストを設定します。これにより、コンテキストありとコンテキストなしのアプリ内メッセージのリスト (キャンペーン作成時に設定されたキャンペーンの優先度順) が返されます。キャンペーンの選択ロジック
- デフォルトの上限: デフォルトでは、5 つのキャンペーンのみが取得されます。
- 優先度に基づく選択: キャンペーンは、優先度と最終更新日時に基づいて配信されます。まず優先度を確認し、優先度が競合する場合は最終更新日時を確認します。
- 除外基準: キャンペーンは、フリークエンシーキャップ、適格性の基準、キャンペーンのステータス、優先度の上限などの特定のルールに基づいてのみ除外されます。
- コンテキスト 1: キャンペーン 1 (P0, T2)、キャンペーン 2 (P1, T3)、キャンペーン 3 (P2, T6)
- コンテキスト 2: キャンペーン 4 (P0, T1)、キャンペーン 5 (P1, T5)
- コンテキスト 3: キャンペーン 6 (P0, T4)
- ユーザーの適格性とターゲティング基準でキャンペーンをフィルタリングする
- キャンペーンの優先度 (P0、P1、P2 など) で並べ替える
- 優先度が同じキャンペーンは、最新の更新タイムスタンプで並べ替える
- 上位 5 つのキャンペーンを返す
複数のセルフハンドルキャンペーンにおけるキャンペーン構成のベストプラクティス
1 つのページで複数のコンテキストにわたって最適なパフォーマンスを得るには、以下のようにキャンペーンを構成します。- コンテキスト 1 (ホームページ): キャンペーン A (P0)、キャンペーン B (P1)
- コンテキスト 2 (商品): キャンペーン C (P0)、キャンペーン D (P1)
- コンテキスト 3 (チェックアウト): キャンペーン E (P0)
セルフハンドルのアプリ内メッセージの統計情報のトラッキング
アプリ内メッセージの表示、クリック、閉じる操作はアプリケーションが制御するため、これらが発生するたびにアプリケーションは MoEngage SDK に通知する必要があります。SDK に通知するには、以下のメソッドを呼び出します。セルフハンドルのアプリ内メッセージのコールバックでアプリケーションに提供されるデータオブジェクト SelfHandledCampaignData を、以下の API のパラメーターとして渡す必要があります。アプリ内メッセージのコールバック
ライフサイクルコールバック
アプリ内キャンペーンが表示または閉じられるたびにコールバックを受け取るには、InAppLifeCycleListener を実装し、MoEInAppHelper.getInstance().addInAppLifeCycleListener() を使用してコールバックを登録します。クリックコールバック
ユーザーのナビゲーションやカスタムアクションを処理するために、SDK は、ナビゲーションアクションまたはカスタムアクションが設定されたアプリ内ウィジェットがクリックされるたびにコールバックを提供します。コールバックを受け取るには、OnClickActionListener インターフェースを実装し、MoEInAppHelper.getInstance().setClickActionListener() を使用してコールバックを登録します。画面でのアプリ内メッセージのブロック
さらに、InAppConfig オブジェクトを使用して、特定の画面でアプリ内メッセージをブロックしたり、ステータスバーの表示を制御したりでき、そのオブジェクトを MoEngage.Builder オブジェクトを使用して SDK に渡します。configureInApps() API を使用して、構成を SDK に渡します。アプリ内メッセージのテスト
アプリ内メッセージの作成方法とテスト方法の詳細については、こちらのリンクを参照してください。埋め込み Nudge の実装 (非推奨)
InApp バージョン 7.0.0 以降、埋め込み Nudge はサポートされなくなりました。

Activity での使用
Activity の onCreate() で Nudge ビューのインスタンスを取得し、onStart() で Nudge ビューを初期化します。Fragment での使用
Fragment の onCreateView() で Nudge ビューのインスタンスを取得し、onResume() で Nudge ビューを初期化します。 以下のコードを使用して NudgeView のインスタンスを取得し、初期化します。よくある質問
Android の HTML アプリ内メッセージで <input type='file'> やカメラ/ギャラリーからのアップロードが機能しないのはなぜですか?
Android の HTML アプリ内メッセージで <input type='file'> やカメラ/ギャラリーからのアップロードが機能しないのはなぜですか?
- In-App SDK バージョン 9.6.0 以上の場合は、WebView のカスタマイズを参照してください。
- In-App SDK バージョン 9.6.0 未満を使用している場合は、以下の手順を実行します。
- Android のデフォルトの WebView はファイル入力をサポートしていません。この機能を有効にするには、HTML からカスタムアクションをトリガーし、OnClickActionListener を使用してネイティブで処理します。
リスナー内で、ネイティブのファイルピッカーまたはカメラのロジックを起動します。アプリが CAMERA や READ_EXTERNAL_STORAGE などの必要なランタイム権限をリクエストしていることを確認してください。
- Android のデフォルトの WebView はファイル入力をサポートしていません。この機能を有効にするには、HTML からカスタムアクションをトリガーし、OnClickActionListener を使用してネイティブで処理します。

- iOS では、ファイル入力はデフォルトで機能します。ただし、クロスプラットフォームで一貫した実装にするため、同じカスタムアクションのアプローチを使用することを推奨します。