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. ユーザーが別のブラウザタブに切り替えて、別のWebサイトを30分間閲覧します。
  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!