目录
此内容是否有帮助?

# 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

ダウンロード (opens new window)

# 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の手動統合

  1. Android SDK (opens new window)をダウンロードして解凍します。

  2. libsフォルダにThinkingSDK. aarを追加します。

  3. 以下のコードを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
    • クラウドサービスを利用する場合は、次のように入力します。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はプロパティの値であり、StringNumberBooleanDateJSONArrayを含むことができます。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_setuser_setOnceuser_adduser_unsetuser_deleteuser_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を継承する必要がないことを注釈
    • TimePickerDatePickerなどのコントロールのクリックイベント収集の追加
  • 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

  • データアップロードログ印刷機能の追加