応用ガイド
1. イベントの送信
SDKの初期化が完了したら、データのトラッキングを行い、ユーザーの行動情報を収集できます。通常は通常イベントで業務シナリオの要件を満たせますが、実際の業務シナリオに応じて、初回イベントや更新可能イベントなどを使用することもできます。
1.1 通常イベント
Trackを呼び出してイベントを送信できます。事前に整理したドキュメントに従って、イベントのプロパティと送信条件を設定することをお勧めします。ここでは、ユーザーが商品を購入する場合を例にします:
// イベントプロパティを設定
Dictionary<string, object> properties = new Dictionary<string, object>();
// 文字列
properties.Add("product_name", "goods_name");
properties.Add("price", "123");
// account_idとdistinct_idの少なくとも一方を設定する必要があります
te.Track("accountId", "distinctId", "product_buy", properties);
1.2 初回イベント
初回イベントとは、デバイスまたはその他のディメンションのIDに対して、1回だけ記録されるイベントのことです。たとえば、あるデバイスでのアクティベーションイベントを記録したい場合は、初回イベントでデータを送信できます。
// 初回イベントを送信。イベント名はdevice_activation
Dictionary<string, object> properties = new Dictionary<string, object>();
//イベントプロパティを設定
properties.Add("price", 35);
//account_idとdistinct_idの少なくとも一方を設定する必要があります。first_check_idの値は空にできません
te.TrackFirst("accountId", "distinctId", "device_activation", "first_check_id", properties);
注意:初回かどうかの検証はサーバー側で行われるため、初回イベントはデフォルトで1時間遅れて取り込まれます。
1.3 更新可能イベント
更新可能イベントを使用すると、特定のシナリオでイベントデータを変更する必要がある場合に対応できます。更新可能イベントでは、そのイベントを識別するIDを指定し、更新可能イベントのオブジェクトを作成する際に渡す必要があります。AE管理画面は、イベント名とイベントIDに基づいて更新するデータを特定します。
// 更新可能イベントを送信。イベント名はUPDATABLE_EVENT
// イベントプロパティstatusは3、priceは100
Dictionary<string, object> properties = new Dictionary<string, object>();
properties.Add("price", 100);
properties.Add("status", 3);
te.TrackUpdate("accountId", "distinctId", "UPDATABLE_EVENT", "event_id", properties);
// 送信後、statusは5に更新され、priceは変わりません
Dictionary<string, object> newProperties = new Dictionary<string, object>();
newProperties.Add("status", 5);
//account_idとdistinct_idの少なくとも一方を設定する必要があります。event_idは空にできません
te.TrackUpdate("accountId", "distinctId", "UPDATABLE_EVENT", "event_id", newProperties);
1.4 上書き可能イベント
上書き可能イベントは更新可能イベントと似ていますが、上書き可能イベントでは最新のデータで過去のデータを完全に上書きする点が異なります。効果としては、前のデータを削除して最新のデータを格納するのと同じです。AE管理画面は、イベント名とイベントIDに基づいて更新するデータを特定します。
// 上書き可能イベントを送信。イベント名はOVERWRITE_EVENT
// 送信後、イベントプロパティstatusは3、priceは100になります
Dictionary<string, object> properties = new Dictionary<string, object>();
properties.Add("price", 100);
properties.Add("status", 3);
//account_idとdistinct_idの少なくとも一方を設定する必要があります。event_idは空にできません
te.TrackOverwrite("accountId", "distinctId", "OVERWRITE_EVENT", "event_id", properties);
// 送信後、イベントプロパティstatusは5に更新され、priceプロパティは削除されます
Dictionary<string, object> newProperties = new Dictionary<string, object>();
newProperties.Add("status", 5);
//account_idとdistinct_idの少なくとも一方を設定する必要があります。event_idは空にできません
te.TrackOverwrite("accountId", "distinctId", "OVERWRITE_EVENT", "event_id", newProperties);
2. ユーザープロパティ
AEプラットフォームでは、次のユーザープロパティ設定APIに対応しています:UserSet、UserSetOnce、UserAdd、UserUnSet、UserDelete、UserAppend、UserUniqAppend。
2.1 UserSet
一般的なユーザープロパティは、UserSetを呼び出して設定できます。このインターフェースで送信したプロパティは、既存のプロパティ値を上書きします。そのユーザープロパティが以前に存在しない場合は新しく作成され、タイプは渡されたプロパティのタイプと同じになります。ここでは、ユーザー名の設定を例にします:
//この時点でuser_nameはTA
Dictionary<string, object> properties= new Dictionary<string, object>();
properties.Add("user_name","TA");
te.UserSet("accountId","distinctId", properties);
//この時点でuser_nameはAE
Dictionary<string, object> newProperties= new Dictionary<string, object>();
newProperties.Add("user_name","AE");
//ユーザープロパティを設定。accountIdとdistinctIdの少なくとも一方を設定する必要があります
te.UserSet("accountId","distinctId", newProperties);
2.2 UserSetOnce
送信するユーザープロパティを一度だけ設定すればよい場合は、UserSetOnceを呼び出して設定できます。そのプロパティにすでに値がある場合、この情報は無視されます。ここでは、初回課金時間の設定を例にします:
//first_payment_timeは2018-01-01 01:23:45.678
Dictionary<string, object> properties = new Dictionary<string, object>();
properties.Add("first_payment_time", "2018-01-01 01:23:45.678");
te.UserSetOnce("accountId", "distinctId", properties);
//first_payment_timeは引き続き2018-01-01 01:23:45.678
Dictionary<string, object> newProperties = new Dictionary<string, object>();
newProperties.Add("first_payment_time", "2018-12-31 01:23:45.678");
te.UserSetOnce("accountId", "distinctId", newProperties);
2.3 UserAdd
数値型のプロパティを送信する場合は、UserAddを呼び出してそのプロパティを累積加算できます。そのプロパティがまだ設定されていない場合は、0を代入してから計算します。負の値を渡すこともでき、その場合は減算と同じになります。ここでは、累積課金額を例にします:
//ユーザープロパティを送信。この時点で"total_revenue"の値は30
Dictionary<string, object> properties = new Dictionary<string, object>();
properties.Add("total_revenue", 30);
te.UserAdd("accountId", "distinctId", properties);
//ユーザープロパティを再度送信。この時点で"total_revenue"の値は累積加算されて678
Dictionary<string, object> newProperties = new Dictionary<string, object>();
newProperties.Add("total_revenue", 648);
te.UserAdd("accountId", "distinctId", newProperties);
設定するプロパティのkeyは文字列で、Valueには数値のみ指定できます。
2.4 UserAppend
UserAppendを呼び出して、配列型のユーザープロパティに要素を追加できます。
Dictionary<string, object> dictionary = new Dictionary<string, object>();
List<string> list = new List<string>();
list.Add("ball");
dictionary.Add("user_list", list);
te.UserAppend("accountId", "distinctId", dictionary);
2.5 UserUniqAppend
UserUniqAppendを呼び出して、配列型のユーザープロパティに要素を追加できます。UserUniqAppendインターフェースは追加するユーザープロパティの重複を排除しますが、UserAppendインターフェースは重複を排除しないため、ユーザープロパティに重複が生じる場合があります。
//この時点でuser_listのプロパティ値は["apple","ball"]
Dictionary<string, object> dictionary = new Dictionary<string, object>();
List<string> list = new List<string>();
list.Add("apple");
list.Add("ball");
dictionary.Add("user_list", list);
te.UserAppend("accountId", "distinctId", dictionary);
//この時点でuser_listのプロパティ値は["apple","apple","ball","cube"]
Dictionary<string, object> newDictionary = new Dictionary<string, object>();
List<string> newList = new List<string>();
newList.Add("apple");
newList.Add("cube");
newDictionary.Add("user_list", newList);
te.UserAppend("accountId", "distinctId", newDictionary);
//この時点でuser_listのプロパティ値は["apple","ball","cube"]
te.UserUniqAppend("accountId", "distinctId", newDictionary);
2.6 UserUnSet
ユーザーのユーザープロパティ値をクリアする場合は、UserUnSetを呼び出して指定したプロパティをクリアできます。そのプロパティがまだクラスターで作成されていない場合、UserUnSetはそのプロパティを作成しません
// このユーザーの特定のプロパティを削除します。string型のコレクションである必要があります。例:
List<string> list = new List<string>();
list.Add("nickname");
list.Add("age");
te.UserUnSet("accountId", "distinctId", list);
user_unset: には、クリアするプロパティのKey値を渡します。
2.7 UserDelete
あるユーザーを削除する場合は、UserDeleteを呼び出してそのユーザーを削除できます。削除後はそのユーザーのユーザープロパティを照会できなくなりますが、そのユーザーが発生させたイベントは引き続き照会できます。この操作は元に戻せない結果をもたらす可能性があるため、慎重に使用してください
te.UserDelete("accountId", "distinctId");
3. その他の機能
3.1 TDBatchConsumer
データ量が多すぎる場合やネットワークに異常がある場合は、データが失われるおそれがあるため、本番環境での使用はお勧めしません
データをバッチでリアルタイムにAEサーバーへ送信します。転送ツールと組み合わせる必要はありません。
TDAnalytics te = new(new TDBatchConsumer("SERVER_URL", "APPID", true));
パラメータの説明:
-
APPID: プロジェクトのAPPIDです。AE管理画面の「プロジェクト管理」ページで取得できます -
SERVER_URL: データの送信先URL- クラウドサービスをご利用の場合は、次を入力します: https://global-receiver-ta.thinkingdata.cn
- プライベートデプロイ版をご利用の場合は、データ収集アドレスにドメインをバインドし、HTTPS証明書を設定してください:https://データ収集アドレスにバインドしたドメイン
3.2 定期フラッシュ機能
デフォルトでは、SDKは現在のデータサイズに基づいてのみデータを自動送信します。TDLoggerConsumer.TDConfigパラメータを設定すると、データを定期的に送信する機能を有効にできます。
using ThinkingData.Analytics;
TDLoggerConsumer.TDConfig config = new TDLoggerConsumer.TDConfig();
//3Sごとにデータを送信するよう設定。デフォルトは10S
config.BatchSec = 3;
TDAnalytics te = new(new TDLoggerConsumer("LOG_DIRECTORY", config));

