アプリ内メッセージのトリガー
Braze SDKを通してアプリ内メッセージをトリガーする方法を学習。
メッセージのトリガーと配信
アプリ内メッセージは、SDK が以下のカスタムイベントタイプのいずれかをログに記録したときにトリガーされます: Session Start、Push Click、Any Purchase、Specific Purchase、Custom Event (最後の 2 つは堅牢なプロパティフィルターを含む)。
ユーザーのセッション開始時に、Braze は対象となるすべてのアプリ内メッセージをユーザーのデバイスに配信し、同時にアセットをプリフェッチして表示レイテンシーを最小化します。トリガーイベントに複数の適格なアプリ内メッセージがある場合、最も優先度の高いメッセージのみが配信されます。詳しくはセッションライフサイクルを参照してください。
アプリ内メッセージは、API または API イベントによってトリガーすることはできません。SDK によってログに記録されるカスタムイベントによってのみトリガーされます。ロギングの詳細については、カスタムイベントのログ記録を参照してください。
キーと値のペア
Braze でキャンペーンを作成する場合は、キーと値のペアを extras として設定できます。これは、アプリ内メッセージングオブジェクトがアプリにデータを送信するために使用できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import * as braze from "@braze/web-sdk";
braze.subscribeToInAppMessage(function(inAppMessage) {
// control group messages should always be "shown"
// this will log an impression and not show a visible message
if (inAppMessage instanceof braze.ControlMessage) {
return braze.showInAppMessage(inAppMessage);
}
if (inAppMessage instanceof braze.InAppMessage) {
const extras = inAppMessage.extras;
if (extras) {
for (const key in extras) {
console.log("key: " + key + ", value: " + extras[key]);
}
}
}
braze.showInAppMessage(inAppMessage);
});
1
Map<String, String> getExtras()
1
extras: Map<String, String>
詳細については、KDoc を参照してください。
次の例では、カスタムロジックを使用して、extras のキーと値のペアに基づいてアプリ内メッセージの表示を設定します。完全なカスタマイズ例については、サンプルアプリを参照してください。
1
2
3
4
let customization = message.extras["custom-display"] as? String
if customization == "colorful-slideup" {
// Perform your custom logic.
}
1
2
3
4
5
6
if ([message.extras[@"custom-display"] isKindOfClass:[NSString class]]) {
NSString *customization = message.extras[@"custom-display"];
if ([customization isEqualToString:@"colorful-slideup"]) {
// Perform your custom logic.
}
}
自動トリガーを無効にする
デフォルトでは、アプリ内メッセージは自動的にトリガーされます。これを無効にする方法:
読み込みスニペット内のbraze.automaticallyShowInAppMessages() への呼び出しを削除し、アプリ内メッセージの表示/非表示を処理するカスタムロジックを作成する。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
braze.subscribeToInAppMessage(function(inAppMessage) {
// control group messages should always be "shown"
// this will log an impression and not show a visible message
if (inAppMessage.isControl) { // v4.5.0+, otherwise use `inAppMessage instanceof braze.ControlMessage`
return braze.showInAppMessage(inAppMessage);
}
// Display the in-app message. You could defer display here by pushing this message to code within your own application.
// If you don't want to use the display capabilities in Braze, you could alternatively pass the in-app message to your own display code here.
if ( should_show_the_message_according_to_your_custom_logic ) {
braze.showInAppMessage(inAppMessage);
} else {
// do nothing
}
});
braze.automaticallyShowInAppMessages() を削除せずにbraze.showInAppMessage を呼び出すと、メッセージが 2 回表示される場合があります。
トリガーメッセージの遅延や復元など、メッセージのタイミングに関するより高度なコントロールについては、チュートリアルを参照のこと:トリガーメッセージの延期と復元.
- を実装する。
IInAppMessageManagerListenerを実装してカスタムリスナーを設定する。 - メソッドを更新する。
beforeInAppMessageDisplayed()メソッドを更新する。InAppMessageOperation.DISCARD.
メッセージを後から表示したり、再キューイングするなど、メッセージのタイミングに関するより高度なコントロールについては、メッセージのカスタマイズのページを参照のこと。
BrazeInAppMessageUIDelegateデリゲートをアプリに実装する。完全なチュートリアルについては、チュートリアルを参照のこと:アプリ内メッセージ UI ..discardを返すようにinAppMessage(_:displayChoiceForMessage:)デリゲートメソッドを更新します。
トリガーメッセージの遅延や復元など、メッセージのタイミングに関するより高度なコントロールについては、チュートリアルを参照のこと:トリガーメッセージの延期と復元.
- 自動統合初期化機能を使用していることを確認してください。この機能は、バージョン
2.2.0以降でデフォルトで有効になっています。 - 次の行を
braze.xmlファイルに追加することで、アプリ内メッセージ操作のデフォルトをDISCARDに設定します。1
<string name="com_braze_flutter_automatic_integration_iam_operation">DISCARD</string>
Android の場合、Braze 設定エディターで、[アプリ内メッセージを自動的に表示する] の選択を解除します。または、Unity プロジェクトの braze.xml で com_braze_inapp_show_inapp_messages_automatically を false に設定できます。
アプリ内メッセージの初期表示動作は、Braze 設定の「アプリ内メッセージマネージャー初期表示動作」で設定できます。
iOS の場合、Braze 設定エディターでゲームオブジェクトリスナーを設定し、[Braze でアプリ内メッセージを表示する] が選択されていないことを確認します。
アプリ内メッセージの初期表示動作は、Braze 設定の「アプリ内メッセージマネージャー初期表示動作」で設定できます。
デフォルトのレート制限を上書きする
デフォルトでは、アプリ内メッセージは 30 秒に 1 回送信できます。これをオーバーライドするには、Brazeインスタンスが初期化される前に、以下のプロパティを設定ファイルに追加する。この値は、新しいレート制限 (秒単位) として使用されます。
1
2
// Sets the minimum time interval between triggered in-app messages to 5 seconds instead of the default 30
braze.initialize('YOUR-API-KEY', { minimumIntervalBetweenTriggerActionsInSeconds: 5 })
1
<integer name="com_braze_trigger_action_minimum_time_interval_seconds">5</integer>
1
2
3
4
5
6
7
8
let configuration = Braze.Configuration(
apiKey: "YOUR-APP-IDENTIFIER-API-KEY",
endpoint: "YOUR-BRAZE-ENDPOINT"
)
// Sets the minimum trigger time interval to 5 seconds
configuration.triggerMinimumTimeInterval = 5
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
7
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:@"<BRAZE_API_KEY>"
endpoint:@"<BRAZE_ENDPOINT>"];
// Sets the minimum trigger time interval to 5 seconds
configuration.triggerMinimumTimeInterval = 5;
Braze *braze = [BrazePlugin initBraze:configuration];
AppDelegate.braze = braze;
手動でメッセージをトリガーする
デフォルトでは、アプリ内メッセージは SDK がカスタムイベントを記録したときに自動的にトリガーます。しかし、これに加えて、以下の方法を使って、手動でメッセージをトリガーできます。
サーバー側のイベントを使用する
現時点では、Web Braze SDKは、サーバーサイドのイベントを使用して手動でメッセージをトリガーすることをサポートしていない。
サーバー送信イベントを使用してアプリ内メッセージをトリガーするには、サイレントプッシュ通知をデバイスに送信し、カスタムプッシュコールバックがSDKベースのイベントをログに記録できるようにする。このイベントは、その後、ユーザー向けのアプリ内メッセージをトリガーします。
ステップ1:サイレントプッシュを受信するプッシュコールバックを作成する
特定のサイレントプッシュ通知をリッスンするには、カスタムプッシュコールバックを登録します。詳しくは、プッシュ通知の設定を参照のこと。
配信されるアプリ内メッセージに関して 2 つのイベントが記録されます。1 つはサーバーによって記録され、もう 1 つはカスタムプッシュコールバック内から記録されます。同じイベントが重複しないようにするには、プッシュコールバック内からログに記録されるイベントは、サーバー送信イベントと同じ名前ではなく、「アプリ内メッセージトリガーイベント」などの一般的な命名規則に従う必要があります。そうしないと、単一のユーザーアクションについてログに記録される重複イベントによって、セグメンテーションとユーザーデータが影響を受ける可能性があります。
1
2
3
4
5
6
7
8
9
10
11
Braze.getInstance(context).subscribeToPushNotificationEvents(event -> {
final Bundle kvps = event.getNotificationPayload().getBrazeExtras();
if (kvps.containsKey("IS_SERVER_EVENT")) {
BrazeProperties eventProperties = new BrazeProperties();
// The campaign name is a string extra that clients can include in the push
String campaignName = kvps.getString("CAMPAIGN_NAME");
eventProperties.addProperty("campaign_name", campaignName);
Braze.getInstance(context).logCustomEvent("IAM Trigger", eventProperties);
}
});
1
2
3
4
5
6
7
8
9
10
11
Braze.getInstance(applicationContext).subscribeToPushNotificationEvents { event ->
val kvps = event.notificationPayload.brazeExtras
if (kvps.containsKey("IS_SERVER_EVENT")) {
val eventProperties = BrazeProperties()
// The campaign name is a string extra that clients can include in the push
val campaignName = kvps.getString("CAMPAIGN_NAME")
eventProperties.addProperty("campaign_name", campaignName)
Braze.getInstance(applicationContext).logCustomEvent("IAM Trigger", eventProperties)
}
}
ステップ 2:プッシュキャンペーンを作成する
サーバー送信イベントを介してトリガーされるサイレントプッシュキャンペーンを作成します。

プッシュキャンペーンにはキーと値のペアエクストラを含める必要があります。これは、このプッシュキャンペーンが SDK カスタムイベントを記録するために送信されることを示します。このイベントは次のアプリ内メッセージをトリガーするために使用されます。

前出のプッシュコールバックサンプルコードは、キーと値のペアを認識して、適切な SDK カスタムイベントをログに記録します。
「アプリ内メッセージトリガー」イベントに添付するイベントプロパティを含めるには、プッシュペイロードのキーと値のペアでプロパティを渡します。この例では、後続のアプリ内メッセージのキャンペーン名が含められています。カスタムプッシュコールバックは、カスタムイベントをログに記録するときに、イベントプロパティのパラメーターとして値を渡すことができます。
ステップ3: アプリ内メッセージキャンペーンを作成する
Braze ダッシュボードで、ユーザーに表示されるアプリ内メッセージキャンペーンを作成します。このキャンペーンにはアクションベースの配信が必要であり、カスタムプッシュコールバック内から記録されたカスタムイベントからトリガーされる必要があります。
以下の例では、イベントプロパティを最初のサイレントプッシュの一部として送信することで、トリガーされる特定のアプリ内メッセージが設定されています。

アプリがフォアグラウンドにないときにサーバー送信イベントがログに記録されると、イベントはログに記録されますが、アプリ内メッセージは表示されません。アプリケーションがフォアグラウンドになるまでイベントを遅延させたい場合は、カスタムプッシュレシーバーにチェックを含めて、アプリがフォアグラウンドになるまでイベントを無視または遅延させる必要があります。
ステップ 1: サイレントプッシュとキーと値のペアを扱う
次の関数を実装し、application(_:didReceiveRemoteNotification:fetchCompletionHandler:): メソッド内で呼び出します。
1
2
3
4
5
6
func handleExtras(userInfo: [AnyHashable : Any]) {
print("A push was received")
if userInfo != nil && (userInfo["IS_SERVER_EVENT"] as? String) != nil && (userInfo["CAMPAIGN_NAME"] as? String) != nil {
AppDelegate.braze?.logCustomEvent("IAM Trigger", properties: ["campaign_name": userInfo["CAMPAIGN_NAME"]])
}
}
1
2
3
4
5
6
- (void)handleExtrasFromPush:(NSDictionary *)userInfo {
NSLog(@"A push was received.");
if (userInfo !=nil && userInfo[@"IS_SERVER_EVENT"] !=nil && userInfo[@"CAMPAIGN_NAME"]!=nil) {
[AppDelegate.braze logCustomEvent:@"IAM Trigger" properties:@{@"campaign_name": userInfo[@"CAMPAIGN_NAME"]}];
}
};
サイレントプッシュを受信すると、ユーザープロファイルに対して SDK が記録したイベント「アプリ内メッセージトリガー」がログに記録されます。
SDK のログに記録されたカスタムイベントの記録にプッシュメッセージが使用されているため、Braze はこのソリューションを有効にするには、ユーザーごとにプッシュトークンを格納する必要があります。iOS ユーザーの場合、Braze ではユーザーが OS のプッシュプロンプトを受け取った時点からのトークンのみが保存されます。これ以前では、ユーザーはプッシュを使用して到達できず、先行ソリューションも実行できません。
ステップ 2:サイレントプッシュキャンペーンの作成
サーバー送信イベントを介してトリガーされるサイレントプッシュキャンペーンを作成します。

プッシュキャンペーンにはキーと値のペアエクストラを含める必要があります。これは、このプッシュキャンペーンが SDK カスタムイベントを記録するために送信されることを示します。このイベントは次のアプリ内メッセージをトリガーするために使用されます。

application(_:didReceiveRemoteNotification:fetchCompletionHandler:) メソッド内のコードはキー IS_SERVER_EVENT をチェックし、SDK カスタムイベントがあればログに記録します。
プッシュペイロードのキーと値のペアエクストラ内で目的の値を送信することで、イベント名またはイベントプロパティのいずれかを変更できます。カスタムイベントを記録する場合、これらのエクストラはイベント名のパラメータまたはイベントプロパティとして使用できます。
ステップ3: アプリ内メッセージキャンペーンを作成する
Braze ダッシュボードで、ユーザーに表示されるアプリ内メッセージキャンペーンを作成します。このキャンペーンにはアクションベースの配信があり、application(_:didReceiveRemoteNotification:fetchCompletionHandler:) メソッド内から記録されたカスタムイベントからトリガーされる必要があります。
以下の例では、イベントプロパティを最初のサイレントプッシュの一部として送信することで、トリガーされる特定のアプリ内メッセージが設定されています。

なお、これらのアプリ内メッセージは、アプリケーションがフォアグラウンドにある間にサイレントプッシュが受信された場合にのみトリガーされます。
事前定義されたメッセージを表示する
事前定義したアプリ内メッセージを手動で表示するには、以下の方法を使用します。
1
braze.requestInAppMessageDisplay();
1
BrazeInAppMessageManager.getInstance().addInAppMessage(inAppMessage);
1
BrazeInAppMessageManager.getInstance().addInAppMessage(inAppMessage)
1
2
3
if let inAppMessage = AppDelegate.braze?.inAppMessagePresenter?.nextAvailableMessage() {
AppDelegate.braze?.inAppMessagePresenter?.present(message: inAppMessage)
}
リアルタイムでメッセージを表示する
また、ダッシュボードで利用できるのと同じカスタマイズオプションを使って、アプリ内メッセージをリアルタイムで作成・表示することもできる。そのために必要なこと:
1
2
3
4
// Displays a slideup type in-app message.
var message = new braze.SlideUpMessage("Welcome to Braze! This is an in-app message.");
message.slideFrom = braze.InAppMessage.SlideFrom.TOP;
braze.showInAppMessage(message);
1
2
3
// Initializes a new slideup type in-app message and specifies its message.
InAppMessageSlideup inAppMessage = new InAppMessageSlideup();
inAppMessage.setMessage("Welcome to Braze! This is a slideup in-app message.");
1
2
3
// Initializes a new slideup type in-app message and specifies its message.
val inAppMessage = InAppMessageSlideup()
inAppMessage.message = "Welcome to Braze! This is a slideup in-app message."
ソフトキーボードが画面に表示されているときは、レンダリングが定義されていないため、アプリ内メッセージを表示しないでください。
inAppMessagePresenter で present(message:) メソッドを手動で呼び出します。以下に例を示します。
1
2
3
4
let customInAppMessage = Braze.InAppMessage.slideup(
.init(message: "YOUR_CUSTOM_SLIDEUP_MESSAGE", slideFrom: .bottom, themes: .defaults)
)
AppDelegate.braze?.inAppMessagePresenter?.present(message: customInAppMessage)
1
2
3
4
5
6
7
8
9
BRZInAppMessageRaw *customInAppMessage = [[BRZInAppMessageRaw alloc] init];
customInAppMessage.type = BRZInAppMessageRawTypeSlideup;
customInAppMessage.message = @"YOUR_CUSTOM_SLIDEUP_MESSAGE";
customInAppMessage.slideFrom = BRZInAppMessageRawSlideFromBottom;
customInAppMessage.themes = @{
@"light": BRZInAppMessageRawTheme.defaultLight,
@"dark": BRZInAppMessageRawTheme.defaultDark
};
[AppDelegate.braze.inAppMessagePresenter presentMessage:customInAppMessage];
独自のアプリ内メッセージを作成する場合、分析トラッキングをオプトアウトし、message.context を使用してクリックとインプレッションのロギングを手動で処理する必要がある。
スタックの次のメッセージを表示するには、DisplayNextInAppMessage() メソッドを使う。DISPLAY_LATER または BrazeUnityInAppMessageDisplayActionType.IAM_DISPLAY_LATER がアプリ内メッセージ表示アクションとして選択されている場合、メッセージはこのスタックに保存されます。
1
Appboy.AppboyBinding.DisplayNextInAppMessage();
Web 用 Exit-intent メッセージ
Exit-intent メッセージは、訪問者が Web サイトを離れる前に訪問者に重要な情報を伝えるために使用される、中断のないアプリ内メッセージです。
Web SDKでこれらのメッセージタイプのトリガーを設定するには、Webサイトに(ouibounceのオープンソースライブラリなど)exit-intentライブラリを実装し、次のコードを使ってBrazeのカスタムイベントとして'exit intent' 。これで、今後のアプリ内メッセージキャンペーンでは、このメッセージタイプをカスタムイベントトリガーとして使うことができる。
1
2
3
var _ouibounce = ouibounce(false, {
callback: function() { braze.logCustomEvent('exit intent'); }
});
GitHub でこのページを編集