アプリ内メッセージのトリガー
Braze SDKを通してアプリ内メッセージをトリガーする方法を学習。
メッセージのトリガーと配信
アプリ内メッセージは、SDKが以下のカスタムイベントタイプのいずれかをログに記録したときにトリガーされる:Session Start
Push Click
、Any Purchase
、Specific Purchase
、Custom Event
(最後の2つはロバストプロパティフィルターを含む)。
ユーザーのセッション開始時に、Brazeは対象となるすべてのアプリ内メッセージをユーザーのデバイスに配信し、同時にアセットをプリフェッチして表示レイテンシを最小化する。トリガーイベントに複数のアプリ内メッセージがある場合、最も優先度の高いメッセージのみが配信される。詳しくはセッションライフサイクルを参照のこと。
アプリ内メッセージは、APIやAPIイベントによってトリガーされることはなく、SDKによって記録されるカスタムイベントによってのみトリガーされる。ロギングの詳細については、カスタムイベントの学習を参照のこと。
キーと値のペア
Brazeでキャンペーンを作成する際、キーと値のペアをextras
、アプリ内メッセージングオブジェクトがアプリにデータを送信する際に使用できるように設定できる。
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.
}
}
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);
});
自動トリガーを無効にする
デフォルトでは、アプリ内メッセージは自動的にトリガーされる。これを無効にする:
- 自動統合イニシャライザーを使用していることを確認する。これは、
2.2.0
以降のバージョンでデフォルトでイネーブルメントになっている。 - 次の行を
braze.xml
ファイルに追加することで、アプリ内メッセージ操作のデフォルトをDISCARD
に設定します。1
<string name="com_braze_flutter_automatic_integration_iam_operation">DISCARD</string>
BrazeInAppMessageUIDelegate
デリゲートをアプリに実装する。完全なチュートリアルについては、チュートリアル:アプリ内メッセージUI..discard
を返すようにinAppMessage(_:displayChoiceForMessage:)
デリゲートメソッドを更新します。
読み込みスニペット内の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回表示されることがある。
Androidの場合は、Brazeの設定エディターで「アプリ内メッセージを自動的に表示する」の選択を解除する。あるいは、Unityプロジェクトのbraze.xml
で、com_braze_inapp_show_inapp_messages_automatically
をfalse
に設定することもできる。
アプリ内メッセージの初期表示動作は、Braze configの「アプリ内メッセージマネージャー初期表示動作」で設定できる。
iOSの場合、Brazeコンフィギュレーションエディターでゲームオブジェクトリスナーを設定し、Braze Displays In-App Messagesが選択されていないことを確認する。
アプリ内メッセージの初期表示動作は、Braze configの「アプリ内メッセージマネージャー初期表示動作」で設定できる。
デフォルトレート制限を無効にする
デフォルトでは、アプリ内メッセージは30秒に1回送信できる。これをオーバーライドするには、Brazeインスタンスが初期化される前に、以下のプロパティを設定ファイルに追加する。この値が新しいレート制限(秒)として使用される。
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;
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 })
手動でメッセージをトリガーする
デフォルトでは、アプリ内メッセージはSDKがカスタムイベントを記録したときに自動的にトリガーされる。しかし、これに加えて、以下の方法を使えば、手動でメッセージをトリガーすることができる。
サーバー側イベントを使う
サーバー送信イベントを使用してアプリ内メッセージをトリガーするには、サイレントプッシュ通知をデバイスに送信し、カスタムプッシュコールバックがSDKベースのイベントをログに記録できるようにする。このイベントがユーザー向けアプリ内メッセージのトリガーとなる。
ステップ1:サイレントプッシュを受信するプッシュコールバックを作成する
特定のサイレントプッシュ通知をリッスンするには、カスタムプッシュコールバックを登録します。詳細については、標準Androidプッシュ統合を参照してください。
配信されるアプリ内メッセージに関して 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:)
メソッド内から記録されたカスタムイベントからトリガーされる必要があります。
以下の例では、イベントプロパティを最初のサイレントプッシュの一部として送信することで、トリガーされる特定のアプリ内メッセージが設定されています。
なお、これらのアプリ内メッセージは、アプリケーションがフォアグラウンドにある間にサイレントプッシュが受信された場合にのみトリガーされます。
現時点では、Web Braze SDKは、サーバーサイドのイベントを使用して手動でメッセージをトリガーすることをサポートしていない。
あらかじめ定義されたメッセージを表示する
事前に定義したアプリ内メッセージを手動で表示するには、以下の方法を使用する:
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
braze.requestInAppMessageDisplay();
リアルタイムでメッセージを表示する
また、ダッシュボードで利用できるのと同じカスタマイズオプションを使って、アプリ内メッセージをリアルタイムで作成・表示することもできる。そのために必要なことだ:
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."
ソフトキーボードが画面に表示されているときは、レンダリングが定義されていないため、アプリ内メッセージを表示しないでください。
を手動で呼び出す。 present(message:)
inAppMessagePresenter
メソッドを呼び出す。以下に例を示します。
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
を使用してクリックとインプレッションのロギングを手動で処理する必要がある。
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);
スタックの次のメッセージを表示するには、DisplayNextInAppMessage()
メソッドを使う。アプリ内メッセージ表示アクションとしてDISPLAY_LATER
またはBrazeUnityInAppMessageDisplayActionType.IAM_DISPLAY_LATER
が選択された場合、メッセージはこのスタックに保存される。
1
Appboy.AppboyBinding.DisplayNextInAppMessage();
Web用終了意図メッセージ
退出意図メッセージは、Webサイトを離れる前に訪問者に重要な情報を伝えるために使用される、中断のないアプリ内メッセージである。
Web SDKでこれらのメッセージタイプのトリガーを設定するには、Webサイトに(ouibounceのオープンソースライブラリなど)exit-intentライブラリを実装し、次のコードを使ってBrazeのカスタムイベントとして'exit intent'
。これで、今後のアプリ内メッセージキャンペーンでは、このメッセージタイプをカスタムイベントトリガーとして使うことができる。
1
2
3
var _ouibounce = ouibounce(false, {
callback: function() { braze.logCustomEvent('exit intent'); }
});