# Android SDK 利用ガイド
TIP
データをインポートする前に、インポート前の準備をご参照ください。
GitHub (opens new window)でAndroid SDKソースコードを取得することができます。
Android SDKに必要な最低システムバージョンはAndroid 4.0(API 14)です。
Android SDK(aar形式)サイズは約159KBです。
**最新バージョン:**2.7.52.7.5
更新時間**😗*2022-01-17
# 1. SDKの初期化
# 1.1自動的Android SDKの統合
Project
レベルのbuild.gradle
ドキュメントに次の依頼コードを追加します。
buildscript {
repositories {
jcenter()
mavenCentral()
}
}
Module
のディレクトリにあるbuild.gradle
ドキュメントに次のコードを追加します。
注意: v2.1.0バージョンではパッケージ名を変更し、古いパッケージ名は同時に使用できますが、新しい機能の更新はありません。古いバージョンから新しいバージョンにアップグレードするときはパッケージ名の変更にご注意ください。
dependencies {
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:2.7.5'
}
# 1.2 Android SDKの手動統合
Android SDK (opens new window)をダウンロードして解凍します。
libsフォルダにThinkingSDK. aarを追加します。
以下のコードをbuild.gradleに追加します。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
# 1.3 SDKの初期化
v1.3.0では、マルチAPP IDインスタンスの特性を追加し、新しい初期化方法を追加しました。マルチAPP IDの使用ガイドについては、Android SDKマルチインスタンスガイドをご参照ください。
アプリケーションのApplicationのonCreateメソッドで呼び出します。
// メインスレッドでSDKを初始化
ThinkingAnalyticsSDK instance = ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID, TA_SERVER_URL);
// 後続は下記の2つの方法でSDKを用いてイベントをアップロード
instance.track("some_event");
ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID).track("some_event");
// バージョン1.3.0以前,あるいはシングルインスタンスは下記の方法で初期化し、SDKを使用
// ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID);
// ThinkingAnalyticsSDK.sharedInstance(this).track("some_event");
パラメータ説明:
TA_APP_ID
:プロジェクトのAPP IDで、TAプラットフォームのプロジェクト管理ページで取得TA_SERVER_URL
:データアップロードのURL- SaaSを利用する場合は、次のように入力します。https://ta-receiver.thinkingdata.io
- オンプレミスサービス を使用する場合は、データ収集アドレスにドメイン名を紐づけ、HTTPS証明書を取得します: https://データ収集アドレスにドメイン名を紐づける
Android 9.0+はデフォルトでHTTPリクエストを制限するので、必ずHTTPSプロトコルを使用します。
v2.3.0以降、TDConfig
を使用し、初期化を完了することができます。TDConfig
はSDKの機能をよりカスタマイズすることができます。
// TDConfig インスタンスを取得
TDConfig config = TDConfig.getInstance(this, TA_APP_ID, TA_SERVER_URL);
// SDK初期化
ThinkingAnalyticsSDK instance = ThinkingAnalyticsSDK.sharedInstance(config);
v2.7.3から、新しいフィールドインスタンス名
が追加され、インスタンスの初期化時にインスタンス名name
が取り込まれ、インスタンスを識別します。インスタンス名name
からインスタンスを取得することもできます。
// TDConfig インスタンスを取得, NAMEを取り込む
TDConfig config = TDConfig.getInstance(this, TA_APP_ID, TA_SERVER_URL, TA_CONFIG_NAME);
// SDK初期化
ThinkingAnalyticsSDK instance = ThinkingAnalyticsSDK.sharedInstance(config);
# 1.4 H5ページとの連携(任意)
H5ページのデータを収集するJavaScript SDKと連携する必要がある場合は、WebView
初期化時に以下のインターフェイスを呼び出します。詳細はH5とAPP SDKの連携をご参照ください。
// H5ページデータと連携
instance.setJsBridge(webView);
// ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID).setJsBridge(webView);
// シングルインスタンスの呼び出し方法
// ThinkingAnalyticsSDK.sharedInstance(this).setJsBridge(webView);
# 2、ユーザーIDの設定
SDKインスタンスは、ランダムなUUIDをユーザーのデフォルトのゲストIDとして使用します。ゲストIDは、ユーザーが未ログイン状態でユーザーを識別するIDになります。しかし、アプリを再インストールしたり、デバイスを変更したりすると、ゲストIDが変更されます。
# 2.1 ゲストIDの設定(任意)
TIP
一般的に、ゲストIDを定義する必要はありません。ユーザー識別ルールを理解したうえ、ゲストIDの設定を行いましょう。
ゲストIDを変更する必要がある場合は、SDKの初期化が終了した後に呼び出さなければばりません。必要がないアカウントの作成を回避するため、複数に呼び出さないようにご注意ください。
使用するアプリは各ユーザーに対して独自のゲストID管理システムがある場合、identify
でゲストIDを設定します:
// ゲストIDを123456789ABCabcに設定
instance.identify("123456789ABCabc");
現在のゲストIDを取得する必要がある場合は、getDistinctIdを呼び出して取得します。
//ゲストIDに戻る. マルチインスタンスの場合は,インスタンスを呼び出すゲストIDに戻る
String distinctId = instance.getDistinctId();
# 2.2 アカウントIDの設定
ユーザーがログインする時、login
を呼び出してユーザーのアカウントIDを設定することができます。アカウントIDを設定した後、アカウントIDを識別IDとして設定し、設定したアカウントIDはlogout
が呼び出されるまで保持します。
instance.login("1234567@thinkinggame.cn");
login
は何度も呼び出すことができ、呼び出しのたびに、受信したアカウントIDが以前に保存したIDと一致するかどうかを判断し、一致する場合は呼び出しを無視し、一致しない場合は以前のIDを上書きします。
この方法は、ユーザーのログインイベントがアップロードされません**。**
# 2.3 アカウントIDの削除
ユーザーがログアウトした後、logout
てアカウントIDを削除することができます。次のlogout
が呼び出されるまで、ゲストIDを識別IDとして使用します。
instance.logout();
明示的なログアウトイベントでlogout
を呼び出すことをお勧めします。例えば、ユーザーがアカウントを削除する時に呼び出す必要があるが、アプリを閉じる時に呼び出す必要がありません。
この方法は、ユーザーのログアウトイベントがアップロードされません。
# 3、イベントの送信
SDKの初期化が完了した後、track
を呼び出してイベントをアップロードすることができます。通常、数十から数百の異なるイベントをアップロードする必要があります。TAを初めて使用する場合は、いくつかの重要なイベントをアップロードすることをお勧めします。
# 3.1 イベントの送信
track
を呼び出してイベントをアップロードすることができます。前の内容をもとに、イベントのプロパティと情報送信の条件を設定することをお勧めします。ここでは、ユーザーが商品を購入する例を示します。
//お店での購買イベント
try {
JSONObject properties = new JSONObject();
properties.put("product_name","商品名");
properties.put("product_num",1);
properties.put("Cost",100);
properties.put("isFirstBuy",true);
instance.track("product_buy",properties);
} catch (JSONException e) {
e.printStackTrace();
}
イベントの名前はString
型であり、アルファベットで始まり、数値、アルファベット、下線「_」を含むことができます。長さは最大50文字で大文字と小文字を区別しません。
- イベントのプロパティは
JSONObject
オブジェクトであり、各要素は1つのプロパティを表します。 - Keyの値はプロパティの名前であり、
String
型で、アルファベットで始まり、数値、アルファベット、下線「_」を含むことができます。長さは最大50文字で大文字と小文字を区別しません。 - Valueはプロパティの値であり、
String
、Number
、Boolean
、Date
とJSONArray
を含むことができます。JSONArray
の要素は、文字列のみがサポートされ、その他の形は文字列に変換されてから保持されます。
注: JSONArrayはv2.4.0からサポートされ、TAv2.5以降と併用する必要があります。
v2.2.0では、イベントの時間トリガーとタイムシフトを設定するメソッドオーバーロードが追加され、Date
型パラメーターを取り込むことでイベントの時間トリガーを設定し、TimeZone
型パラメーターでタイムシフトを設定します。このパラメーターを取り込まないと、track
が呼び出された時のシステム時間とタイムシフトをイベントの時間トリガーとタイムゾーンオフセットとして取得します。
try {
JSONObject properties = new JSONObject();
properties.put("product_name","商品名");
properties.put("product_num",1);
properties.put("Cost",100);
properties.put("isFirstBuy",true);
instance.track("product_buy", properties, new Date(), TimeZone.getDefault());
} catch (JSONException e) {
e.printStackTrace();
}
注意:イベントは時間トリガーを設定することができますが、受信側は次のように制限し、システム時間の10日前から3日後までのデータしか受信しません。期間を超えたデータは異常データとみなされ、データ全体は格納されません。
v2.3.1以降、SDKのデフォルトタイムゾーンを設定することで、複数のタイムゾーンでのイベント時間を揃えることができます。詳細はデフォルトタイムゾーンの設定をご参照ください。v2.5.0以降、SDKタイムインターフェイスを校正することで、サーバー側の時間を使用してデータを収集します。詳細は時間校正をご参照ください。
# 3.2 パブリックイベントプロパティの設定
ユーザーの会員ランク、加入ルートなどの重要なプロパティは、イベントごとに設定する必要があり、パブリックイベントのプロパティとして設定することができます。パブリックイベントプロパティは各イベントに含まれるプロパティのことです。setSuperProperties
を呼び出してパブリックイベントプロパティを設定することができます。イベントを送信する前に、パブリックイベントプロパティを設定することをお勧めします。
パブリックイベントプロパティの形式は、イベントプロパティと一致します。
//パブリックイベントプロパティを設定
try {
JSONObject superProperties = new JSONObject();
superProperties.put("vip_level",2);
superProperties.put("Channel","A1");
instance.setSuperProperties(superProperties);
} catch (JSONException e) {
e.printStackTrace();
}
//trackでイベントをアップロードすると、イベントにパブリックイベントプロパティが含まれる
try {
JSONObject properties = new JSONObject();
properties.put("product_id","A1354");
instance.track("product_pay",properties);
} catch (JSONException e) {
e.printStackTrace();
}
//イベントごとにプロパティを追加
try {
JSONObject properties = new JSONObject();
properties.put("vip_level",2);
properties.put("Channel","A1");
properties.put("product_id","A1354");
instance.track("product_pay",properties);
} catch (JSONException e) {
e.printStackTrace();
}
パブリックイベントプロパティはキャッシュに保存され、アプリを起動するたびに呼び出す必要はありません。setSuperProperties
を呼び出して設定済みのパブリックイベントプロパティをアップロードすると、プロパティが上書きされます。パブリックイベントプロパティはtrack
でアップロードされたプロパティのKeyと重複している場合、そのイベントのプロパティがパブリックイベントプロパティを上書きします。
//上記の例に続く.パブリックイベントプロパティに "Channel" と "vip_level"がある
try {
JSONObject superProperties = new JSONObject();
superProperties.put("Channel","B1"); //"Channel"が上書きされる
instance.setSuperProperties(superProperties);
} catch (JSONException e) {
e.printStackTrace();
}
try {
JSONObject properties = new JSONObject();
properties.put("product_id","A1354");
properties.put("vip_level",3); //"vip_level"が上書きされる
instance.track("product_pay",properties);
} catch (JSONException e) {
e.printStackTrace();
}
//受信したデータのプロパティ "Channel" の值は "B1","vip_level" の值は3
パブリックイベントプロパティを削除するには、unsetSuperProperty
を呼び出して、パブリックイベントプロパティを削除します。
すべてのパブリックイベントプロパティを削除するには、clearSuperProperties
を呼び出します。
すべてのパブリックイベントプロパティを取得するには、getSuperProperties
を呼び出します。
//パブリックイベントプロパティを削除する. 例えば、"Channel" プロパティを削除し,それ以降のデータはそのプロパティにならない
instance.unsetSuperProperty("Channel");
//すべてのパブリックイベントプロパティを削除する
instance.clearSuperProperties();
//すべてのパブリックイベントプロパティを取得する
instance.getSuperProperties();
# 3.3 動的パブリックプロパティの設定
v1.3.0では、動的パブリックプロパティの特性が新たに追加されました。パブリックプロパティはアップロード時にその時の値を取得し、会員等級などの可変なパブリックプロパティを便利にアップロードすることができます。setDynamicSuperPropertiesTracker
を使用して動的パブリックプロパティを設定すると、SDKはイベントアップロード時に自動的にgetDynamicSuperProperties
のプロパティを取得し、イベントに追加します。次の例は、イベントをアップロードするたびに時間をイベントに追加し、イベントが発生するとgetDynamicSuperProperties
の戻り値をイベントプロパティに追加します。
// パブリックプロパティを設定し,イベントアップロード時に動的にイベント時間を取得
instance.setDynamicSuperPropertiesTracker(
new ThinkingAnalyticsSDK.DynamicSuperPropertiesTracker() {
// getDynamicSuperPropertiesで動的パブリックプロパティのプロパティ値の取得方法を設定
@Override
public JSONObject getDynamicSuperProperties() {
JSONObject dynamicSuperProperties = new JSONObject();
String pattern = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat sDateFormat = new SimpleDateFormat(pattern,Locale.CHINA);
String timeString = sDateFormat.format(new Date());
try {
dynamicSuperProperties.put("dynamicTime", timeString);
} catch (JSONException e) {
e.printStackTrace();
}
return dynamicSuperProperties;
}
});
# 3.4 イベント時間の記録
あるイベントの継続時間を記録するにはtimeEvent
を呼び出して記録し、イベント名を設定します。このイベントをアップロードする際に、自動的にイベントプロパティに#duration
プロパティを追加し、記録時間を秒単位で表します。同じイベント名には1つのタイマータスクしか存在しません。
try {
//ユーザーが商品ページに入り,時間記録を開始する.イベントは"Enter_Shop"
instance.timeEvent("Enter_Shop");
//イベントプロパティを設定し,ユーザーが商品IDを閲覧
JSONObject properties = new JSONObject();
properties.put("product_id","A1354");
//イベントをアップロードし,時間記録を終了する."Enter_Shop" イベントにはイベント時間のプロパティを表す #durationが含まれる
instance.track("Enter_Shop",properties);
} catch (JSONException e) {
e.printStackTrace();
}
# 4、ユーザープロパティ
TAプラットフォームが現在サポートしているユーザープロパティ設定インターフェイスはuser_set
、user_setOnce
、user_add
、user_unset
、user_delete
、user_append
です。
# 4.1 user_set
通常のユーザープロパティは、user_set
を呼び出して設定することができます。このインターフェイスを使用してアップロードしたプロパティは、元のプロパティ値を上書きします。過去にこのユーザープロパティが存在しなかった場合は、新しいユーザープロパティが作成され、アップロードしたプロパティ型と同様です。下記はユーザー名を設定する例を示します。
try {
JSONObject properties = new JSONObject();
properties.put("UserName","ABC");
instance.user_set(properties);
//その時"UserName"は"ABC"
JSONObject newProperties = new JSONObject();
newProperties.put("UserName","abc");
instance.user_set(newProperties);
//その時"UserName"は"abc"
} catch (JSONException e) {
e.printStackTrace();
}
user_setで設定したユーザーのプロパティ型は、イベントプロパティと一致する必要があります。
# 4.2 user_set Once
アップロードするユーザープロパティが1回しか設定しない場合、user_setOnce
を呼び出して設定することができます。このプロパティは既に値がある場合、この情報が無視されます。初回の支払い時間を設定する例を示します。
try {
JSONObject properties = new JSONObject();
properties.put("FirstPaidTime","2018-01-01 01:23:45.678");
instance.user_setOnce(properties);
//その時"FirstPaidTime"は"2018-01-01 01:23:45.678"
JSONObject newProperties = new JSONObject();
newProperties.put("FirstPaidTime","2018-12-31 01:23:45.678");
instance.user_setOnce(newProperties);
//その時"FirstPaidTime"は"2018-01-01 01:23:45.678"
} catch (JSONException e) {
e.printStackTrace();
}
user_setOnceで設定したユーザープロパティ型は、イベントプロパティと一致する必要があります。
# 4.3 user_add
数値型プロパティをアップロードするには、user_add
を呼び出して、そのプロパティに対して累積操作を行います。そのプロパティが設定されていない場合は、0を割り当ててから計算します。負の値も渡すことができ、減算に相当します。ここでは累積支払い額を例にします。
try {
JSONObject properties = new JSONObject();
properties.put("TotalRevenue",30);
instance.user_add(properties);
//その時"TotalRevenue"は30
JSONObject newProperties = new JSONObject();
newProperties.put("TotalRevenue",648);
instance.user_add(newProperties);
//その時"TotalRevenue"は678
} catch (JSONException e) {
e.printStackTrace();
}
user_addで設定したユーザープロパティ型およびKey値の制限はuser_setと一致するが、ValueはNumber型のみが許可されます。
# 4.4 user_unset
ユーザーのユーザープロパティ値を削除したい場合、user_unset
を呼び出して指定したプロパティを空にすることができます。そのプロパティはクラスターで作成されていない場合、user_unset
がそのプロパティを作成しません。
// 単一のユーザープロパティをリセット
instance.user_unset("key1");
// 複数のユーザープロパティをリセット
instance.user_unset("key1", "key2", "key3");
// 複数のユーザープロパティをリセット,文字列配列を渡す
String[] keys = {"key1", "key2"};
instance.user_unset(keys);
user_unsetで渡されたパラメーターはユーザープロパティのプロパティ名であり、型は文字列または文字列の配列で、可変長引数の形をサポートします。
# 4.5 user_delete
あるユーザーを削除したい場合、user_delete
を呼び出してユーザーを削除することができます。それ以降、このユーザーのユーザープロパティを参照することができなくなるが、発生したイベントを参照することができます。
instance.user_delete();
# 4.6 user_append
v2.4.0から、user_append
を呼び出してJSONArrayのユーザープロパティを追加することができます。
try {
// list はユーザープロパティuser_listの值,JSONArray型
JSONArray list = new JSONArray("[\"apple\", \"ball\"]");
JSONObject properties = new JSONObject();
properties.put("user_list", list);
// user_appendでユーザープロパティuser_listに要素を追加し,存在しない場合,新しい要素を追加
mInstance.user_append(properties);
} catch (JSONException e) {
e.printStackTrace();
}
# 5、イベントの自動収集
Android SDKは、インストール、起動、シャットダウンなどを含む一部イベントの自動収集をサポートしています。
イベント自動収集の具体的な使い方については、Android SDK自動収集ガイドをご参照ください。
# 6、SDK構成
本節では、SDK構成に関連するいくつかのインターフェイスとオプションについて説明します。SDK自体は複数のインスタンスをサポートしているため、SDKの構成は、すべてのインスタンスに対するグローバル構成もあれば、シングルインスタンスに対する構成もあります。
- グローバル構成:一般的にはAndroidManifest.xmlで構成するか、静的メソッドで呼び出します。
- シングルインスタンス構成:インスタンスを呼び出して構成します。
# 6.1 アップロードするためのネットワーク条件の設定
デフォルトでは、SDKインスタンスは、ネットワークが2G、3G、4G、5G、Wifiの時にデータをアップロードします。以下の方法でアプロード可能のネットワーク条件を設定することができます。
//Wifi環境のみデータをアップロード/ダウンロード
instance.setNetworkType(NETWORKTYPE_WIFI);
//2G, 3G, 4G, 5G, Wifi の時,データをアップロード. デフォルト設定
instance.setNetworkType(NETWORKTYPE_DEFAULT);
//2G, 3G, 4G, 5G, Wifi の時,データをアップロード
instance.setNetworkType(NETWORKTYPE_ALL);
# 6.2 アップロードデータログの印刷
1.1.7では、ログを印刷する機能が追加されました。AndroidManifest.xmlのapplication
タグに次のコードを追加して、ログを印刷します。(デフォルトはオフ)。
<application...>
.....
<meta-data
android:name="cn.thinkingdata.android.EnableTrackLogging"
android:value="true" />
</application>
2.0.0では、印刷ログのインターフェイスが追加され、enableTrackLog
を呼び出して開くことができます。(デフォルトはオフ)
ThinkingAnalyticsSDK.enableTrackLog(true);
ログを開くと、ThinkingAnalytics関連のログをフィルタリングして、SDKのデータアップロードを確認することができます。
# 6.3 デバイスIDの取得
v2.0.0では、デバイスID(プリセットプロパティ#device_id
)のインターフェイスが追加されました。getDeviceId
を呼び出すことでデバイスIDを取得することができます。
instance.getDeviceId();
//デバイスIDをゲストIDに設定する必要があれば下記のように呼び出す
//instance.identify(instance.getDeviceId());
# 6.4 データアップロードの一時停止/中止
v2.1.0では、SDKインスタンスのデータアップロードを停止する機能が追加されました。SDKインスタンスのアップロードを停止するインターフェイスが2種類あります。
# 6.4.1 SDKアップロードの一時停止(enableTracking)
ユーザーがテスト環境にいる、またはテストアカウントでログインしているなどの場合、データの収集やアップロードを一時的に停止したいことがあります。その場合、次のインターフェイスを呼び出してSDKインスタンスのアップロードを一時的に停止することができます。
特定のインスタンス(メインインスタンスとライトインスタンスを含む)を通してenableTracking
を呼び出し、false
に取り込むことで、SDKインスタンスのアップロードを一時停止することができます。そのインスタンスに設定済の#distinct_id
、#account_id
、パブリックプロパティなどが保持されます。そのインスタンスが収集したがアップロード未完了のデータは引き続きアップロードされます。そのインスタンスはそれ以降新しいデータを収集したりアップロードしたりすることはできません。ゲストID、アカウントID、パブリックプロパティなどを設定することはできませんが、設定済のパブリックプロパティ、デバイスID、ゲストID、アカウントIDなどの情報を読み取ることはできます。
インスタンスの停止状態はenableTracking
が呼び出されるまでローカルのキャッシュに保存されます。enableTracking
を呼び出して、true
に取り込むと、SDKインスタンスはデータ収集とアップロードを再開します。ライトインスタンスはキャッシュに保存されないため、アプリを開くたびにライトインスタンスの一時停止状態は保持されず、アップロードが再開されます。
// アップロード一時停止
instance.enableTracking(false);
// アップロード再開
instance.enableTracking(true);
# 6.4.2 SDKアップロードの中止(optOutTracking)
GDPRが適用される地域でユーザーがデータ収集権限を提供しないなどの特殊の場合、次のインターフェイスを呼び出してSDKインスタンスの機能を完全に停止することができます。
optOutTracking
はメインインスタンスからしか呼び出すことができません。enableTracking
との最大の違いは、インスタンスのローカルキャッシュ(ゲストID、アカウントID、パブリックプロパティ、およびアップロードしていないデータキューを含む)が削除されます。その後、インスタンスの収集とアップロード機能をオフにします。
// アップロードを中止し,ローカルキャッシュをリセット
instance.optOutTracking();
SDK機能をオフにしている間にTAクラスタ内のユーザーデータを削除したい場合、optOutTrackingAndDeleteUser
を呼び出すと、SDKインスタンス機能を停止する前にuser_del
データをアップロードしてユーザーデータを削除することができます。
// アップロードを中止し,ユーザー削除リクエストを送信
instance.optOutTrackingAndDeleteUser();
インスタンスの停止状態もoptInTracking
が呼び出されるまでローカルキャッシュに保存されます。それ以降はアップロードを続けることができますが、新しいインスタンスとなります。
// アップロードを再開
instance.optInTracking();
# 6.5 自己署名証明書の設定
v2.3.0以降、SDKはSSLSocketFactoryカスタム証明書での検証が許可されました。自己署名証明書を設定するには、まず初期化時にTDConfigインスタンスを取得し、TDConfigで初期化を完了する必要があります。自己署名証明書はこのインスタンスのすべてのネットワークリクエストに有効です。
// TDConfig インスタンスを取得
TDConfig config = TDConfig.getInstance(this, TA_APP_ID, TA_SERVER_URL);
// カスタム証明書 SSLSocketFactoryを設定
config.setSSLSocketFactory(sslSocketFactory);
// SDK初期化
instance = ThinkingAnalyticsSDK.sharedInstance(config);
# 6.6 Debugモードの有効化
v2.3.0以降、クライアントSDKは Debug モードをサポートし、TA Platform 2.5以降のバージョンと併用する必要があります。
Debugモードは、データ収集の品質とアプリの安定性に影響を与える可能性があります。データの結合テストに使用することができますが、オンライン環境で使用しないようにご注意ください。
現在のSDKインスタンスは、3つの実行モードがサポートしています。TDConfig
で定義されています。
/**
* インスタンス実行モード, デフォルトは NORMAL モード.
*/
public enum ModeEnum {
/* 正常モード,データはキャッシュに保存され,キャッシュルールに従ってアップロード*/
NORMAL,
/* Debug モード,データは1つずつアップロードし,問題発生時にログと異常値でユーザーに報告 */
DEBUG,
/* Debug Only モード,データ検証のみ,格納しない */
DEBUG_ONLY
}
SDKインスタンスの実行モードを設定するには、TDConfig
でSDKの初期化を行います。
// TDConfig インスタンスを取得
TDConfig config = TDConfig.getInstance(this, TA_APP_ID, TA_SERVER_URL);
// 実行モードを Debug モードにする
config.setMode(TDConfig.ModeEnum.DEBUG);
// SDK初期化
instance = ThinkingAnalyticsSDK.sharedInstance(config);
Debugモードが本番環境でオンラインにならないように、指定されたデバイスのみがDebugモードをオンにすることができます。クライアントのDebugモードが有効で、且つデバイスIDがTAプラットフォームの「埋め込みポイント管理」ページの「Debugデータ」に構成されているデバイスでのみDebugモードを有効にすることができます。
デバイスIDは、次の3つの方法で取得することができます。
- TAプラットフォームのイベントデータの#device_idプロパティ
- クライアントログ:SDKの初期化が完了すると、デバイスDeviceIdが印刷される
- インスタンスインターフェイスを介する呼び出し:デバイスIDの取得
# 6.7 デフォルトタイムゾーンの設定
ユーザーがイベントの発生時間を指定しない場合、SDKはデフォルトで、インターフェイス呼び出し時のシステム時間をイベント発生時間としてアップロードします。v2.3.1以降では、デフォルトのタイムゾーンインターフェイスを設定することでデフォルトのタイムゾーンを指定することができます。すべてのイベント(自動収集のイベントを含む)は設定されたタイムゾーンに沿ってイベント時間を揃えることができます。
// TDConfig インスタンスを取得
TDConfig config = TDConfig.getInstance(this, TA_APP_ID, TA_SERVER_URL);
// デフォルトタイムゾーンを UTCに設定
config.setDefaultTimeZone(TimeZone.getTimeZone("UTC"));
// SDK初期化
instance = ThinkingAnalyticsSDK.sharedInstance(config);
注意:指定したタイムゾーンでイベント時間を揃えると、システムのタイムゾーン情報がなくなります。システムタイムゾーン情報を保持したい場合は、イベントに関連するプロパティを手動で追加する必要があります。
# 6.8 時間校正
SDKはデフォルトでシステム時間をイベント発生時刻として使用し、ユーザーが手動でシステム時間を変更すると業務分析に影響を与える可能性があります。v2.5.0以降、サーバー側から取得した現在のタイムスタンプでSDK時間を校正することができます。それ以降、時間が指定されていない呼び出し(イベントデータやユーザープロパティ設定の操作を含む)はすべて校正後の時間をイベント発生時間とします。
// 1585633785954 は現在の unix タイムスタンプ,単位はミリ秒,北京時間 2020-03-31 13:49:45に相当
ThinkingAnalyticsSDK.calibrateTime(1585633785954);
NTPから時間を取得しSDKを校正する機能も提供しています。ユーザーがアクセスできるNTPサーバーアドレスを入力する必要があり、SDKは受信したNTPサーバーアドレスから現在の時間を取得し、SDK時間を校正します。ただし、デフォルトのタイムアウト時間(3秒)以内に正しい結果が得られない場合、システム時間を使用してデータをアップロードします。
// Appleの NTP サービスで時間校正を行う
ThinkingAnalyticsSDK.calibrateTimeWithNtp("time.apple.com");
注意:
- ネットワークが良好の状態で、ユーザーのデバイスがスムーズにサーバーの到着時間を取得できるように、NTPサーバーアドレスを慎重に選択する必要があります。
- NTPサービスを用いる時間校正は不確実性があるので、タイムスタンプによる時間校正を優先的にご検討ください。
上記の時間校正インターフェイスに加えて、v2.5.0は、すべてのユーザープロパティインターフェイスの時間関数オーバーロードを提供しています。ユーザープロパティ関連のインターフェイスを呼び出すときに、Dateオブジェクトを取り込むと、受信したDateオブジェクトを使用してデータの#time
フィールドを設定します。
# 6.9 マルチプロセスのサポート
マルチプロセスのビジネス場面では、SDKはデフォルトでサブプロセスでのデータアップロードをサポートしていません。Application onCreateでSDKを初期化する時に、TDConfigで設定して、マルチプロセスをサポートすることができます。
//マルチプロセスのデータ収集をサポート
config.setMutiprocess(true);
クロスプロセス通信は比較的に遅いプロセスであり、デフォルトでオンにせず、サブプロセスで大量のデータ埋め込みを行わないことをお勧めします。
すべてのUIプロセス+サービスプロセスをサポートします。
# 6.10 グローバル構成書
バージョンV2.7.5以降は、SDKのグローバル構成書が追加されました。プロジェクトディレクトリのress/valuesのディレクトリで、収集を無効にすべきのプロパティの配列を構成するため、ta_public_config.xmlブックを追加します。
無効にできるすべてのプロパティは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- ThinkingAnalytics DisablePresetProperties start -->
<string-array name="TDDisPresetProperties">
<!-- <item>#disk</item>-->
<!-- <item>#fps</item>-->
<!-- <item>#ram</item>-->
<!-- <item>#app_version</item>-->
<!-- <item>#os_version</item>-->
<!-- <item>#manufacturer</item>-->
<!-- <item>#device_model</item>-->
<!-- <item>#screen_height</item>-->
<!-- <item>#screen_width</item>-->
<!-- <item>#carrier</item>-->
<!-- <item>#device_id</item>-->
<!-- <item>#system_language</item>-->
<!-- <item>#lib</item>-->
<!-- <item>#lib_version</item>-->
<!-- <item>#os</item>-->
<!-- <item>#bundle_id</item>-->
<!-- <item>#install_time</item>-->
<!-- <item>#start_reason</item>-->
<!-- <item>#simulator</item>-->
<!-- <item>#network_type</item>-->
<!-- <item>#zone_offset</item>-->
<!-- <item>#start_reason</item>-->
<!-- <item>#resume_from_background</item>-->
<!-- <item>#title</item>-->
<!-- <item>#screen_name</item>-->
<!-- <item>#url</item>-->
<!-- <item>#referrer</item>-->
<!-- <item>#element_type</item>-->
<!-- <item>#element_id</item>-->
<!-- <item>#element_position</item>-->
<!-- <item>#element_content</item>-->
<!-- <item>#element_selector</item>-->
<!-- <item>#app_crashed_reason</item>-->
<!-- <item>#background_duration</item>-->
<!-- <item>#duration</item>-->
</string-array>
<!-- ThinkingAnalytics DisablePresetProperties end -->
</resources>
# 6.11 その他のグローバル設定
SDKは AndroidManifest.xml
で一部のグローバル設定を変更することができます。一般的に、デフォルト設定で対応可能です。
<!-- デバッグログを開く -->
<meta-data
android:name="cn.thinkingdata.android.EnableTrackLogging"
android:value="true"
/>
<!-- データベースサイズの下限を設定(デフォルト 32 M) -->
<meta-data
android:name="cn.thinkingdata.android.MinimumDatabaseLimit"
android:value="16"
/>
<!-- キャッシュデータの保管期間を設定(デフォルト 15 日) -->
<meta-data
android:name="cn.thinkingdata.android.RetentionDays"
android:value="7"
/>
<!-- サービスを完全に終了(デフォルト false) -->
<meta-data
android:name="cn.thinkingdata.android.EnableQuitSafely"
android:value="true"
/>
<!-- サービスの完全終了サービスを立ち上げる際,各プロセス(キャッシュ, ネットワーク)のログアウト時間を待つ. デフォルト 2000 ms -->
<meta-data
android:name="cn.thinkingdata.android.QuitSafelyTimeout"
android:value="1000"
/>
# 7、関連のプリセットプロパティ
# 7.1 すべてのイベントのプリセットプロパティ
次のプリセットプロパティは、Android SDKのすべてのイベント(自動収集イベントを含む)に含まれるプリセットプロパティです。
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#ip | IPアドレス | ユーザ ー のIPアドレス 。 TAはユーザ ー の位置情報 を取得。 |
# country | 国 | ユーザーの国 。 IPアドレスに基づいて生成 。 |
# country_code | 国コード | ユーザーがいる国の国コード(ISO 3166-1 alpha-2、2大文字 のアルファベット ) 。 IPアドレスに基づいて生成 。 |
# province | 省 | ユーザー がいる省。 IPアドレスに基づいて生成 。 |
# city | 都市 | ユーザーがいる都市 。 IPアドレスに基づいて生成 。 |
#os_ version | オペレーティングシステムのバージョン | iOS 1 1.2.2、Android 8.0.0 など。 |
# manufacturer | 機器メーカー | Apple、vivoなど 、 ユーザー の デバイスのメーカー 。 |
#os | オペレーティングシステム | Android、iOSなど |
# device _id | デバイスID | ユーザーのデバイスID、iOSはユーザーのIDFV か UUID、AndroidはandroidIDを 取得。 |
#screen_height | 画面の高さ | ユーザ ーのデバイス の画面高さ 。例: 1920 |
#screen_width | 画面の幅 | ユーザ ーのデバイス の画面 の幅。例:1080 |
#device_model | デバイスモデル | ユーザーデバイスのモデル 。例: iPhone 8 |
#app_version | APPバージョン | アプリのバージョン |
#bundle_id | アプリケーション固有のID | アプリケーション の パッケージ名またはプロセス名 |
#lib | SDKタイプ | SDK の タイプ 。 Android、iOSなど 。 |
#lib_version | SDKバージョン | SDKのバージョン 。 |
#network_type | ネットワーク状態 | イベント アップロード時のネットワーク状態 。 WIFI、3G、4G など。 |
#carrier | ネットワークキャリア | ユーザー デバイス のネットワーク キャリア。 中国移動、中国電信など 。 |
#zone_offset | タイムゾーンオフセット | UTC 時間 に対するデータ 時間 のオフセット時間数 |
#install_time | プログラムのインストール時間 | ユーザー の アプリケーション の インストール時間 。 値はシステム による。 |
#simulator | エミュレータ (はい/いいえ) | デバイス が エミュレータかどうか |
#ram | デバイスの実行メモリの状態 | ユーザーデバイスの残りメモリと合計メモリ 。例: 1.4/2.4 |
#disk | デバイス の ストレージの状態 | ユーザ ーデバイスの残りのストレージ 容量と総 ストレージ 容量 。 例 : 30 /200 |
#fps | デバイスFPS | ユーザーデバイス の画像 の 毎秒 の フレームレート 。例:60 |
# 7.2 自動収集イベントのプリセットプロパティ
以下のプリセットプロパティは、各自動収集イベントに特有のプリセットプロパティです。
- APP起動イベント(ta_app_start)のプリセットプロパティ
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#resume_from_background | バックグラウンドから 起こすか | APPが 起動されたか バックグラウンドから 起こされた かを示 す。 true は バックグラウンドから 起こす。 false は直接に起動する。 |
#start_reason | オープンソースの応用 | 非launcher方式で立ち上げた場合、このプロパティが存在する。例えば、 deeplinkや 他のアプリstartActivityで立ち上げる。例: "#start_reason":"{"url":"thinkingdata:\/\/","data":"}" |
#backgroud_duration | バックグラウンドイベントの長さ | 2回のstartイベントの発生 期間内の アプリ の バックグラウンドに入る時間を記録 する。 単位は秒 。 |
- APPページビューイベント(ta_app_end)のプリセットプロパティ
プロパティ 名 | 日本語 | 説明 |
---|---|---|
# duration | イベントの長さ | アプリの起動から終了までの時間を秒単位で 表す。 |
- APPページビューイベント(ta_app_view)のプリセットプロパティ
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#title | ページタイトル | コントロールが属する Activity のタイトルの値 。値は Activity の title プロパティ 値 。 |
#screen_name | ページ名 | コントロールが属する Activity のパッケージ名 、 クラス名 。 |
#url | ページアドレス | 現ページのアドレス 。 getScreenUrl を呼び出し て urlの設定 を行う。 |
#referrer | 前ページ アドレス | 前ページのアドレス に戻る。 getScreenUrl を呼び出し て urlの設定 を行う。 |
- APPコントロールのクリックイベント(ta_app_click)のプリセットプロパティ
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#title | ページタイトル | コントロールが属する Activity のタイトルの値。値は Activity の title プロパティ 値。 |
#screen_name | ページ名 | コントロールが属する Activity のパッケージ名、クラス名。 |
#element_id | 要素ID | コントロールのID 。 デフォルトで android: id を使用。 setViewID で 設定 可能。 |
#element_type | 要素の種類 | コントロールの種類 |
#element_selector | 要素セレクタ | コントロールの viewPath の つなぎ |
#element_position | 要素の位置 | コントロールの位置情報 。 コントロールに position プロパティ がある場合 のみ アップロード 。 |
#element_content | 要素の内容 | コントロールの内容 。 |
- APPクラッシュイベント(ta_app_crash)のプリセットプロパティ
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#app_crashed_reason | 異常 情報 | 文字型で、クラッシュ時のスタック軌跡を記録 |
# 7.3 その他のプリセットプロパティ
以上のプリセットプロパティに加えて、一部のプリセットプロパティを記録するにはそれに対応するインタフェースを呼び出す必要があります。
プロパティ 名 | 日本語 | 説明 |
---|---|---|
#duration | イベントの長さ | 時間記録 機能インターフェイス timeEvent を呼び出してイベントの長さを記録する。 単位は秒 。 |
#backgroud_duration | バックグラウンドイベントの長さ | 時間記録機能インターフェイス timeEvent を呼び出して、 イベント発生 期間 内、アプリがバックグラウンドに入る時間を記録 する。 単位は秒 。 |
# 7.4 プリセットプロパティの取得
v2.7.0以降では、getPresetProperties()
を呼び出してプリセットプロパティを取得することができます。
サーバー側の埋め込みポイントにアプリ側のプリセットプロパティが必要な場合、この方法でアプリ側のプリセットプロパティを取得してサービス側に渡します。
//プロパティオブジェクトを取得
TDPresetProperties presetProperties = instance.getPresetProperties();
//イベントプリセットプロパティの生成
JSONObject properties = presetProperties.toEventPresetProperties();
/*
{
"#carrier": "中国電信",
"#os": "Android",
"#device_id": "abb8e87bfb5ce66c",
"#screen_height": 2264,
"#bundle_id": "com.sw.thinkingdatademo",
"#manufacturer": "realme",
"#device_model": "RMX1991",
"#screen_width": 1080,
"#system_language": "zh",
"#os_version": "10",
"#network_type": "WIFI",
"#zone_offset": 8
}
*/
//プリセットプロパティの取得
String bundle_id = presetProperties.bundle_id;//パッケージ名
String os = presetProperties.os;//os種類,例:Android
String system_language = presetProperties.system_language;//デバイスシステム言語
int screen_width = presetProperties.screen_width;//画面の幅
int screen_height = presetProperties.screen_height;//画面の高さ
String device_model = presetProperties.device_model;//デバイスモデル
String device_id = presetProperties.device_id;//デバイスID
String carrier = presetProperties.carrier;//ネットワークキャリア,2つのSIMがある場合,メインSIMの情報を取得
String manufacture = presetProperties.manufacture;// デバイスメーカー 例:HuaWei
String network_type = presetProperties.network_type;//ネットワーク種類
String os_version = presetProperties.os_version;//システムバージョン
double zone_offset =presetProperties.zone_offset;//タイムゾーンオフセット
IP、国の都市情報はサーバー側で解析して生成されるので、クライアント側はこれらのプロパティを取得するインタフェースを提供しません。
# 8、高度な機能
v2.6.0以降、SDKは、初期イベント、更新可能なイベント、書き換え可能なイベントとの3つの特殊イベントのアップロードをサポートしています。この3つのイベントは、TAシステム2.8以降のバージョンと併用する必要があります。特殊イベントは特定の場面でしか適用されないので、TAのクライアントとアナリストのもとに、特殊イベントのアップロードを行うようにしましょう。
# 8.1 初期イベント
初期イベントとは、あるデバイスや他のディメンションのIDに対して、一度しか記録されないイベントです。たとえば、デバイスで最初に発生したイベントを記録したい場合は、初期イベントを用いてデータをアップロードすることができます。
// 例:初期イベントをアップロード. イベント名は DEVICE_FIRST.
JSONObject properties = new JSONObject();
try {
properties.put("INT_PROPERTY", 0);
} catch (JSONException e) {
e.printStackTrace();
}
instance.track(new TDFirstEvent("DEVICE_FIRST", properties));
デバイス以外のディメンションで初回かどうかを判断するには、初期イベントにFIRST_CHECK_IDを設定します。たとえば、あるアカウントの初期イベントを記録する必要がある場合、アカウントIDを初期イベントのFIRST_CHECK_IDに設定します。
// 例:ユーザーアカウントの初期イベント. イベント名はUSER_FIRSTに仮定
JSONObject properties = new JSONObject();
try {
properties.put("INT_PROPERTY", 0);
} catch (JSONException e) {
e.printStackTrace();
}
TDFirstEvent firstEvent = new TDFirstEvent("USER_FIRST", properties);
// ユーザー ID を初期イベントのFIRST_CHECK_IDに設定
firstEvent.setFirstCheckId("YOUR_ACCOUNT_ID");
instance.track(firstEvent);
注意:サーバー側で初回かどうかをチェックするため、初期イベントはデフォルトで1時間遅れて格納します。
# 8.2 更新可能なイベント
更新可能なイベントを通して、特定の場面でのイベントデータの変更要件を満たすことができます。更新可能なイベントは、イベントを識別するIDを指定し、更新可能なイベントオブジェクトの作成時に読み込むする必要があります。TAプラットフォームは、イベント名とイベントIDに基づいて更新するデータを決定します。
// 例: 更新可能なイベントをアップロード,イベント名は UPDATABLE_EVENTに仮定
JSONObject properties = new JSONObject();
try {
properties.put("status", 3);
properties.put("price", 100);
} catch (JSONException e) {
e.printStackTrace();
}
// イベントプロパティアップロード後に status は 3, price は 100
mInstance.track(new TDUpdatableEvent("UPDATABLE_EVENT", properties, "test_event_id"));
JSONObject properties_new = new JSONObject();
try {
properties_new.put("status", 5);
} catch (JSONException e) {
e.printStackTrace();
}
// イベントプロパティアップロード後に status は 5に更新され, price は変わらない
mInstance.track(new TDUpdatableEvent("UPDATABLE_EVENT", properties_new, "test_event_id"));
更新可能なイベントはデフォルトで、システム時間を使用して過去データのイベント時間を更新します。イベント時間を指定したい場合は、更新可能なイベントをアップロードするときにイベント時間を指定します。
TDUpdatableEvent tdEvent = new TDUpdatableEvent("OVERWRITE_EVENT", properties, "test_event_id");
tdEvent.setEventTime(date, timeZone);
mInstance.track(tdEvent);
# 8.3 書き換え可能なイベント
書き換え可能なイベントは更新可能なイベントと似ており、違いとしては書き換え可能なイベントは最新のデータで過去データを完全に上書きするので、過去データを削除し、最新のデータを格納することに相当します。TAプラットフォームは、イベント名とイベントIDに基づいて更新するデータを決定します。
// 例: 書き換え可能なイベントをアップロードし,イベント名は OVERWRITE_EVENTに仮定
JSONObject properties = new JSONObject();
try {
properties.put("status", 3);
properties.put("price", 100);
} catch (JSONException e) {
e.printStackTrace();
}
// イベントプロパティアップロード後に status は 3, price は 100
mInstance.track(new TDOverWritableEvent("OVERWRITE_EVENT", properties, "test_event_id"));
JSONObject properties_new = new JSONObject();
try {
properties_new.put("status", 5);
} catch (JSONException e) {
e.printStackTrace();
}
// イベントプロパティアップロード後に status は 5に更新され, price は削除される
mInstance.track(new TDOverWritableEvent("OVERWRITE_EVENT", properties_new, "test_event_id"));
書き換え可能なイベントは、システム時間を使用して過去データのイベント時間を更新します。イベント時間を指定したい場合は、更新可能なイベントをアップロードするときにイベント時間を指定します。
TDOverWritableEvent tdEvent = new TDOverWritableEvent("OVERWRITE_EVENT", properties, "test_event_id"
tdEvent.setEventTime(date, timeZone);
mInstance.track(tdEvent);
# 改訂履歴
# v2.7.5 2022/01/17
- プリセットプロパティ#install_time/#app_version/#simulator/#ram/#disk/#fps/#start_reasonの追加
- タイムイベントのプロパティ#backgroud_durationの追加
- プリセットプロパティのスイッチを制御するSDK設定テキストの追加
- 自動収集イベントコールバックの追加
- 一部コードロジック最適化
# v2.7.4 2021/12/17
- 一部既知の問題の修正
- コード構造の最適化
# v2.7.3 2021/10/22
- インスタンスを識別するフィールドインスタンス名の追加
- イベントを自動収集するカスタムプロパティ機能の追加
- コード最適化
# v2.7.1 2021/08/20
- HarmonyOS適応
- app_endイベント収集ロジックの最適化
- コード最適化
# v2.7.0 2021/06/16
- プリセットプロパティ取得のサポート
- マルチプロセスビジネス場面におけるサブプロセスでの直接データアップロードのサポート
- コード最適化
# v2.6.3 2021/03/15
- Android 11適応
- Target 30適用
- ネットワーク電波取得ロジックの最適化
- #bundle_idプリセットプロパティ(アプリパッケージ名またはプロセス名)の追加
# v2.6.2 2020/10/29
- install, startイベント報告ロジックの最適化
- データ転送フォーマットの最適化
- デフォルトのネットワーク報告ポリシーは、2G/3G/4G/5G/WIFIに変更
- 大量のログ出力によるOOM異常問題の最適化
# v2.6.0 2020/08/24
- 初期イベントをサポート。カスタムIDによる初期イベントの判断の許可
- 更新可能、書き換え可能なイベントをサポート
# v2.5.6 2020/06/28
- 最適化コード:極端な場合、自動収集をオンにした時の空ポインタ異常
# v2.5.5 2020/06/22
- 初期化の遅延による初回起動イベントが収集できない問題の修正
- 新しいプリセットプロパティ#system_languageの追加
- プリセットプロパティ値の取得ロジックの最適化:値がない時、取り込まない。
- コードとログ印刷の最適化
# v2.5.4 2020/05/19
- Unity 2018.04に適用するためのインターフェイスの追加
# v2.5.3 2020/05/14
- TAプラットフォーム2.7シールドイベント構成インターフェイスの適応
- DEBUGモードの調整。クライアント側例外処理ロジックの除去
- デフォルトでQuitSafelyServiceをクローズ
# v2.5.2 2020/04/29
- ユーザープロパティの時間型初期化の問題の修正
# v2.5.1 2020/04/14
- DEBUGモードでのイベントアップロードのバグの修正
# v2.5.0 2020/04/03
- クライアントSDKの時間校正機能のサポート
- 指定時間のユーザープロパティの設定インターフェイスのサポート
# v2.4.3 2020/03/06
- 初期化遅延の場合で、インストールイベントが起動イベントよりも先に発生するための起動イベントの最適化
# v2.4.2 2020/03/06
- 最初のActivityが表示される前に、SDK初期化時に発生するta_app_startの不正確問題の解決
# v2.4.1 2020/03/04
- 最初のActivityが停止後のSDK初期化によるバックグラウンド判定エラーの問題の解決
# v2.4.0 2020/02/10
- JSONArrayのサポート
- user_appendインターフェイスのサポート
- クライアント側のプロパティ形式チェックの除去
# v2.3.1 2020/01/07
- データのデフォルトタイムゾーンの設定のサポート
# v2.3.0 2019/12/31
- Debugモードのサポート:バックグラウンドDebugデバイスのホワイトリストと同時に開く必要がある(v2.5からサポート)
- H5はネイティブSDKと連携し、マルチインスタンスをサポート
- SDK構成の最適化:グローバル設定の追加。アップロードポリシーは異なるプロジェクトに対する設定の許可。複数クラスターへのデータ送信のサポート。
- 自己署名証明書のサポート: SSLSocketFactoryカスタム認証プロセスの許可
- その他の最適化:
- 安全な終了ロジックの最適化。ANRの回避
- 文字列型データの長さ制限の除去
# v2.2.2 2019/11/04
- API levelが18(Android 4.3)未満の場合の異常終了の修復
# v2.2.0 2019/10/22
- ユーザープロパティインターフェイス
user_unset
のリセットのサポート track
インターフェイスオーバーロードの追加。指定タイムゾーンによるイベントアップロードのサポート。- プリセットプロパティ
#zone_offset
の追加。単位は時間。デフォルトでシステムタイムゾーンのオフセットをサーバー側にアップロードし、サマータイムの影響を受ける。次の式を満たす:
utc_time + #zone_offset = #event_time
# v2.1.0 2019/08/31
- 受動的なイベントをアップロードするためのライトインスタンスのサポート
enableTracking
インターフェイスの追加。インスタンスアップロード機能のオン/オフoptOutTracking
/optInTracking
インターフェイスの追加- アップロードロジックの最適化。アップロードの頻度と時効性の改善
- その他の軽微な改善点
# v2.0.1 2019/07/12
- H5と自動収集イベントの新規APPインストールイベントの追加のサポート
# v2.0.0 2019/07/10
- 自動取得ロジックのリセット(バージョン2.0のプラグインで編集する必要がある):
- SDKのサードパーティライブラリ依存性の除去
Fragment
イベントはBaseFragment
を継承する必要がないことを注釈TimePicker
、DatePicker
などのコントロールのクリックイベント収集の追加
getDeviceId()
インタフェースの追加- 自動収集イベントに新しいAPPインストールイベントを追加
- プロパティ検出ロジックの最適化:文字列のデータが2048バイトを超えると自動的に切り捨てアップロードする。
- 結合埋め込みポイントテストを改善するためのログ印刷の最適化
- SDKの安定性と運用効率を高めるための他のコード最適化
- minSdkVersionを14にアップグレード
# v1.3.0 2019/06/18
- マルチAPPIDインスタンス機能の追加
- 動的パブリックプロパティの追加
- 自動収集イベントのAPPクラッシュイベントの追加
- 安定性の向上: Android Qへの適応、任意権限申請の除去、キャリア取得ロジックの最適化、5Gへのサポートなど
# v1.2.0 2019/05/23
- H5とAPPの連携のサポート
- androidxのサポート(自動収集プラグイン1.2.0以降に適応)
- 一部コードロジックの最適化
# v1.1.7 2019/01/08
- データアップロードログ印刷機能の追加