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


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

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

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

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

カード操作を処理するために DisplayDelegate を実装する

アプリ内メッセージへの操作が行われるたびに呼び出される、アプリ内メッセージングの表示デリゲートを登録できます。これを行うには、InAppMessagingDisplayDelegate プロトコルに従ってクラスを実装し、それを InAppMessaging インスタンスで delegate プロパティとして設定します。

たとえば、ユーザーがカード形式のメッセージでクリックしたリンクを追跡できるようにするには、DisplayDelegate プロトコルに沿って messageClicked メソッドを実装するクラスを定義することで、ユーザーがクリックしたリンクにアクセスできるようにします。

Swift

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。

InAppMessagingAction など、実装可能なコールバック メソッドとそのパラメータのセットについては、Swift の表示デリゲートのリファレンスをご覧ください。


// In CardActionFiamDelegate.swift
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {

    func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
        // ...
    }

    func messageDismissed(_ inAppMessage: InAppMessagingDisplayMessage,
                          dismissType: FIRInAppMessagingDismissType) {
        // ...
    }

    func impressionDetected(for inAppMessage: InAppMessagingDisplayMessage) {
        // ...
    }

    func displayError(for inAppMessage: InAppMessagingDisplayMessage, error: Error) {
        // ...
    }

}

// In AppDelegate.swift
// Register the delegate with the InAppMessaging instance
let myFiamDelegate = CardActionFiamDelegate()
InAppMessaging.inAppMessaging().delegate = myFiamDelegate;

Objective-C

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。

FIRInAppMessagingDisplayMessage など、実装可能なコールバック メソッドとそのパラメータのセットについては、Objective-C の表示デリゲートのリファレンスをご覧ください。


// In CardActionFiamDelegate.h
@interface CardActionFiamDelegate : NSObject <FIRInAppMessagingDisplayDelegate>
@end

// In CardActionFiamDelegate.m
@implementation CardActionFiamDelegate

- (void)displayErrorForMessage:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage
                         error:(nonnull NSError *)error {
    // ...
}

- (void)impressionDetectedForMessage:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
    // ...
}

- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
    // ...
}

- (void)messageDismissed:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage
             dismissType:(FIRInAppMessagingDismissType)dismissType {
    // ...
}

@end

// In AppDelegate.m
CardActionFiamDelegate *myFiamDelegate = [CardActionFiamDelegate new];
[FIRInAppMessaging inAppMessaging].delegate = myFiamDelegate;

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

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

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

Swift

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。

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

Objective-C

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。

// somewhere in the app's code
[[FIRInAppMessaging inAppMessaging] triggerEvent:@"exampleTrigger"];

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

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

Swift

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {

    func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
	// Get data bundle from the inapp message
	let appData = inAppMessage.appData
	// ...
    }
}

Objective-C

注: このプロダクトは、macOS、Mac Catalyst、App Clip、watchOS の各ターゲットでは使用できません。
@implementation CardActionFiamDelegate

- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
	appData = inAppMessage.appData
	// ...
}

@end

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

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

  [FIRInAppMessaging inAppMessaging].messageDisplaySuppressed = YES;

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

オプトアウト メッセージ配信を有効にする

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

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

  1. Info.plist ファイル内の新しいキーで自動初期化を無効にします。

    • キー: FirebaseInAppMessagingAutomaticDataCollectionEnabled
    • 値: NO
  2. 選択したユーザーの Firebase In-App Messaging を手動で初期化します。

    // Only needed if FirebaseInAppMessagingAutomaticDataCollectionEnabled is set to NO
    // in Info.plist
    [FIRInAppMessaging inAppMessaging].automaticDataCollectionEnabled = YES;
    
    

    automaticDataCollectionEnabledYES に設定すると、値はアプリケーションの再起動後も保持され、Info.plist 内の値は上書きされます。初期化を再び無効にしたい場合(後でユーザーがデータ収集をオプトアウトした場合など)は、このプロパティを NO に設定します。