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

応用ガイド

最終更新 2026/10/03

1. ユーザーIDの設定​

SDKインスタンスは、デフォルトでランダムなUUIDを各ユーザーのデフォルトのゲストIDとして使用します。このIDは、ユーザーが未ログイン状態のときの識別IDとして使われます。なお、ゲストIDは、ユーザーがAppを再インストールしたり、デバイスを変更したりすると変わります。

1.1 ゲストIDの設定​

ヒント

通常、ゲストIDをカスタマイズする必要はありません。ユーザー識別ルールを理解したうえで、ゲストIDを設定してください。

ゲストIDを置き換える必要がある場合は、SDKの初期化が完了した直後に呼び出してください。不要なアカウントが生成されないよう、複数回呼び出さないでください

Appにユーザーごとの独自のゲストID管理体系がある場合は、setDistinctIdを呼び出してゲストIDを設定できます:

// ゲストIDをThinkerに設定
TDAnalytics.setDistinctId("Thinker");

現在のゲストIDを取得する必要がある場合は、getDistinctIdを呼び出して取得できます:

//ゲストIDを返す
String distinctId = await TDAnalytics.getDistinctId();

1.2 アカウントIDの設定​

ユーザーがログインする際にloginを呼び出して、ユーザーのアカウントIDを設定できます。AEプラットフォームはアカウントIDを識別IDとして使用し、設定したアカウントIDはlogoutを呼び出すまで保持されます。loginを複数回呼び出すと、以前のアカウントIDが上書きされます。

// ユーザーのログイン時の一意の識別子。このデータは送信データの#account_idに対応し、この場合#account_idの値はTAになります
TDAnalytics.login("TA");

このメソッドはログインイベントを送信しません

1.3 アカウントIDのクリア​

ユーザーがログアウトした後にlogoutを呼び出して、アカウントIDをクリアできます。次にloginを呼び出すまでは、ゲストIDが識別IDとして使われます。

TDAnalytics.logout();

logoutは、明示的なログアウトイベントのときに呼び出すことを推奨します。たとえば、ユーザーがアカウントからログアウトする操作を行ったときにのみ呼び出し、Appを閉じるときに呼び出す必要はありません。

このメソッドはログアウトイベントを送信しません

2. イベントの送信​

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

2.1 通常イベント​

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

TDAnalytics.track('product_buy', properties: <String, dynamic>{'product_name': '商品名'});

2.2 初回イベント​

初回イベントとは、デバイスまたはその他のディメンションのIDに対して、1回だけ記録されるイベントのことです。たとえば、あるデバイスでのアクティベーションイベントを記録したい場合は、初回イベントでデータを送信できます。

//例:デバイスの初回イベントを送信。イベント名はdevice_activationとします
var properties = {'key': 'value'};
TDFirstEventModel firstModel =TDFirstEventModel('device_activation','', properties);
TDAnalytics.trackEventModel(firstModel);

デバイス以外のディメンションで初回かどうかを判定したい場合は、初回イベントのfirst_check_idをカスタマイズできます:

// ユーザーIDを初回イベントのfirst_check_idに設定し、ユーザーの初回アクティベーションイベントを収集
var properties = {'key': 'value'};
TDFirstEventModel firstModel =TDFirstEventModel('device_activation','TA', properties);
TDAnalytics.trackEventModel(firstModel);

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

2.3 更新可能イベント​

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

// 例:更新可能なイベントを送信。イベント名はUPDATABLE_EVENTとします
// 送信後、イベントプロパティstatusは3、priceは100
var properties = {
'status': 3,
'price': 100
};
TDUpdatableEventModel updateModel = TDUpdatableEventModel('UPDATABLE_EVENT', 'test_event_id', properties);
TDAnalytics.trackEventModel(updateModel);

// 送信後、イベントプロパティstatusは5に更新され、priceは変わりません
var properties_new = {
'status': 5
};
var updateModel_new = TDUpdatableEventModel('UPDATABLE_EVENT', 'test_event_id', properties_new);
TDAnalytics.trackEventModel(updateModel_new);

2.4 上書き可能イベント​

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

// 例:上書き可能なイベントを送信。イベント名はOVERWRITABLE_EVENTとします
// 送信後、イベントプロパティstatusは3、priceは100
var properties = {
'status': 3,
'price': 100
};
var overwriteModel = TDOverWritableEventModel('OVERWRITABLE_EVENT', 'test_event_id', properties);
TDAnalytics.trackEventModel(overwriteModel);

// 送信後、イベントプロパティstatusは5になり、priceプロパティは削除されます
var properties_new = {
'status': 5
};
var overwriteModel_new = TDOverWritableEventModel('OVERWRITABLE_EVENT', 'test_event_id', properties_new);
TDAnalytics.trackEventModel(overwriteModel_new);

2.5 共通イベントプロパティ​

共通イベントプロパティとは、すべてのイベントで送信されるプロパティのことです。プロパティの更新頻度に応じて、共通イベントプロパティは静的共通イベントプロパティと動的共通イベントプロパティに分けられます。具体的な業務シナリオの要件に応じて、異なる共通イベントプロパティの設定方法を選択できます。イベントを送信する前に、共通イベントプロパティを設定しておくことを推奨します。同じイベントで、共通イベントプロパティ、イベントのカスタムプロパティ、プリセットプロパティのKeyが同じ場合は、次の優先順位で値が設定されます:カスタムプロパティ>動的共通イベントプロパティ>静的共通イベントプロパティ>プリセットプロパティ。

2.5.1 静的共通イベントプロパティ​

静的共通イベントプロパティとは、変化の頻度が低く、すべてのイベントに含まれるプロパティのことです(ユーザーの会員レベルなど)。setSuperPropertiesで静的共通イベントプロパティを設定すると、SDKはイベントの収集時に、設定された共通イベントプロパティをイベントのプロパティとして取得します。

Map<String, dynamic> superProperties = {
'vip_level': 2
};
TDAnalytics.setSuperProperties(superProperties);

静的共通イベントプロパティはキャッシュに保存されるため、Appを起動するたびに呼び出す必要はありません。そのプロパティがすでに存在する場合は、再設定したプロパティで元のプロパティ値が上書きされます。そのプロパティが存在しない場合は、新しく作成されます。プロパティの設定以外にも、静的共通イベントプロパティを操作するためのAPIを提供しており、日常的な業務要件に対応できます。

// プロパティ名がSUPER_LISTの共通プロパティを削除
TDAnalytics.unsetSuperProperty('SUPER_LIST');
// すべての共通プロパティをクリア
TDAnalytics.clearSuperProperties();
//すべての共通イベントプロパティを取得
await TDAnalytics.getSuperProperties();

2.5.2 動的共通イベントプロパティ​

動的共通イベントプロパティとは、変化の頻度が高く、すべてのイベントに含まれるプロパティのことです(ユーザーのコイン数など)。setDynamicSuperPropertiesで動的共通プロパティのクラスを設定すると、SDKはイベントの収集時に動的共通イベントプロパティを自動的に取得し、トリガーされたイベントに追加します。動的共通プロパティを設定するには、Map<String, dynamic>型を返す関数を渡す必要があります。サンプルは次のとおりです:

// 動的共通プロパティを設定。動的共通プロパティは自動収集イベントには対応していません
TDAnalytics.setDynamicSuperProperties((){
return <String, dynamic> {
'DYNAMIC_DATE': DateTime.now().toUtc(),
};
});

動的共通プロパティは、現在、自動収集イベントには対応していません。

2.6 イベントの所要時間の記録​

あるイベントの継続時間を記録する必要がある場合は、timeEventを呼び出して計測を開始できます。計測したいイベント名を設定しておくと、そのイベントを送信する際に、記録した時間を表す#durationプロパティがイベントプロパティに自動的に追加されます。単位は秒です。なお、同じイベント名で計測中のタスクは1つしか持てません。

//次の例では、ユーザーがある商品ページに滞在した時間を集計します
//ユーザーが商品ページに入り、計測を開始
TDAnalytics.timeEvent('stay_shop');
// do some thing...
//ユーザーが商品ページを離れ、計測を終了。"stay_shop"イベントには、イベントの所要時間を表すプロパティ#durationが付与されます
TDAnalytics.track("stay_shop");

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

AEプラットフォームが現在対応しているユーザープロパティ設定インターフェースは次のとおりです: userSet、userSetOnce、userAdd、userUnset、userDelete、userAppend、userUniqAppend

3.1 userSet​

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

TDAnalytics.userSet(<String, dynamic>{'user_name': 'TA'}); //この時点でuser_nameはTA
TDAnalytics.userSet(<String, dynamic>{'user_name': 'AE'}); //この時点でuser_nameはAE

プロパティの形式の要件は、イベントプロパティと同じです。

3.2 userSetOnce​

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

//first_payment_timeは2018-01-01 01:23:45.678
TDAnalytics.userSetOnce(<String, dynamic>{'first_payment_time': '2018-01-01 01:23:45.678'});
//first_payment_timeは引き続き2018-01-01 01:23:45.678
TDAnalytics.userSetOnce(<String, dynamic>{'first_payment_time': '2018-12-31 01:23:45.678'});

3.3 userAdd​

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

//この時点でtotal_revenueは30
TDAnalytics.userAdd(<String, num>{ 'total_revenue': 30});
//この時点でtotal_revenueは678
TDAnalytics.userAdd(<String, num>{ 'total_revenue': 648});

3.4 userUnset​

ユーザーのあるプロパティをリセットする必要がある場合は、userUnsetを呼び出して、そのユーザーの指定したユーザープロパティの値を削除できます:

TDAnalytics.userUnset('USER_INT');

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

3.5 userDelete​

あるユーザーを削除する場合は、userDeleteを呼び出してそのユーザーを削除できます。削除後はそのユーザーのユーザープロパティを照会できなくなりますが、そのユーザーが発生させたイベントは引き続き照会できます:

TDAnalytics.userDelete();

3.6 userAppend​

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

TDAnalytics.userAppend(<String, List>{
'USER_LIST': ['apple','ball'],
});

3.7 userUniqAppend​

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

//この時点でuser_listのプロパティ値は["apple","ball"]
TDAnalytics.userAppend(<String, List>{ 'user_list': ['apple','ball']});
//この時点でuser_listのプロパティ値は["apple","apple","ball","cube"]
TDAnalytics.userAppend(<String, List>{ 'user_list': ['apple','cube']});
//この時点でuser_listのプロパティ値は["apple","ball","cube"]
TDAnalytics.userUniqAppend(<String, List>{ 'user_list': ['apple','cube']});

4. 暗号化機能​

SDKは暗号化機能に対応しています。クライアントはAES+RSAでデータを暗号化し、サーバー側でデータを復号します。暗号化・復号機能はクライアントとサーバーの連携が必要です。詳しくはカスタマーサクセス担当者にお問い合わせください。 SDKの初期化時に、データ転送の暗号化機能を有効にできます。

TDConfig config = TDConfig();
config.appId = "APP_ID";
config.serverUrl = "SERVER_URL";
//バージョン番号、公開鍵などの鍵情報を設定
config.enableEncrypt(1,"publicKey");
TDAnalytics.initWithConfig(config);

5. H5ページとの連携を有効化​

H5ページのデータを収集するJavaScript SDKと連携する必要がある場合は、次のインターフェースを呼び出してください。詳細はH5とAPP SDKの連携の節を参照してください

controller = WebViewController();
TDAnalytics.setJsBridge(controller);

6. その他の機能​

6.1 デバイスIDの取得​

SDKは初期化が完了すると、デバイスIDを自動的に生成してローカルキャッシュに記録します。同じアプリ/ゲームであれば、1台のデバイスのデバイスIDは変わりません。getDeviceIdを呼び出してデバイスIDを取得できます:

String deviceId = await TDAnalytics.getDeviceId();

6.2 デフォルトタイムゾーンの設定​

デフォルトでは、すべてのデータの発生時間は端末のローカル時間に設定されます。製品が複数のタイムゾーンにまたがって展開されていて、データの時間を指定したタイムゾーンに揃えたい場合は、timeZoneを渡してタイムゾーンを設定できます。timeZoneは有効なタイムゾーン文字列である必要があります(例:UTC、Asia/Shanghaiなど)。

デフォルトでは、SDKはインターフェースを呼び出した時点の端末のローカル時間をイベント発生時間として送信します。デフォルトタイムゾーンを設定するインターフェースでデフォルトのタイムゾーンを指定することもでき、その場合、すべてのイベントのイベント時間は設定したタイムゾーンに合わせて揃えられます:

TDConfig config = TDConfig();
config.appId = "appId";
config.serverUrl = "serverUrl";
config.timeZone = "UTC";
TDAnalytics.initWithConfig(config);

指定したタイムゾーンでイベント時間を揃えると、デバイスのローカルタイムゾーン情報は失われます。デバイスのローカルタイムゾーン情報を保持する必要がある場合は、現時点ではご自身でイベントに関連するプロパティを追加する必要があります。

6.3 時間の補正​

SDKはデフォルトで端末のローカル時間をイベント発生時間として送信します。ユーザーがデバイスの時間を手動で変更すると業務分析に影響が出るため、その場合は時間の補正を行うことで、イベント発生時間の正確性を確保できます。タイムスタンプ、NTPの2種類の時間補正方法を提供しています。

  • サーバーから取得した現在のタイムスタンプを使用して、SDKの時間を補正できます。以降、時間を指定していないすべての呼び出し(イベントデータやユーザープロパティの設定操作を含む)では、補正後の時間が発生時間として使用されます。
// 1585633785954は現在のunixタイムスタンプ(単位はミリ秒)で、北京時間の2020-03-31 13:49:45に相当します
TDAnalytics.calibrateTime(1585633785954);
  • NTPサーバーのアドレスを設定することもできます。設定後、SDKは渡されたNTPサービスのアドレスから現在時刻を取得し、SDKの時間を補正しようとします。デフォルトのタイムアウト時間(3秒)以内に正しい結果が返されなかった場合、以降はローカル時間でデータを送信します。
// Apple社のNTPサービスを使用して時間を補正
TDAnalytics.calibrateTimeWithNtp("time.apple.com");

1. NTPサービスによる時間補正には一定の不確実性があるため、タイムスタンプによる補正方法を優先的に検討することを推奨します

2. ネットワーク状況が良好な場合にユーザーのデバイスがすばやくサーバー時間を取得できるよう、NTPサーバーのアドレスは慎重に選択してください

このページは役に立ちましたか?