メインコンテンツまでスキップ

応用ガイド

最終更新 2026/10/03

1. イベントの送信​

SDKの初期化が完了したら、データのトラッキングを行い、ユーザーの行動情報を収集できます。通常は通常イベントで業務シナリオの要件を満たせますが、実際の業務シナリオに応じて、初回イベントや更新可能イベントなどを使用することもできます。

1.1 通常イベント​

trackを呼び出してイベントを送信できます。事前に整理したドキュメントに従って、イベントのプロパティと送信条件を設定することをお勧めします。ここでは、ユーザーが商品を購入する場合を例にします:

//イベントプロパティを設定
Map<String,Object> properties = new HashMap<String,Object>();
properties.put("product_name","商品名");//文字列
try {
te.track("account_id","distinct_id","product_buy",properties);
} catch (Exception e) {
System.out.println("except:"+e);
}

1.2 初回イベント​

初回イベントとは、あるデバイスまたはその他のディメンションのIDに対して、一度だけ記録されるイベントです。たとえば、あるデバイスでのアクティベーションイベントを記録したい場合は、初回イベントでデータを送信できます。「初回イベントの検証」機能を使用するには、propertiesに#first_check_idフィールドを設定する必要があります。タイプは文字列です。

// 初回イベントを送信。イベント名はdevice_activation、first_check_idの値はdevice_id
Map<String, Object> properties = new HashMap<>();
properties.put("price",100);
properties.put("status",3);
properties.put("#first_check_id","device_id");
te.trackFirst("account_id", "distinct_id", "device_activation", properties);

注意:初回かどうかの検証はサーバー側で行われるため、初回イベントはデフォルトで1時間遅れて取り込まれます。

1.3 更新可能イベント​

更新可能イベントを使用すると、特定のシナリオでイベントデータを変更する必要がある場合に対応できます。更新可能イベントでは、そのイベントを識別するIDを指定し、更新可能イベントのオブジェクトを作成する際に渡す必要があります。AE管理画面は、イベント名とイベントIDに基づいて更新するデータを特定します。

// 更新可能なイベントを送信。イベント名はUPDATABLE_EVENT
// 送信後、イベントプロパティstatusは3、priceは100になります
Map<String, Object> properties = new HashMap<>();
properties.put("price",100);
properties.put("status",3);
te.trackUpdate("account_id","distinct_id","UPDATABLE_EVENT","test_event_id",properties);

// 送信後、同じイベントのプロパティstatusは5に更新され、priceは変わりません
Map<String, Object> protertiesNew = new HashMap<>();
protertiesNew.put("status",5);
te.trackUpdate("account_id", "distinct_id", "UPDATABLE_EVENT", "test_event_id", protertiesNew);

1.4 上書き可能イベント​

上書き可能イベントは更新可能イベントと似ていますが、上書き可能イベントでは最新のデータで過去のデータを完全に上書きする点が異なります。効果としては、前のデータを削除して最新のデータを格納するのと同じです。AE管理画面は、イベント名とイベントIDに基づいて更新するデータを特定します。

// 上書き可能なイベントを送信。イベント名はOVERWRITE_EVENT
// 送信後、イベントプロパティstatusは3、priceは100になります
Map<String, Object> properties = new HashMap<>();
properties.put("price",100);
properties.put("status",3);
te.trackOverwrite("account_id","distinct_id", "OVERWRITE_EVENT","test_event_id", properties);

// 送信後、イベントプロパティstatusは5に更新され、priceプロパティは削除されます
Map<String, Object> protertiesNew = new HashMap<>();
protertiesNew.put("status",5);
te.trackOverwrite("account_id", "distinct_id", "OVERWRITE_EVENT", "test_event_id", protertiesNew);

2. ユーザープロパティ​

AEプラットフォームがサポートしているユーザープロパティ設定APIは次のとおりです:userSet、userSetOnce、userAdd、userUnset、userDelete、userAppend、userUniqAppend。

2.1 userSet​

一般的なユーザープロパティは、userSetを呼び出して設定できます。このインターフェースで送信したプロパティは、元のプロパティ値を上書きします。そのユーザープロパティが存在しない場合は新しく作成され、タイプは渡されたプロパティのタイプと同じになります。ここでは、ユーザー名の設定を例にします:

//この時点でuser_nameはTA
Map<String,Object> userProperties = new HashMap<String,Object>();
userProperties.put("user_name", "TA");
try {
te.userSet("account_id","distinct_id",userProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

//この時点でuser_nameはAE
Map<String,Object> newUserProperties = new HashMap<String,Object>();
newUserProperties.put("user_name", "AE");
try {
te.userSet("account_id","distinct_id",newUserProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

2.2 userSetOnce​

送信するユーザープロパティを一度だけ設定すればよい場合は、userSetOnceを呼び出して設定できます。そのプロパティにすでに値がある場合、この情報は無視されます。ここでは、初回課金時間の設定を例にします:

//first_payment_timeは2018-01-01 01:23:45.678
Map<String,Object> userProperties = new HashMap<String,Object>();
userProperties.put("first_payment_time","2018-01-01 01:23:45.678");
try {
te.userSetOnce("account_id","distinct_id",userProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

//first_payment_timeは2018-01-01 01:23:45.678のまま
Map<String,Object> newUserProperties = new HashMap<String,Object>();
newUserProperties.put("first_payment_time","2018-12-31 01:23:45.678");
try {
te.userSetOnce("account_id","distinct_id",newUserProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

2.3 userAdd​

数値型のプロパティを送信して累積加算を行う場合は、userAddを呼び出せます。そのプロパティがまだ設定されていない場合は、0を代入してから計算します。負の値を渡すこともでき、その場合は減算と同じになります。ここでは、累積課金額を例にします:

Map<String,Object> userProperties = new HashMap<String,Object>();
userProperties.put("total_revenue",30);
//ユーザープロパティを送信。この時点で"total_revenue"の値は30
try {
te.userAdd("account_id","distinct_id",userProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

//再度ユーザープロパティを送信。この時点で"total_revenue"の値は累計で678になります
Map<String,Object> newUserProperties = new HashMap<String,Object>();
newUserProperties.put("total_revenue",648);
try {
te.userAdd("account_id","distinct_id",newUserProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

設定するプロパティのkeyは文字列で、Valueには数値のみ指定できます。

2.4 userAppend​

userAppendを呼び出して、配列型のユーザープロパティに要素を追加できます。

Map<String,Object> properties = new HashMap<String,Object>();
List<String> list = new ArrayList<>();
list.add("apple");
list.add("ball");
properties.put("user_list",list);
try{
//この時点でuser_listのプロパティ値は["apple","ball"]
te.userAppend("account_id", "distinct_id", properties);
} catch (Exception e) {
System.out.println("except:"+e);
}

2.5 userUniqAppend​

userUniqAppendを呼び出して、配列型のユーザープロパティに要素を追加できます。userUniqAppendインターフェースを呼び出すと、追加するユーザープロパティの重複が除去されます。userAppendインターフェースは重複を除去しないため、ユーザープロパティに重複が存在する場合があります。

Map<String,Object> properties = new HashMap<String,Object>();
List<String> list = new ArrayList<>();
list.add("apple");
list.add("ball");
properties.put("user_list",list);

Map<String,Object> newProperties = new HashMap<String,Object>();
List<String> newList = new ArrayList<>();
newList.add("apple");
newList.add("cube");
newProperties.put("user_list", newList);
try{
//この時点でuser_listのプロパティ値は["apple","ball"]
te.userAppend("account_id", "distinct_id", properties);
//この時点でuser_listのプロパティ値は["apple","apple","ball","cube"]
te.userAppend("account_id", "distinct_id",newProperties);
//この時点でuser_listのプロパティ値は["apple","ball","cube"]
te.userUniqAppend("account_id", "distinct_id",newProperties);
} catch (Exception e) {
System.out.println("except:"+e);
}

2.6 userUnset​

ユーザーのユーザープロパティの値をクリアする場合は、userUnsetを呼び出して指定したプロパティをクリアできます。そのプロパティがまだクラスター内で作成されていない場合、userUnsetはそのプロパティを作成しません

// 複数のユーザープロパティをリセット
try {
te.userUnset("account_id", "distinct_id", "key1", "key2", "key3");
} catch (Exception e) {
System.out.println("except:"+e);
}

user_unset: には、クリアするプロパティのKey値を渡します。

2.7 userDelete​

あるユーザーを削除する場合は、userDeleteを呼び出してそのユーザーを削除できます。削除後はそのユーザーのユーザープロパティを照会できなくなりますが、そのユーザーが発生させたイベントは引き続き照会できます。この操作は元に戻せない結果を招く可能性があるため、慎重に使用してください

try{
te.userDelete("account_id","distinct_id");
} catch (Exception e) {
System.out.println("except:"+e);
}

3. その他の機能​

3.1 TDBatchConsumer​

注意

データ量が多すぎる場合やネットワークに異常がある場合は、データが失われるおそれがあるため、本番環境での使用はお勧めしません

データをバッチでリアルタイムにAEサーバーへ送信します。転送ツールと組み合わせる必要はありません。ネットワークの問題で送信に失敗した場合は3回再試行し、それでも失敗した場合はデータをキャッシュに保存します。キャッシュのサイズを設定でき、デフォルトは50です。つまり、キャッシュに保持されるデータの総数は最大50*20件です(20は1回あたりに送信するbatchの値で、設定可能です)。

TDAnalytics te = null;
try {
te = new TDAnalytics(new TDBatchConsumer("SERVER_URL", "APPID"));
} catch (Exception ignored){

}

パラメータの説明:

  • APPID: プロジェクトのAPPIDです。AE管理画面の「プロジェクト管理」ページで取得できます

  • SERVER_URL: データの送信先URL

    • クラウドサービスをご利用の場合は、次を入力します: https://global-receiver-ta.thinkingdata.cn
    • プライベートデプロイ版をご利用の場合は、データ収集アドレスにドメインをバインドし、HTTPS証明書を設定してください:https://データ収集アドレスにバインドしたドメイン

3.2 定期フラッシュ機能​

ConfigのintervalパラメータとautoFlushパラメータを設定すると、データを定期的に送信する機能を有効にできます。

TDAnalytics te = null;

// e.g. TDLogConsumer
try {
TDLoggerConsumer.Config config = new TDLoggerConsumer.Config("./log");
// The cache event is reported every 10 seconds
config.setAutoFlush(true);
config.setInterval(10);
te = new TDAnalytics(new TDLoggerConsumer(config));
} catch (Exception ignored){}

// e.g. TDBatchConsumer
try {
TDBatchConsumer.Config config = new TDBatchConsumer.Config();
// The cache event is reported every 10 seconds
config.setAutoFlush(true);
config.setInterval(10);
te = new TDAnalytics(new TDBatchConsumer("url", "appId", config));
} catch (Exception ignored){}
このページは役に立ちましたか?