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 ダッシュボードを開いて関連するユーザーを検索します。ユーザープロファイルで、[セッションの概要] を選択します。指標が期待どおりに更新された場合、セッショントラッキングは正常に動作しています。

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

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

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

デフォルトでは、セッションタイムアウトは 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件で存在します。
New Stuff!