Firebase In-App Messaging のメッセージの動作を変更する

Firebase In-App Messaging を使用すると、コーディング作業をほとんど行うことなく、ユーザーとの多種多様なインタラクションを作成、構成、ターゲティングできます。Google アナリティクスの機能をそのまま活用して、ユーザーの実際の特性、アクティビティ、選択にメッセージング イベントを関連付けることができます。Firebase In-App Messaging SDK を追加で統合することで、アプリ内メッセージの動作をさらに調整できます。たとえば、ユーザーがメッセージを操作した際に応答する、アナリティクス フレームワークの外部にあるメッセージ イベントをトリガーする、メッセージングの操作に関連する個人データの共有の制御をユーザーに許可するなどが可能になります。

ユーザーがアプリ内メッセージを操作した場合に応答する

アクションを使用すると、アプリ内メッセージを使用してユーザーをウェブサイトまたはアプリの特定の画面に誘導できます。

コードを使用して、基本的な操作(クリックと閉じる)、インプレッション数(メッセージの検証済み視聴回数)、SDK によって記録および確認された表示エラーに応答できます。たとえば、メッセージがカードモーダルとして作成されている場合は、ユーザーがカードで 2 つの URL のどちらをクリックしたかを追跡してフォローアップできます。

カード操作のイベント リスナーを実装する

デベロッパーのワークフローでは、ユーザーのアクティビティ(インプレッションの表示、メッセージのクリック)に対応するインターフェースに準拠するイベント リスナークラスを実装するか、エラーを表示してから FirebaseInAppMessaging インスタンスにイベント リスナーを登録します。

たとえば、ユーザーがカード形式のメッセージでクリックしたリンクを追跡できるようにするには、FirebaseInAppMessagingClickListener インターフェースに従って messageClicked メソッドを実装するクラスを定義することで、アプリ内メッセージングの Action オブジェクトにアクセスできるようにします。これにより、ユーザーがクリックしたリンク内の URL が明らかになります。

まず、クリック リスナーを実装します。

Kotlin+KTX

class MyClickListener : FirebaseInAppMessagingClickListener {

    override fun messageClicked(inAppMessage: InAppMessage, action: Action) {
        // Determine which URL the user clicked
        val url = action.actionUrl

        // Get general information about the campaign
        val metadata = inAppMessage.campaignMetadata

        // ...
    }
}

Java

public class MyClickListener implements FirebaseInAppMessagingClickListener {

    @Override
    public void messageClicked(InAppMessage inAppMessage, Action action) {
        // Determine which URL the user clicked
        String url = action.getActionUrl();

        // Get general information about the campaign
        CampaignMetadata metadata = inAppMessage.getCampaignMetadata();

        // ...
    }

}

次に、そのリスナーを登録します。

Kotlin+KTX

val listener = MyClickListener()
Firebase.inAppMessaging.addClickListener(listener)

Java

MyClickListener listener = new MyClickListener();
FirebaseInAppMessaging.getInstance().addClickListener(listener);

実装可能なコールバック メソッドとそのパラメータについては、適切な Android Listener インターフェース リファレンス(FirebaseInAppMessagingImpressionListenerFirebaseInAppMessagingClickListenerFirebaseInAppMessagingDisplayErrorListener)をご覧ください。

プログラムでアプリ内メッセージをトリガーする

Firebase In-App Messaging のデフォルトでは、追加の統合を行わなくても、Firebase 向け Google アナリティクスのイベントを使用してアプリ内メッセージをトリガーできます。また、Firebase In-App Messaging SDK のプログラム トリガーを使用して、プログラムでイベントを手動でトリガーすることもできます。

In-App Messaging のキャンペーン作成ツールでキャンペーンを新規作成するか、既存のキャンペーンを選択します。作成ツールのワークフローのスケジュール設定のステップで、新規または既存のメッセージング イベントのイベント ID をメモします。メモしたら、ID によりイベントをトリガーするようにアプリを準備します。

Kotlin+KTX

// somewhere in the app's code
Firebase.inAppMessaging.triggerEvent("exampleTrigger")

Java

// somewhere in the app's code
FirebaseInAppMessaging.getInstance().triggerEvent("exampleTrigger");

キャンペーンのカスタム メタデータを使用する

キャンペーンでは、一連の Key-Value ペアでカスタムデータを指定できます。たとえば、ユーザーがメッセージを操作したときに、このデータを使用してプロモーション コードを表示できます。

Kotlin+KTX

class MyClickListenerBundles : FirebaseInAppMessagingClickListener {

    override fun messageClicked(inAppMessage: InAppMessage, action: Action) {
        // Determine which URL the user clicked
        val url = action.actionUrl

        // Get data bundle for the inapp message
        val dataBundle: Map<String, String>? = inAppMessage.data

        // ...
    }
}

Java

public class MyClickListenerBundles implements FirebaseInAppMessagingClickListener {

    @Override
    public void messageClicked(InAppMessage inAppMessage, Action action) {
        // Determine which URL the user clicked
        String url = action.getActionUrl();

        // Get data bundle for the inapp message
        Map<String, String> dataBundle = inAppMessage.getData();

        // ...
    }

}

アプリ内メッセージを一時的に無効にする

Firebase In-App Messaging のデフォルトでは、アプリの現在の状態に関係なく、トリガー条件が満たされるたびにメッセージがレンダリングされます。一連の支払い処理画面が中断されないようにするなど、なんらかの理由でメッセージの表示を抑制したい場合は、SDK の setMessagesSuppressed メソッドを使用します。

Kotlin+KTX

Firebase.inAppMessaging.setMessagesSuppressed(true)

Java

FirebaseInAppMessaging.getInstance().setMessagesSuppressed(true);

メソッドに true を渡すと、Firebase In-App Messaging でメッセージが表示されなくなり、false に設定するとメッセージ表示が再度有効になります。SDK によって、アプリの再起動時にメッセージの抑制が無効になります。抑制されたメッセージは SDK によって無視されます。Firebase In-App Messaging でそのメッセージを表示できるようにするには、抑制が無効である間に、そのトリガー条件が再び満たされる必要があります。

メッセージ配信のオプトアウトを行えるようにする

Firebase In-App Messaging のデフォルトでは、メッセージング キャンペーンの対象であるすべてのアプリユーザーに、メッセージが自動的に配信されます。これらのメッセージを配信するために、Firebase In-App Messaging SDK では Firebase インストール ID を使用して各ユーザーのアプリが識別されます。つまり、アプリ内メッセージングでは、インストール ID にリンクされたクライアント データを Firebase サーバーに送信する必要があります。どのデータを送信するかをユーザーが細かく制御できるようにするには、自動データ収集を無効にして、データ共有を承認できるようにします。

そのためには、Firebase In-App Messaging の自動初期化を無効にし、オプトイン ユーザー用にサービスを手動で初期化する必要があります。

  1. AndroidManifest.xml ファイル内で meta-data タグを使用して自動初期化を無効にします。

    <meta-data android:name="firebase_inapp_messaging_auto_data_collection_enabled" android:value="false" />
  2. 選択したユーザーの Firebase In-App Messaging を手動で初期化します。

    Kotlin+KTX

    // Only needed if firebase_inapp_messaging_auto_data_collection_enabled is set to
    // false in AndroidManifest.xml
    Firebase.inAppMessaging.isAutomaticDataCollectionEnabled = true

    Java

    // Only needed if firebase_inapp_messaging_auto_data_collection_enabled is set to
    // false in AndroidManifest.xml
    FirebaseInAppMessaging.getInstance().setAutomaticDataCollectionEnabled(true);

    データ収集設定を手動で設定すると、値はアプリケーションの再起動後も保持され、AndroidManifest.xml 内の値は上書きされます。初期化を再び無効にしたい場合、たとえば、後でユーザーがデータ収集をオプトアウトした場合は、setAutomaticDataCollectionEnabled メソッドに false を渡します。