# Flutter SDK使用ガイド
このガイドでは、Flutter SDKを使用してプロジェクトにアクセスする方法について説明します。アクセスを開始する前に、データルールの章データルールます。にアクセスしてGitHub (opens new window)入手できます。
最新バージョンバージョン: 2.0.2
更新時間は: 2021-12-31
# 1. SDKの初期化
# 1.1統合数Flutterプラグイン
Flutterプロジェクトのテキスト
にthinking_analytics依存を
追加:
dependencies:
# 数数 Flutter 插件
thinking_analytics: ^2.0.2
# 1.2 Flutterプラグインの使用
まずはコードに数をインポートフラッターパッケージ:
import 'package:thinking_analytics/thinking_analytics.dart';
ThinkingAnalyticsAPIインスタンス
インスタンスを取得:
final ThinkingAnalyticsAPI ta = await ThinkingAnalyticsAPI.getInstance('APP_ID', 'https://SERVER_URL');
パラメータの説明:
- APP_ID:プロジェクトのAPP_IDは、プロジェクトを申請するときに表示されます。TAバックエンドのプロジェクト管理ページで確認できます。ここに入力してください。
- SERVER URL:データ受信側のURL:
- クラウドサービスを使用している場合は、次のURLを入力してください
- https://ta-receiver.thinkingdata.io
- 民営化された展開のバージョンを使用している場合は、次のURLを入力してください
- https://YOU_SERVER_URL
- クラウドサービスを使用している場合は、次のURLを入力してください
その後、taインスタンスでta
インスタンスでデータを報告できます
// 上报一个简单事件
ta.track('simple_event');
# 1.3その他の初期化パラメータ
SDKを構成するには、初期化時により多くの名前付けパラメーターを渡すことができます。
# タイムゾーン
デフォルトでは、すべてのデータの発生時間がネイティブ時間に設定されます。製品が複数のタイムゾーンに分散していて、指定されたタイムゾーンにデータ時間を設定する場合は、timeZone
てタイムゾーンを設定できます。timeZone
は有効なタイムゾーン文字列、例えばUTC
、Asia/Shanghai
など。
# モード
既定では、SDKはThinkingAnalyticsModeで実行されますNORMAL
モードでは、すべてのオンラインアプリケーションをこのモードで実行する必要があります。統合フェーズのデバッグを容易にするために、SDKをDEBUGモードに設定することもできます
ThinkingAnalyticsMode.DEBUG
:データを記事ごとに報告し、詳細なエラーログThinkingAnalyticsMode.DEBUG_ONLY
:データは記事ごとに報告し、データだけを検証し、入庫しない
注意:本番環境でDEBUGモードをオンにしないでください。指定されたデバイスのみがDebugモードを有効にすることができます。Debugモードは、クライアントでのみ有効になり、デバイスIDがTAバックエンドのプロジェクト情報ページDebugモードデバイス管理で構成されているデバイスでのみ有効になります。デバイスIDは、次の3つの方法で取得できます。
- *TAプラットフォームのイベントデータの#device_idプロパティ
- *クライアントログ: SDKの初期化が完了するとデバイスDeviceIdが印刷されます
- *インスタンスインターフェイスを介して呼び出す:デバイスID
# 第二に、ユーザIDを設定
SDKはデフォルトでランダムなUUIDを各ユーザーのゲストIDとして使用します。デフォルトのゲストIDは、ユーザーがゲームを再インストールしたり、デバイスを交換したりすると変更されることに注意してください。
# 2.1ゲストIDの設定(オプション)
ユーザーごとに独自のゲストID管理システムがある場合は、identify
を呼び出してゲストIDを設定できます
ta.dentify('your_distinct_id');
現在のゲストIDを取得する必要がある場合は、getDistinctIdを呼び出して
取得できます
String distinctId = await ta.getDistinctId();
# 2.2アカウントIDの設定とクリア
ユーザーがログインすると、login
を呼び出してユーザーのアカウントIDを設定できます。アカウントIDを設定した後、アカウントIDをユーザーIDとし、設定したアカウントIDはlogoutを呼び出すlogout
まで保持されます
// 设置账号 ID
ta.login('your_account_id');
// 清除账号 ID
ta.logout();
注意:この方法では、ユーザー登録、ユーザー登録などのイベントはアップロードされません。
# 三、アップロード事件
でtrack
イベントとそのプロパティを報告できます。一般的に、ダースから数百の異なるイベントをアップロードする必要がある場合があります。TAのバックグラウンドを初めて使用する場合は、いくつかの重要なイベントをアップロードすることをお勧めします。
# 3.1アップロードイベント
前に整理したドキュメントに基づいて、イベントのプロパティと情報を送信する条件を設定することをお勧めします。イベント名は文字列
型で、文字のみで始まり、数字、文字、下線「_」を含めることができ、長さは最大50文字で、文字の大文字と小文字には敏感ではない。
ta.track('TEST_EVENT', properties: <String, dynamic>{
'PROP_INT': 5678,
'PROP_DOUBLE': 12.3,
'PROP_DATE': DateTime.now().toUtc(),
'PROP_LIST': ['apple', 'ball', 1234],
'PROP_BOOL': false,
'PROP_STRING': 'flutter test',
});
- イベントプロパティは
Map<String, dynamic>
型で、各要素はプロパティを表します - イベント属性
Key
は属性名で、String
型で、文字で始まることができ、数字、文字、下線「_」を含み、長さは最大50文字で、文字の大文字と小文字には敏感ではない - プロパティ値は、
String
、数値クラス、bool
、DateTime
、List
型の5種類
を呼び出しtrack()
とき、SDKはシステムの現在時刻をイベントの発生時刻として取り、イベント時刻を指定する必要がある場合はDateTime
型のパラメーターdateTime
を設定し、受信timeZone
はイベントのタイムゾーン情報を表しますSDKはdateTime
のタイムスタンプとtimeZone
基づいて、イベント時間を表す文字列に変換します。
DateTime dateTime = DateTime.parse('2020-01-01');
ta.track('test', dateTime: dateTime, timeZone: 'UTC');
/*
原始数据示例:
{
"#type": "track",
"#time": "2019-12-31 16:00:00.000",
"#event_name": "test",
"#distinct_id": "1ed3465e-17f6-4205-8f86-2e7a2b18027b",
"properties": {
"#network_type": "WIFI",
"#app_version": "1.0",
"#zone_offset": 0
},
"#uuid": "3d74c56f-8b2c-44c4-8683-2dcb3010c231"
}
*/
注意:イベントはトリガー時間を設定できますが、受信側では、相対的なサーバー時間の10日前から3日後までのデータしか受信できず、期限を超えたデータは異常データとみなされ、データ全体が入庫できません。
# 3.2パブリックイベントプロパティの設定
共通イベントプロパティとは、各イベントに含まれるプロパティのことです。setSuperPropertiesを呼び出して
共通イベントプロパティを設定できます。イベントを送信する前に、共通イベントプロパティを設定することをお勧めします。
Map<String, dynamic> superProperties = {
'SUPER_STRING': 'super string value',
'SUPER_INT': 1234,
'SUPER_DOUBLE': 66.88,
'SUPER_DATE': DateTime.now(),
'SUPER_BOOL': true,
'SUPER_LIST': [1234, 'hello', DateTime.now().toUtc()]
};
ta.setSuperProperties(superProperties);
パブリックイベントプロパティはキャッシュに保存され、APPを起動するたびに呼び出す必要はありません。を呼び出し呼び出し
アップロードした場合、以前のプロパティが上書きされます。パブリックイベントプロパティとtrack
アップロードされたプロパティのKey
場合、イベントのプロパティはパブリックイベントプロパティを上書きします。
必要がある場合は、unsetSuperProperty``呼び出して、パブリックイベントプロパティの1つをクリアできます。
// 清除属性名为 SUPER_LIST 的公共属性
ta.unsetSuperProperty('SUPER_LIST');
// 清空所有公共属性
ta.clearSuperProperties();
# 3.3動的共通属性の設定
共通プロパティの値が定数でない場合は、動的共通プロパティを設定することで実現できます。動的共通属性もすべてのイベントに追加され、イベントが報告されると実際の報告値が動的に取得されます。動的共通属性は現在、イベントの自動収集をサポートしていません。
動的共通プロパティを設定するには、Map<String, dyanmic>
型を返す関数を渡す必要があります。
// 设置动态公共属性, 动态公共属性不支持自动采集事件
ta.setDynamicSuperProperties((){
return <String, dynamic> {
'DYNAMIC_DATE': DateTime.now().toUtc(),
'PROP_INT': 8888
};
});
注:イベントプロパティに名前が変更された場合、動的共通プロパティの優先順位は、共通イベントプロパティよりも大きく、trackで設定されたイベントプロパティよりも小さくなります。
# 3.4記録された事件の長さ
イベントの継続時間を記録する必要がある場合はtimeEvent
を呼び出してタイミングを開始し、タイミングを設定するイベント名を設定します。イベントをアップロードすると、自動的にイベントプロパティに#duration
を追加して、記録時間を秒単位で表します。
// 调用 timeEvent 开启对 TIME_EVENT 事件的计时
ta.timeEvent('TIME_EVENT');
// do some thing...
// 通过 track 上传 TIME_EVENT 事件时,会在属性中添加 #duration 属性
ta.track("TIME_EVENT");
# 四、ユーザー属性
TAプラットフォームで現在サポートされているユーザープロパティ設定インターフェイスはuserSet
、userSetOnce
、userAdd
、userUnset
、userDelete
、userAppend
.
# 4.1ユーザーセット
通常のユーザープロパティでは、userSet
て設定できます。このインターフェイスを使用してアップロードされたプロパティは、元のプロパティ値を上書きし、以前にユーザープロパティが存在しなかった場合は、新しいユーザープロパティを作成します。
ta.userSet(<String, dynamic>{
'USER_INT': 1,
'USER_DOUBLE': 50.12,
'USER_LIST': ['apple', 'ball', 'cat', 1, DateTime.now().toUtc()],
'USER_BOOL': true,
'USER_STRING': 'a user value',
'USER_DATE': DateTime.now(),
});
イベントプロパティと同様に:
- ユーザープロパティは
Map<String, dynamic>
型で、各要素はプロパティを表します - ユーザー属性
Key
は属性名で、String
タイプで、規定は文字で始まるだけで、数字、文字と下線「_」を含み、長さは最大50文字で、文字の大文字と小文字に敏感ではない - ユーザープロパティ値は、
String
、数値クラス、bool
、DateTime
、List.
List.
# 4.2ユーザーSetOnce
アップロードするユーザープロパティが一度設定されている場合は、userSetOnceを呼び出し呼び出し
て設定できます。プロパティに値がある場合は無視されます。
ta.userSetOnce(<String, dynamic>{
'USER_INT': 2,
'USER_DOUBLE': 10.12,
});
注: userSetOnce設定のユーザープロパティの種類と制限はuserSetと一致します。
# 4.3 userAdd
をアップロードするときは、userAddを
呼び出してアキュムレータ操作を実行できます。プロパティが設定されていない場合は、0を割り当て0
てから計算します。負の値を入力します。減算操作と同じです。
ta.userAdd(<String, num>{
'USER_INT': 2,
'USER_DOUBLE': 10.1,
});
注: userAddのプロパティタイプとKey値の制限はuserSetと一致しますが、Valueでは数値タイププロパティのみを報告できます。
# 4.4 userUnset
ユーザーのプロパティをリセットする必要がある場合は、userUnset
、ユーザーが指定したユーザープロパティの値を削除できます
ta.userUnset('USER_INT');
# 4.5ユーザー削除
を削除する場合、userDeleteを呼び出して
削除すると、ユーザーのユーザー属性を照会できなくなりますが、ユーザーが生成したイベントは次のように照会できます
ta.userDelete();
# 4.6ユーザー追加
userAppendを呼び出すことこと
でList
型のユーザープロパティに要素を追加できます:
ta.userAppend(<String, List>{
'USER_LIST': [DateTime.now()],
});
# V.自動収集イベント
enableAutoTrackを呼び出して
タイプのList
タイプのList
できます。現在のサポート:
ta_app_start
:アプリケーションがフロントに入り、対応タイプはThinkingAnalyticsAutoTrackType.アプリ起動
ta_app_end
:アプリケーションはバックグラウンドに入り、対応タイプはThinkingAnalyticsAutoTrackTypeアプリ終了
ta_app_install
:インストール後初めてアプリを開き、対応タイプはThinkingAnalyticsAutoTrackType.アプリインストール
ta_app_crash
:キャプチャされていない例外が発生してアプリケーションがフラッシュされ、対応するタイプはThinkingAnalyticsAutoTrackType.アプリクラッシュ
自動収集イベントについては、注意が必要です。
- 自動収集イベントはネイティブSDKに実装されているため、動的パブリックプロパティは自動収集イベントに追加できません。
- ゲストIDまたはパブリックプロパティを設定する必要がある場合は、自動収集イベントを有効にする前に設定を完了してください。
自動取得の例:
ta.enableAutoTrack([
ThinkingAnalyticsAutoTrackType.APP_START,
ThinkingAnalyticsAutoTrackType.APP_END,
ThinkingAnalyticsAutoTrackType.APP_INSTALL,
ThinkingAnalyticsAutoTrackType.APP_CRASH,
]);
# 六、その他のインタフェース
# 6.1デバイスIDの取得
SDKは初期化が完了すると、デバイスIDを自動的に生成し、ローカルキャッシュに記録します。同じアプリケーション/ゲームでは、デバイスのデバイスIDは不変であり、getDeviceIdを呼び出してデバイス
デバイスIDを取得できます
String deviceId = await ta.getDeviceId();
// 以设备 ID 作为访客 ID
// ta.identify(deviceId);
# 6.2データ報告の一時停止/停止
SDKの報告を停止するインターフェイスには、次の2種類があります
# 6.2.1 SDK報告の一時停止
ユーザーがテスト環境にいる場合や、ユーザーがテストアカウントにログインしている場合など、SDKのデータ収集と報告を一時的に停止したい場合は、次のインターフェイスを呼び出してSDKの報告を一時的に停止できます。
特定のインスタンス(メインインスタンスとライトインスタンスを含む)
でfalse
を呼び出してSDKの報告を一時停止#distinct_id
、#account_id
、パブリックプロパティなどを保持しますの共通属性とデバイスID、ゲストID、アカウントIDなどの情報。
インスタンスの停止状態はローカルキャッシュに保存され、enableTracking、enableTracking
まで、true
、SDKインスタンスはデータ収集と報告を再開します。ライトインスタンスはキャッシュされないため、APPを開くたびにライトインスタンスの一時停止状態は保持されず、報告を再開します。
// 暂停实例的上报,已缓存数据和已经设置的信息不被清除
ta.enableTracking(false);
// 恢复实例的上报
ta.enableTracking(true);
# 6.2.2 SDK報告の停止(optOutTracking)
が適用される地域でユーザーがデータ収集権限を提供しないことを選択した場合、次のインターフェイスを呼び出してSDKを完全にシャットダウンできます。
optOutTracking
メインインスタンスからのみ呼び出すことができ、enableTracking
との最大の違いは、インスタンスのゲストID、アカウントID、パブリックプロパティ、レポートされていないデータキューなど、インスタンスのローカルキャッシュを空にすることです。その後、このインスタンスの取得と報告機能をオフにします。
// 停止实例的上报, 并清空本地缓存
ta.optOutTracking();
SDK機能をオフにしている間にTAクラスター内のユーザーデータを削除する場合は、deleteUser
パラメーターを呼び出して、SDKインスタンスの機能を停止する前にuserDelete
データを報告してユーザーデータを削除できます。
// 停止实例的上报,并发送 user_del
ta.optOutTracking(deleteUser: true);
インスタンスの停止状態もローカルキャッシュに保存され、optInTrackingが呼び出される
、その後も報告を続けることができますが、この時点では新しいインスタンス
// 重新开启上报
ta.optInTracking();
# 6.3ライトインスタンスの作成
ライトインスタンスを使用すると、同じAPP IDの下に複数のインスタンス
// 创建轻实例
ThinkingAnalyticsAPI light = await ta.createLightInstance();
// 为轻实例设置访客 ID
light.identify('light_d_id');
// 通过轻实例上报事件
light.track('TEST_EVENT_FROM_LIGHT');
注:サブライトインスタンスは、親インスタンスのAPP ID、報告アドレス、および一部の設定と一致しますが、その他の情報は共有されません
# 6.4タイムキャリブレーション
SDKはデフォルトでネイティブ時刻をイベント発生時刻として使用し、ユーザーが手動でデバイス時刻を変更するとビジネス分析に影響する場合は、v1.1.0以降、サービス側から取得した現在のタイムスタンプを使用してSDKの時刻をキャリブレーションできます。その後、イベントデータやユーザー属性設定操作など、指定されていない時間の呼び出しはすべて、キャリブレーション後の時間を発生時間として使用します。
// 1585633785954 为当前 unix 时间戳,单位为毫秒,对应北京时间 2020-03-31 13:49:45
ThinkingAnalyticsAPI.calibrateTime(1585633785954);
NTPから時間を取得してSDKのキャリブレーションを行う機能も提供しています。ユーザーがアクセスできるNTPサーバーアドレスを渡す必要があります。その後、SDKは着信NTPサービスアドレスから現在の時刻を取得し、SDK時刻をキャリブレーションします。デフォルトのタイムアウト時間(3秒)以内に正しい結果が得られない場合、その後、ローカル時間を使用してデータを報告します。
// 使用苹果公司 NTP 服务对时间进行校准
ThinkingAnalyticsAPI.calibrateTimeWithNtp("time.apple.com");
注意:
- NTPサーバーアドレスを慎重に選択して、ネットワーク状態が良好な場合、ユーザーデバイスがサーバーに到着する時間をすぐに取得できるようにします。
- NTPサービスを使用した時間キャリブレーションには不確実性があります。
# 七、関連するプリセット属性
# 7.1プリセット属性の取得
v2.0.1以降のバージョンでは、getPresetProperties()メソッドを呼び出して
プロパティを取得できます。
サービス側の埋め込みポイントにアプリ側のプリセット属性が必要な場合、この方法でアプリ側のプリセット属性を取得してサービス側に渡すことができます。
//获取属性对象
TDPresetProperties presetProperties = await _ta.getPresetProperties();
//生成事件预置属性
Map<String, dynamic>? eventPresetProperties = presetProperties.toEventPresetProperties();
/*
{
"#carrier": "中国电信",
"#os": "iOS",
"#device_id": "A8B1C00B-A6AC-4856-8538-0FBC642C1BAD",
"#screen_height": 2264,
"#bundle_id": "com.sw.thinkingdatademo",
"#manufacturer": "Apple",
"#device_model": "iPhone7",
"#screen_width": 1080,
"#system_language": "zh",
"#os_version": "10",
"#network_type": "WIFI",
"#zone_offset": 8
}
*/
//获取某个预置属性
String bundleId = presetProperties.bundleId;//包名
String os = presetProperties.os;//os类型,如Android、iOS
String systemLanguage = presetProperties.systemLanguage;//手机系统语言类型
int screenWidth = presetProperties.screenWidth;//屏幕宽度
int screenHeight = presetProperties.screenHeight;//屏幕高度
String deviceModel = presetProperties.deviceModel;//设备型号
String deviceId = presetProperties.deviceId;//设备唯一标识
String carrier = presetProperties.carrier;//手机SIM卡运营商信息,双卡双待时,取主卡的运营商信息
String manufacture = presetProperties.manufacturer;//手机制造商 如HuaWei、Apple
String networkType = presetProperties.networkType;//网络类型
String osVersion = presetProperties.osVersion;//系统版本号
double zoneOffset = presetProperties.zoneOffset;//时区偏移值
IP、国の都市情報はサービス側で解決して生成され、クライアントはこれらの属性を取得するインタフェース
# 8、高度な機能
v1.3.0以降、Flutter SDKは、最初のイベント、更新可能なイベント、書き換え可能なイベントの3つの特別なタイプのイベントの報告をサポートしています。これらの3つのイベントは、TAシステム2.8以降のバージョンで使用する必要があります。特殊なイベントは特定の場面でしか適用されないので、数値計算技術の顧客成功とアナリストの助けを得て、特殊なイベントを使ってデータを報告してください。
# 8.1初の事件
初回イベントとは、あるデバイスや他の次元のIDに対して、一度だけ記録されるイベントです。たとえば、デバイスで最初に発生したイベントを記録したい場合は、最初のイベントでデータを報告できます。
// 示例:上报设备首次事件, 假设事件名为 DEVICE_FIRST
var properties = {
'PROP_INT': 5678,
'PROP_DOUBLE': 12.3,
'PROP_DATE': DateTime.now().toUtc(),
'PROP_LIST': ['apple', 'ball', 1234],
'PROP_BOOL': false,
'PROP_STRING': 'flutter test',
};
var firstModel = TrackFirstEventModel('DEVICE_FIRST', '', properties);
_ta.trackEventModel(firstModel);
デバイス以外の他のディメンションで初めてかどうかを判断する場合は、初めてのイベントに設定できますファーストチェックIDたとえば、アカウントの最初のイベントを記録する必要があります。アカウントIDを最初のイベントのFIRST_CHECK_IDに設定できます
// 示例:上报用户账号的首次事件, 假设事件名为 USER_FIRST
var properties = {
'PROP_INT': 5678,
'PROP_DOUBLE': 12.3,
'PROP_DATE': DateTime.now().toUtc(),
'PROP_LIST': ['apple', 'ball', 1234],
'PROP_BOOL': false,
'PROP_STRING': 'flutter test',
};
var firstModel = TrackFirstEventModel('USER_FIRST', 'YOU_ACCOUNT_ID', properties);
_ta.trackEventModel(firstModel);
注意:サービス側で初めてかどうかのチェックが完了するため、初めてのイベントはデフォルトで1時間遅れて入庫する。
# 8.2更新可能イベント
更新可能なイベントを使用すると、特定のシナリオでイベントデータを変更する必要がある要件を満たすことができます。更新可能なイベントには、イベントを識別するIDを指定し、更新可能なイベントオブジェクトを作成するときに着信する必要があります。TAバックグラウンドは、イベント名とイベントIDに基づいて更新するデータを決定します。
// 示例: 上报可被更新的事件,假设事件名为 UPDATABLE_EVENT
var properties = {
'status': 3,
'price': 100
};
var updateModel = TrackUpdateEventModel('UPDATABLE_EVENT', 'test_event_id', properties);
// 上报后事件属性 status 为 3, price 为 100
_ta.trackEventModel(updateModel);
var properties_new = {
'status': 5
};
var updateModel_new = TrackUpdateEventModel('UPDATABLE_EVENT', 'test_event_id', properties_new);
// 上报后事件属性 status 被更新为 5, price 不变
_ta.trackEventModel(updateModel_new);
更新可能なイベントデフォルトでは、デバイスの現在時刻を使用して履歴データのイベント時刻を更新します。イベント時刻を指定する場合は、更新可能なイベントを報告するときにイベント時刻を指定できます
var updateModel = TrackUpdateEventModel('UPDATABLE_EVENT', 'test_event_id', {});
// 指定可更新事件的事件时间
updateModel.dateTime = DateTime.now().toUtc();
updateModel.timeZone = 'UTC';
_ta.trackEventModel(updateModel);
# 8.3書き換え可能イベント
書き換え可能イベントは更新可能イベントと類似しており、書き換え可能イベントは最新のデータで履歴データを完全にカバーし、効果的には前のデータを削除し、最新のデータを入庫することに相当する。TAバックグラウンドは、イベント名とイベントIDに基づいて更新するデータを決定します。
// 示例: 上报可被重写的事件,假设事件名为 OVERWRITABLE_EVENT
var properties = {
'status': 3,
'price': 100
};
var overwriteModel = TrackOverwriteEventModel('OVERWRITABLE_EVENT', 'test_event_id', properties);
// 上报后事件属性 status 为 3, price 为 100
_ta.trackEventModel(overwriteModel);
var properties_new = {
'status': 5
};
var overwriteModel_new = TrackOverwriteEventModel('OVERWRITABLE_EVENT', 'test_event_id', properties_new);
// 上报后事件属性 status 为 5, price属性被删除
_ta.trackEventModel(overwriteModel_new);
書き換え可能なイベントは、デフォルトでデバイスの現在時刻を使用して履歴データのイベント時刻を書き換えます。イベント時刻を指定する場合は、書き換え可能なイベントを報告するときにイベント時刻を指定できます
var overwriteModel = TrackOverwriteEventModel('OVERWRITABLE_EVENT', 'test_event_id', {});
// 指定可重写事件的事件时间
overwriteModel.dateTime = DateTime.now().toUtc();
overwriteModel.timeZone = 'UTC';
_ta.trackEventModel(overwriteModel);
# リリースノート
# v2.0.1 2021/06/28
- プリセット属性取得のサポート
# v2.0.0 2021/05/17
- Flutter2.0に適合
# v1.3.3 2020/10/29
- iOS 5Gネットワークに適応
- 最適化install, startイベント報告ロジック
- データ転送フォーマットの最適化
- デフォルトのネットワーク報告ポリシーは、2G/3G/4G/5G/WIFI
# v1.3.2 2020/08/25
- timeZoneが設定されていない特別なイベントがエラーを報告する#zone_offsetの問題を修正.
# v1.3.0 2020/08/24
- 最初のイベントをサポートし、着信カスタムIDが最初に報告されたかどうかをチェック
- 更新可能で書き換え可能なイベントをサポート
# v1.2.1 2020/06/28
- コードの最適化:極端な場合のnullポインタ例外
# v1.2.0 2020/06/23
- Debugモードを最適化し、バックグラウンドの埋め込みポイント管理
- #system_languageプロパティのサポート
# v1.1.1 2020/04/14
- AndroidプラットフォームDEBUGモードでのイベントアップロードのバグを修正
# v1.1.0 2020/04/03
- サーバータイムを使用したSDKタイムのキャリブレーション
# v1.0.0 2020/03/10
- サポートイベントとユーザー属性データの報告
- マルチインスタンスとライトインスタンスをサポート
- 共通イベントプロパティと動的共通プロパティ
- 自動イベント収集のサポート
- デバッグモードのサポート
- デフォルトタイムゾーンの設定