Amplitudeでは、セッションはプロダクトへのユーザーのエンゲージメントの頻度と時間を把握するために便利なメトリックです。セッションベースの分析を作成する最も直接的な方法はユーザーセッションチャートですが、ユーザープロパティとイベントプロパティを使用して他の分析タイプにセッションを統合することができます。
この記事では、Amplitudeによるセッションの定義とトラックについてご説明します。この記事を読み終えるころには、セッションをAmplitude分析に統合する最適な方法について明確に理解していただけます。
Amplitudeによる「セッション」の定義
通常、セッションはユーザーがアプリを前面に置いているか、またはウェブサイトを開いている時間のことです。モバイルとウェブのアプリケーションは次のように細部でやや違いがあります。
- モバイルでは、セッションはアプリが前面に置かれたときに開始し、アプリが背後に置かれて5分以上イベントが発動しなかった場合に終了します。セッション間で5分以内に送信されたすべてのイベントは現在のセッションとしてカウントされます。 setMinTimeBetweenSessionsMillis(timeout) を呼び出して、セッションの有効時間を定義できます。タイムアウトにはミリ秒単位の値を入力します。
- ブラウザーでは、セッションはウェブサイトを開いて、SKDが初期化されたときに開始し、最後のイベントがトリガーしたときに終了します。デフォルトで、ウェブセッションは30分後にタイムアウトになります。30分以内に発動したすべてのイベントは同じセッションの一部としてカウントされます。このタイムアウトウィンドウはJavaScript SDK構成オプションからカスタマイズできます。
Amplitudeは新規セッションにセッションIDを自動的に生成します。このIDはepoch(Unixタイムスタンプとしても知られる)を起点とするミリ秒単位のセッションの開始時間です。同じセッション内のすべてのイベント間で同じセッションIDが共有されます。 AmplitudeのSDKを使用している場合、共有は自動的に実行されます。一方、HTTP APIを使用してAmplitudeにデータを送信する場合、セッションをトラックするためにsession IDフィールドを明示的に設定する必要があります。
Amplitudeによりセッションをトラックする
Amplitudeのセッションプロパテのデフォルト設定はsession ID
です。同じセッションIDと同じユーザーIDを持つすべてのイベントは同じセッションにグループ化されます。セッションIDは複数のユーザー間で固有である必要はありません。セッションをグループ化するのに使用するプロパティを変更することもできます。
上記の通り、Amplitude SDK経由で送信されるイベントのセッションIDは自動的に生成および管理されます。一方、HTTP API経由で送信されるイベントでは、AmplitudeのデフォルトのセッションIDは-1
になります。 つまり、イベントはすべてのセッション指標から除外されます。
注意:これは、SegmentからAmplitudeにクラウドモード接続経由でデータを送信するときによく発生します。HTTP API経由でデータを送信する場合と同様に、セッションをトラックするためにはセッションIDを明示的に設定する必要があります。
同じセッションに含まれるイベントは、上図のように青線で連結されます。
Start SessionイベントとEnd Sessionイベント
AmplitudeはデフォルトではStart Session
イベントとEnd Session
イベントをトラックしませんが、セッションIDをトラックしてセッションの開始時間と終了時間を決めることはできます。また、AmplitudeはセッションIDを使用して、セッションの長さを計算します。セッションIDを使用する場合、Amplitudeは月次イベント数の制限に追加イベントを追加しません。
ただし、セッションの長さを超えてStart Session
イベントとEnd Session
イベントのトラッキングが分析に重要とされる場合は、SDKを初期化する前にこのコード行を追加してこれらのイベントのトラッキングを簡単に有効にすることができます。
Androidの場合:
Amplitude.getInstance().trackSessionEvents(true);
iOSの場合:
[Amplitude instance].trackingSessionEvents = true;
重要な注意:
- これは、AmplitudeのAndroidとiOS のSDKにのみ適用されます。JavaScript SDKはデフォルトのセッションイベントを送信できません。
- Start/End Sessionイベントは月次イベント数の制限にカウントされます。
End Session
イベントはユーザーの次のセッションの開始時に送信されます。- Start SessionイベントとEnd Sessionイベントに追加イベントプロパティを追加することはできません。Start/End Sessionイベントにイベントプロパティを送信したい場合、
Open App
およびClose App
カスタムイベントの実装をお試しください。
Out-of-sessionイベント
セッションIDを-1
に設定して、イベントをセッション外として記録することもできます。 Out-of-sessionイベントは現在のセッションの一部とみなされません。現在のセッションを延長しないため、プッシュ通知によりトリガーされたイベントを記録する場合に便利です。
Out-of-sessionイベントは通常はAmplitudeが受け取るサーバー側のイベントです(詳しくは、HTTP APIの記事をご覧ください)。これらのイベントは、ユーザーのイベントストリームに切り離された緑色の正方形として表示されます。
カスタムセッションプロパティ
デフォルトでは、AmplitudeはセッションIDに基づいてイベントをセッションに分類します。また、一定のプロパティ、カスタムタイムアウトウィンドウ、またはグループセッションに開始と終了するイベントを設定するだけで、実装なしのセッションを定義することもできます。
セッション定義を編集するには、管理者またはマネージャーの権限が必要です。
注意: カスタムセッション定義はユーザーセッションとパスファインダーチャートでのみ使用できます。セッションにはアクティブイベントのみが含まれます。
カスタムセッション定義を設定するには、次のステップに従ってください:
- 左側のサイドバーから、[設定]>プロジェクトに移動します。
- 作業するプロジェクトをクリックします。
- セッション定義をクリックします。セッション定義モーダルが表示されます。
セッション定義モーダル内では、プロジェクトでセッションを定義する3つの条件のいずれかに仕様を設定することができます。1つの条件または複数の条件を定義できますが、Amplitudeがセッションをカウントするために指定するすべての条件を満たす必要があります。
これらの条件のいずれかを定義しない場合は、Amplitudeはセッション定義プロパティとしてデフォルトがセッションIDにされます。
条件は次のとおりです:
- セッションプロパティ。セッションをグループ化するのに使用するプロパティを選択します。デフォルトはセッションIDですが、イベントまたはユーザープロパティでグループ化することを選択できます。
- セッションタイムアウト。デフォルトタイムアウトインターバルを入力します。Amplitudeは1つのセッションの一部として指定するインターバルに先立ち、同じユーザーからのすべてのイベントをカウントします。デフォルト30分を推奨します。
- 開始と終了するセッションイベント。セッションの開始と終了を意味するイベントを指定します。タイムアウトインターバルが経過する前に発生する場合、終了イベントのトリガーはセッションを終了します。
- 最後に、確認フレーズを入力し、[保存]をクリックします。
注意: セッション定義を変更するはプロジェクトのすべてのユーザーセッションとパスファインダーチャートに適用されます。カスタムセッション定義を設定または変更する前に、インパクトが何であるかを理解する必要があります。
Amplitudeは条件の組み合わせを論理ANDとして扱います。例えば、セッションのすべてのイベントが同じソースからであることを保証する場合は、タンデムでconstantプロパティとタイムアウトウィンドウを使用することによってこれを達成することができます:
- 定数プロパティ=
デバイスID
- セッションタイムアウト=
30 min
または、アプリ内使用に基づいてセッションを定義するには、開始イベントとタイムアウトウィンドウを使用することができます:
- 開始イベント=アプリオープン
- セッションタイムアウト=
30 min
Amplitudeによりセッションの長さを計算する
session IDをセッションプロパティとして使用する場合、Amplitudeは次の式を使用してセッションの長さを計算します:
max(client_event_time) - min(client_event_time)
ここでは:
client_event_time
はデバイスがイベントを記録した現地時間のタイムスタンプ(UTC)です。max(client_event_time)
はデバイスにより記録された最後のイベントの現地時間のタイムスタンプ(UTC)です。
また、hidden、inactiveおよびdeletedの各イベントはセッションの長さの計算に含まれません。例えば、次の一連のイベントがあるとします:
イベントA --> イベントB --> イベントC --> イベントD
イベントCとイベントDがデータ管理で非表示、非アクティブまたは削除となっている場合、max(client_event_time)
はイベントDではなくイベントBから取得されます。