Skip to content

トラックセッション

Braze SDKを使用してセッションを追跡する方法について説明します。

セッションのライフサイクルについて

セッションとは、Braze SDKがアプリ起動後にユーザーの活動をトラッキングする期間を指す。また、メソッドchangeUser()を呼び出すことで新しいセッションを強制的に開始できる。

デフォルトでは、セッションは最初に呼び出された時点で開始braze.openSession()される。セッションは、最大30 分間操作がない状態が続くと終了する(デフォルトのセッションタイムアウトを変更しない限り、またはユーザーがアプリを閉じる場合を除く)。

デフォルトでは、セッションはが最初に呼び出されたopenSession()時に開始される。アプリがバックグラウンドに移行した後、再びフォアグラウンドに戻った場合、SDKはセッション開始から10秒以上経過しているかどうかを確認する(デフォルトのセッションタイムアウトを変更しない限り)。そうであれば、新しいセッションが始まる。ユーザーがバックグラウンドでアプリを閉じた場合、セッションデータはアプリを再起動するまでBrazeに送信されない可能性があることに留意せよ。

呼び出しはセッションをcloseSession()直ちに終了させない。代わりに、ユーザーが別のアクティビティを開始して再度呼び出さないopenSession()場合、10秒後にセッションを終了する。

デフォルトでは、セッションは を呼び出した時に開始Braze.init(configuration:)される。これは通知UIApplicationWillEnterForegroundNotificationがトリガーされた時に発生する。つまりアプリがフォアグラウンドに入ったことを意味する。

アプリがバックグラウンドに移行すると、トリガーUIApplicationDidEnterBackgroundNotificationされる。アプリはバックグラウンドではアクティブなセッションを維持しない。アプリがフォアグラウンドに戻った時、SDKはセッション開始からの経過時間をセッションタイムアウトと比較する(デフォルトのセッションタイムアウトを変更しない限り)。セッション開始からの時間がタイムアウト期間を超えた場合、新しいセッションが始まる。

非アクティブ状態の定義

Web SDKでセッションライフサイクルを効果的に管理するには、非アクティブ状態の定義と測定方法を理解することが重要です。非アクティブ状態とは、Braze Web SDKがユーザーからのトラッキングイベントを一切検出しない期間を指します。

非アクティブ状態の測定方法

Web SDKはSDKがトラッキングするイベントに基づいて非アクティブ状態を追跡します。SDKは内部タイマーを維持しており、トラッキング対象のイベントが送信されるたびにリセットされます。設定されたタイムアウト期間内にSDKがトラッキングするイベントが発生しない場合、セッションは非アクティブと見なされ終了します。

Web SDKにおけるセッションライフサイクルの実装方法の詳細については、Braze Web SDK GitHubリポジトリ内のセッション管理ソースコードを参照してください。

デフォルトでアクティビティと見なされるもの:

デフォルトではアクティビティとしてカウントされないもの:

  • 別のブラウザタブへの切り替え
  • ブラウザウィンドウの最小化
  • ブラウザのフォーカスまたはブラーイベント
  • ページ上のスクロールやマウスの動き

セッションタイムアウトの設定

デフォルトでは、Web SDKは30分間トラッキングイベントが発生しない場合、セッションを非アクティブと見なします。SDKを初期化する際に、sessionTimeoutInSecondsパラメータを使用してこのしきい値をカスタマイズできます。このパラメータの設定方法の詳細(コード例を含む)については、デフォルトのセッションタイムアウトの変更を参照してください。

例:非アクティブ状態のシナリオを理解する

次のシナリオを考えてみましょう:

  1. ユーザーがWebサイトを開くと、SDKはbraze.openSession()を呼び出してセッションを開始します。
  2. ユーザーは別のブラウザタブに切り替えて、30分間別のWebサイトを閲覧します。
  3. この間、Webサイト上ではSDKがトラッキングするイベントは発生しません。
  4. 30分間操作がないと、セッションは自動的に終了します。
  5. ユーザーがWebサイトのタブに戻り、SDKイベント(ページ閲覧やコンテンツ操作など)をトリガーすると、新しいセッションが開始されます。

カスタム非アクティブ状態のトラッキング

ブラウザの可視性やタブの切り替えに基づいて非アクティブ状態をトラッキングする必要がある場合は、JavaScriptコードにカスタムイベントリスナーを実装してください。visibilitychangeなどのブラウザイベントを使用してユーザーがページを離れたタイミングを検知し、必要に応じてカスタムイベントを手動でBrazeに送信するか、braze.openSession()を呼び出してください。

1
2
3
4
5
6
7
8
9
10
11
// Example: Track when user switches away from tab
document.addEventListener('visibilitychange', function() {
  if (document.hidden) {
    // User switched away - optionally log a custom event
    braze.logCustomEvent('tab_hidden');
  } else {
    // User returned - optionally start a new session and/or log an event
    // braze.openSession();
    braze.logCustomEvent('tab_visible');
  }
});

カスタムイベントの記録に関する詳細は、カスタムイベントの記録を参照してください。セッションのライフサイクルとタイムアウト設定の詳細については、デフォルトのセッションタイムアウトの変更を参照してください。

セッション更新のサブスクライブ

ステップ1:更新をサブスクライブする

セッション更新をサブスクライブするには、subscribeToSessionUpdates()メソッドを使用します。

現時点では、Web Braze SDKのセッション更新のサブスクライブはサポートされていません。

1
2
3
4
5
6
7
8
Braze.getInstance(this).subscribeToSessionUpdates(new IEventSubscriber<SessionStateChangedEvent>() {
  @Override
  public void trigger(SessionStateChangedEvent message) {
    if (message.getEventType() == SessionStateChangedEvent.ChangeType.SESSION_STARTED) {
      // A session has just been started
    }
  }
});
1
2
3
4
5
Braze.getInstance(this).subscribeToSessionUpdates { message ->
  if (message.eventType == SessionStateChangedEvent.ChangeType.SESSION_STARTED) {
    // A session has just been started
  }
}

セッション終了コールバックを登録すると、アプリがフォアグラウンドに戻ったときに発火します。セッション時間は、アプリが開かれたときまたはフォアグラウンドになったときから、閉じられたときまたはバックグラウンドになったときまで測定されます。

1
2
3
4
5
6
7
8
9
10
11
// This subscription is maintained through a Braze cancellable, which will observe changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.subscribeToSessionUpdates { event in
  switch event {
  case .started(let id):
    print("Session \(id) has started")
  case .ended(let id):
    print("Session \(id) has ended")
  }
}

非同期ストリームをサブスクライブするには、代わりにsessionUpdatesStreamを使用できます。

1
2
3
4
5
6
7
8
for await event in braze.sessionUpdatesStream {
  switch event {
  case .started(let id):
    print("Session \(id) has started")
  case .ended(let id):
    print("Session \(id) has ended")
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// This subscription is maintained through a Braze cancellable, which will observe changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
BRZCancellable *cancellable = [AppDelegate.braze subscribeToSessionUpdates:^(BRZSessionEvent * _Nonnull event) {
  switch (event.state) {
    case BRZSessionStateStarted:
      NSLog(@"Session %@ has started", event.sessionId);
      break;
    case BRZSessionStateEnded:
      NSLog(@"Session %@ has ended", event.sessionId);
      break;
    default:
      break;
  }
}];

React Native SDKは、セッション更新を直接サブスクライブするためのメソッドを公開していません。セッションのライフサイクルは基盤となるネイティブSDKによって管理されます。更新をサブスクライブするには、AndroidまたはSwiftタブのネイティブプラットフォーム向けアプローチを使用してください。

ステップ2:セッショントラッキングをテストする(オプション)

セッショントラッキングをテストするには、デバイスでセッションを開始し、Brazeダッシュボードを開いて関連するユーザーを検索します。ユーザープロファイルで、Sessions Overviewを選択します。指標が期待どおりに更新された場合、セッショントラッキングは正常に動作しています。

ユーザープロファイルのセッション概要セクションには、セッション数、最終利用日、初回利用日が表示されます。

デフォルトのセッションタイムアウトの変更

セッションが自動的にタイムアウトするまでの時間を変更できます。

デフォルトでは、セッションタイムアウトは30分に設定されています。これを変更するには、sessionTimeoutInSecondsオプションをinitialize関数に渡します。1以上の任意の整数に設定できます。

1
2
// Sets the session timeout to 15 minutes instead of the default 30
braze.initialize('YOUR-API-KEY-HERE', { sessionTimeoutInSeconds: 900 });

デフォルトでは、セッションタイムアウトは10秒に設定されています。これを変更するには、braze.xmlファイルを開き、com_braze_session_timeoutパラメータを追加します。1以上の任意の整数に設定できます。

1
2
<!-- Sets the session timeout to 60 seconds. -->
<integer name="com_braze_session_timeout">60</integer>

デフォルトでは、セッションタイムアウトは10秒に設定されています。これを変更するには、init(configuration)に渡されるconfigurationオブジェクトでsessionTimeoutを設定します。1以上の任意の整数に設定できます。

1
2
3
4
5
6
7
8
// Sets the session timeout to 60 seconds
let configuration = Braze.Configuration(
  apiKey: "<BRAZE_API_KEY>",
  endpoint: "<BRAZE_ENDPOINT>"
)
configuration.sessionTimeout = 60;
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
7
// Sets the session timeout to 60 seconds
BRZConfiguration *configuration =
  [[BRZConfiguration alloc] initWithApiKey:brazeApiKey
                                  endpoint:brazeEndpoint];
configuration.sessionTimeout = 60;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;

React Native SDKはセッション管理のためにネイティブSDKに依存しています。デフォルトのセッションタイムアウトを変更するには、ネイティブレイヤーで設定してください。

  • Android:braze.xmlファイルでcom_braze_session_timeoutを設定します。詳細は、Androidタブを選択してください。
  • iOS:Braze.ConfigurationオブジェクトでsessionTimeoutを設定します。詳細は、Swiftタブを選択してください。

トラブルシューティング

ユーザープロファイルのセッション数が0件

SDKの外部でユーザーが作成された場合、ユーザープロファイルのセッション数が0件になることがあります。

  • REST APIで作成された場合:/users/trackエンドポイントを通じてリクエストにapp_idを含めてユーザーが作成された場合、プロファイルはそのアプリに関連付けられて表示されますが、そのユーザーに対してSDKが初期化されていないため、セッションデータはありません。
  • CSVインポートで作成された場合:初回セッションまたは最終セッションのフィールドに値を含めずにCSVでユーザーがインポートされた場合、プロファイルはセッション数0件で存在します。

一部のユーザーがセッションを記録していない

セッションはSDKが初期化された後にのみトラッキングされるため、SDK初期化をトリガーしないユーザーはセッションを記録しません。これは通常、ログインフロー、同意プロンプト、またはフィーチャーフラグの背後で初期化を遅延させるなど、SDKを初期化する前に条件付きロジックを使用している場合に発生します。実装ガイダンスについては、遅延初期化を参照してください。これらのケースでは、条件を満たさないユーザーはセッションを開始しません。

一部のユーザーがセッションを記録し、他のユーザーが記録していない場合は、以下を確認してください。

  • 初期化ロジックを確認する。SDKが一部のユーザーやアプリのエントリポイントだけでなく、すべてのユーザーとエントリポイントで初期化されていることを確認してください。
  • 最近のアプリの変更を確認する。SDK初期化に関する新しい条件付きロジックにより、セッション数が急激に減少する可能性があります。
  • 影響を受けたユーザーと受けていないユーザーを比較する。アプリのバージョン、デバイスの種類、またはユーザーフローの違いを特定し、特定のユーザーで初期化がスキップされる理由を明らかにしてください。

実装を確認しても問題が解決しない場合は、問題を再現し、サポートに連絡する前に以下の情報を収集してください。

  • 問題を再現する手順
  • 影響を受けるアプリのバージョン
  • 問題が発生している間にキャプチャした詳細SDKログ(またはプラットフォーム別:AndroidSwiftWeb
  • SDK初期化のコードスニペット
  • 初期化前に適用されている条件付きロジックの概要
New Stuff!