# 小程序/小游戏 SDK 使用指南

提示

在接入前, 请先阅读接入前准备

您可以在 GitHub (opens new window) 获取 小程序/小游戏 SDK 源码。

如果您使用游戏引擎开发小游戏,请阅读常用游戏引擎的集成方案:Egret 白鹭引擎LayaAirCocosCreator.

最新版本为: 2.0.0

更新时间为: 2021-09-15

下载地址小程序 (opens new window) , 小游戏 (opens new window)

小程序/小游戏 SDK 为常见小程序平台、快应用、小游戏平台的提供了一套标准的 API 接口以实现数据上报功能。目前,支持的平台及对应的文件如下:

小程序:

  • 微信小程序: thinkingdata.wx.min.js
  • 百度小程序: thinkingdata.swan.min.js
  • 字节跳动小程序: thinkingdata.tt.min.js
  • 支付宝小程序: thinkingdata.my.min.js
  • 钉钉小程序: thinkingdata.dd.min.js
  • 快手小程序: thinkingdata.ks.min.js
  • 快应用: thinkingdata.quick.min.js

小游戏:

  • 微信小游戏: thinkingdata.mg.wx.min.js
  • QQ 小游戏: thinkingdata.mg.qq.min.js
  • 字节跳动小游戏: thinkingdata.mg.tt.min.js
  • 百度小游戏: thinkingdata.mg.swan.min.js
  • 哔哩哔哩小游戏: thinkingdata.mg.bl.min.js
  • 华为快游戏: thinkingdata.mg.huawei.min.js
  • OPPO 快游戏: thinkingdata.mg.oppo.min.js
  • VIVO 快游戏: thinkingdata.mg.vivo.min.js
  • 魅族快游戏: thinkingdata.mg.mz.min.js
  • 小米快游戏: thinkingdata.mg.xiaomi.min.js
  • H5小游戏
  • UC小游戏
  • Facebook小游戏

# 一、集成 SDK

注意 在上报数据之前,请先在微信公众平台或其他平台的开发设置中,将数据传输 URL 加入到服务器域名的 request 列表中.

# 二、配置 SDK

如前述示例,您需要调用 init 方法完成 SDK 的初始化:

ta.init();

主动调用初始化方法 init 后,数据才会真正上报。这允许您掌控数据开始上报的时机,确保在数据开始上报之前,您已经完成对 SDK 的必要设置 (用户 ID、公共事件属性等) 。

# 2.1 设置访客 ID

SDK 默认会随机生成一个访客 ID 来标识用户。 您可以调用 identify 接口自定义访客 ID:

// 设置访客 ID, 对应上报数据中的 #distinct_id
ta.identify("your_own_anonymous_id");

提示 请在 `init` 接口调用完成之前设置好访客 ID. 如果您需要将微信 open ID 作为访客 ID, 可在 open ID 的回调中先调用 `identify` 设置访客 ID, 再调用 `init` 完成

SDK 初始化

# 2.2 设置账号 ID

在用户产生登录行为时,可调用 login 来设置用户的账号 ID. TA 平台优先以账号 ID 作为身份标识 (用户识别规则) ,设置后的账号 ID 将会被保存,多次调用 login 将会覆盖先前的账号 ID:

// 设置账号 ID,对应上报数据里的 #account_id
ta.login("ABC_123456");

在用户产生登出行为之后,可调用 logout 来清除账号 ID,在下次调用 login 之前,将会以访客 ID 作为身份识别 ID:

// 去除上报数据里的 #account_id 字段
ta.logout();

注意

loginlogout 方法只用于设置和清除账号 ID, 不会上报用户登录和登出事件。

# 2.3 设置公共事件属性

提示 公共事件属性是所有[事件](#event)(包括自动采集事件)都会包含的属性,[用户属性](#user)中不会包含。

本节会介绍如何设置公共事件属性和动态公共属性。如果公共属性与事件中设置的自定义属性有相同 key 值,则最终的属性会根据下述优先级取值:

用户自定义事件属性 > 动态公共属性 > 事件公共属性

# 3.3.1 设置事件公共属性

您可以调用setSuperProperties来设置公共事件属性,公共事件属性的格式要求与事件属性一致。在设置时只能传入常量,适合设置变化不频繁的属性。

根据属性优先级,自定义属性优先级高于事件公共属性,因此事件公共属性也可以作为某个属性的缺省值,在需要修改的事件中设置同名 Key 覆盖缺省值。

//设置公共事件属性
ta.setSuperProperties({ channel: "渠道" });

//使用track上传事件,此时事件中会带有公共事件属性
ta.track(
  "Purchase", //追踪事件的名称
  {
    Item: "商品A",
    ItemNum: 1,
    Cost: 100
  } //需要上传的事件属性
);

/* 等价于在事件中加入这些公共属性
ta.track(
    'Purchase', //追踪事件的名称
    {
        Item:'商品A',
        ItemNum:1,
        Cost:100,
        channel:'渠道' //相当于在事件中加入这个属性
    } 
);
*/

如果多次调用 setSuperProperties 设置公共事件属性,则同名字段后面的调用会覆盖之前的,不同名字段。

如果您需要删除某个公共事件属性,可以调用 unsetSuperProperty() 清除其中一个公共事件属性;如果您想要清空所有公共事件属性,则可以调用 clearSuperProperties();如果您想要获取所有公共事件属性,可以调用getSuperProperties;

// 清除属性名为 CHANNEL 的公共属性
ta.unsetSuperProperty("CHANNEL");

//清除公共事件属性
ta.clearSuperProperties();

//获取静态公共事件属性
ta.getSuperProperties();

# 3.3.2 设置动态公共属性

可以调用 setDynamicSuperProperties 接口并传入一个回调函数设置动态公共属性。回调函数的返回值将作为公共属性加入到事件属性中:

// 通过动态公共属性设置 UTC 时间作为事件属性上报
ta.setDynamicSuperProperties(() => {
  var localDate = new Date();
  return {
    utcTime: new Date(
      localDate.getTime() + localDate.getTimezoneOffset() * 60000
    )
  };
});

回调函数必须返回一个 JS 对象,其中每个元素代表一个属性。 属性格式要求与事件属性一致。

# 三、发送事件

您可以直接调用track上传自定义事件,建议您根据先前梳理的文档来设置事件的属性以及发送信息的条件,此处以购买商品为范例:

ta.track(
  "Purchase", //追踪事件的名称
  {
    Item: "商品A",
    ItemNum: 1,
    Cost: 100,
    Elements: ["apple", "ball", "cat"]
  } //需要上传的事件属性
);
  • track 接口共有两个参数,第一个参数为事件的名称,第二个参数为事件的属性
  • 事件的名称是字符串,只能以字母开头,可包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感。
  • 事件的属性是 JS 对象,每个元素代表一个属性。
  • 元素的 name 对应属性的名称,规定只能以字母开头,包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感。
  • 元素的 value 为该属性的值,支持StringNumberBooleanDateArray.

注意: Array 类型属性在 v1.5.0 之后版本支持,需要配合 TA 平台 2.5 及之后的版本.

小程序 SDK 将会在小程序启动(onlaunch)时,获取场景值,如果能取到场景值,则在本次小程序的生命周期中,所有事件都会带有 #scene 场景值这一属性。

# 3.1 设置事件上报时间

事件触发的时间默认取本机时间,但在一些情况下,可能需要手动设置事件的时间,可以使用以下方法进行调用:

//第三个参数,可以输入Date类型的参数,替换事件触发时间
ta.track("event", { parakey: "paravalue" }, new Date());

//如果没有properties需要上传,请传入一个空对象
ta.track("event", {}, new Date());
  • 第三个参数为事件触发时间,必须是 Date 类型,将会替换事件触发的时间,如果不传该参数,则事件触发时间默认选取用户的本机时间

# 3.2 记录事件时长

您可以调用timeEvent来开始计时,配置您想要计时的事件名称,当您上传该事件时,将会自动在您的事件属性中加入#duration这一属性来表示记录的时长,单位为秒。

//用户进入商品页面,开始计时,记录的事件为"Enter_Shop"
ta.timeEvent("Enter_Shop");

//...

//上传事件,计时结束,"Enter_Shop"这一事件中将会带有表示事件时长的属性#duration
ta.track("Enter_Shop", { product_id: "A1354" });

# 四、用户属性

# 4.1 设置用户属性(userSet

对于一般的用户属性,您可以调用userSet来进行设置,使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性

//设置用户属性,会员等级
ta.userSet({ vip_level: "钻石会员" });

与上传事件时的事件属性一致,此处传入的用户属性也是对象类型,name 对应属性的名称,规定只能以字母开头,包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感,value 为该属性的值,支持StringNumberBooleanDateArray.

注意:Array 类型在 v1.5.0 以上版本支持,需要配合 TA 平台 2.5 及之后版本使用.

# 4.2 初始化用户属性(userSetOnce

如果您要上传的用户属性只要设置一次,则可以调用userSetOnce来进行设置,当该属性之前已经有值的时候,将会忽略这条信息。

//以设置用户名为例,如果用户名已设置,则忽略本次设置,如果不存在,则设置为传入值
ta.userSetOnce({ user_name: "TA" });

userSetOnce 的参数要求与 userSet 一致。

# 4.3 累加用户属性(userAdd

当您要上传数值型的属性时,您可以调用userAdd来对该属性进行累加操作,如果该属性还未被设置,则会赋值 0 后再进行计算

//以付费为例,用户每次付费时调用此接口,则'total_revenue'字段每次会做累加付费金额的处理
ta.userAdd({ total_revenue: 50 });

与上传事件时的事件属性一致,此处传入的用户属性也是对象类型,name 对应属性的名称,规定只能以字母开头,包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感,value 为该属性需要累加的值,只支持Number 类型,传入负数相当于做减法。

# 4.4 重置用户属性(userUnset

当您要清空用户的某个用户属性值时,您可以调用userUnset来对指定属性进行清空操作,如果该属性还未在集群中被创建,则userUnset不会创建该属性

//清空属性名为userPropertykey的用户属性值该用户,即设置成NULL
ta.userUnset("userPropertykey");

# 4.5 删除用户(userDel

如果您要删除某个用户,可以调用userDel将这名用户删除,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到

ta.userDel();

# 4.6 为 Array 类型的用户属性追加元素 (userAppend)

自 v1.5.0 开始,您可以调用 userAppend 对 Array (List) 类型的用户数据追加元素。

ta.userAppend({ Elements: [("a": 1), ("b": 2)] });

注意:该特性需要配合 TA 平台 2.5 及之后版本使用

# 五、自动采集事件

在 1.2.0 版本后,我们提供了自动采集功能,只需在创建实例的 config 中开启您需要自动采集的事件,SDK 将会自动采集小程序的一些行为,现在主要有以下几种事件支持自动采集:

现在支持的自动化收集数据有:

  1. 小程序初始化,用户一次使用只会触发一次
  2. 小程序启动,包括启动与后台调回前台
  3. 小程序调入后台,并记录本次访问(启动至调入后台)的时间
  4. 小程序页面显示或切入前台,自动记录页面的路径以及前向路径
  5. 小程序进行转发分享,自动记录转发时的页面

接下来将会详细介绍每种数据的采集方法

# 5.1 开启自动采集事件

在 config 中,参数autoTrack中的元素表示每个自动采集事件的开关,设置为true为开启自动采集:

var config = {
  appid: "YOU-APP-ID",
  server_url: "https://youserverurl.com",
  autoTrack: {
    appLaunch: true, // 自动采集 ta_mp_launch
    appShow: true, // 自动采集 ta_mp_show
    appHide: true, // 自动采集 ta_mp_hide
    pageShow: true, // 自动采集 ta_mp_view
    pageShare: true // 自动采集 ta_mp_share
  }
};
  • appLaunch:自动采集小程序初始化
  • appShow:自动采集小程序启动,或从后台进入前台
  • appHide:自动采集小程序从前台进入后台
  • pageShow:自动采集小程序页面显示或切入前台
  • pageShare:自动采集小程序进行转发分享

不同平台由于运行环境以及结构原因,支持不同的自动采集事件,支持列表如下:

平台 appLaunch appShow appHide pageShow pageShare
小程序
小游戏

# 5.2 自动采集事件详解

# 5.2.1 小程序初始化

小程序初始化将会在小程序被首次打开时,或用户杀死进程再重新开启时触发,在进程的生命周期内只会触发一次,详细的事件介绍如下:

  • 事件名:ta_mp_launch
  • 自动采集属性: #scene,场景值,取自微信提供的场景值

通过小程序初始化事件,您可以计算每天的用户使用次数、人均使用次数,包括以场景值做分组,查看不同场景值的用户的使用情况。

# 5.2.2 小程序启动

小程序启动将会在小程序被启动、或小程序被从后台调回前台时触发,详细的事件介绍如下:

  • 事件名:ta_mp_show
  • 自动采集属性:
  • #scene,场景值,取自微信提供的场景值
  • #url_path,页面路径,小程序启动被展示页面的路径

小程序启动由于会受到调出前后台的影响(条数较多),因此不太适合直接进行分析,但是可以在行为路径中标识用户的一次使用,可以作为用户行为路径的初始行为

# 5.2.3 小程序隐藏

小程序隐藏将会在小程序被调入后台时触发,并记录本次使用的时长,详细的事件介绍如下:

  • 事件名:ta_mp_hide
  • 自动采集属性:
    • #scene,场景值,取自微信提供的场景值
    • #duration,数值型,表示本次启动(ta_mp_show)到隐藏的持续时长

小程序隐藏事件会记录使用时长(单位为秒),因此可以直接计算用户使用总时长以及人均时长,也可以除以初始化次数计算单次使用时长。

# 5.2.4 小程序页面浏览

小程序页面浏览将会在小程序的页面被打开时,或小程序从后台调回前台的页面展示时触发,会记录页面的路径以及访问的前向路径,详细的事件介绍如下:

  • 事件名:ta_mp_view
  • 自动采集属性:
    • #scene,场景值,取自微信提供的场景值
    • #url_path,页面路径,也就是被展示页面的路径
    • #referrer,前向路径,被展示页面之前页面的路径,也就是跳转前路径,如果是启动小程序时展示的首页,则取值为“直接打开”

通过小程序页面浏览事件,您可以计算每个页面的 pv、uv,以及用户访问小程序的使用路径。

# 5.2.5 小程序页面转发分享

小程序页面转发分享将会在转发按钮被点击时触发(包括右上角导航栏的转发按钮,以及页面中的转发按钮),详细的事件介绍如下:

  • 事件名:ta_mp_share
  • 自动采集属性:
    • #scene,场景值,取自微信提供的场景值
    • #url_path,页面路径,也就是转发时所在的页面路径

小程序页面转发分享事件,适合对页面的分享率进行分析,可以帮助您优化页面转发。

# 六、其他功能

# 6.1 多实例

从 v1.3.0 开始,本 SDK 支持多实例。我们称通过上文描述的方法完成初始化的实例 ta 为主实例,通过本节描述的方法创建的实例为子实例。

多个实例之间共享设备相关的预置属性(包括设备 ID),其他的属性均不共享,包括:

  • #distinct_id 访客 ID
  • #account_id 账号 ID
  • 公共事件属性、动态公共属性
  • timeEvent 监控的事件

您可以通过创建子实例,向另一个项目中上报数据,或者以另一套用户 ID 上报数据。

// 创建子实例 tt, 子实例默认配置与主实例相同
ta.initInstance("tt");

// 为子实例设置访客 ID
ta.tt.identify("another_distinct_id");

// 通过子实例上传事件
ta.tt.track("event_from_tt_instance");

// 创建不同配置的子实例
var config = {
  appid: "ANOTHER-APP-ID",
  enablePersistence: true // 为子实例开启本地缓存
};

ta.init("tt_1", config);
ta.tt_1.track("event_from_tt_instance");

# 6.2 获取设备 ID

您可以调用getDeviceId()获取设备 ID,由于运行环境的原因,设备 ID 会保存在本地缓存,一旦用户删除缓存,则设备 ID 将会变更,因此设备 ID 不能保证稳定不变

var deviceId = ta.getDeviceId();

# 6.3 onCompelete 回调函数

从 v1.3.1 开始,对于 track, userSet, userSetOnce, userAdd, userDel 等接口,支持传入 onComplete 回调. 可以直接在原参数列表后传入 onComplete, 也可以使用参数对象的方式. 如果使用参数对象,参数对象中必须包含 onComplete, 否则会出现参数错误.

以上传事件为例:

// 以参数列表的形式传入回调
ta.track("test", { testkey: 123 }, new Date(), res => {
  console.log(res);
});

// 以参数对象的形式传入回调
ta.track({
  eventName: "test", // 必填
  properties: { testkey: 123 }, // 可选
  time: new Date(), // 可选
  onComplete: res => {
    console.log(res);
  } // 必填
});

onComplete 的参数 res 为 object 类型,有两个属性 code 和 msg.

res.code 为 int 类型,定义如下:

  • 0: 成功
  • -1: 数据格式不正确
  • -2: APP ID 无效
  • -3: 网络或服务端异常

Debug 模式定义如下:

  • 0: 成功
  • -1: 参数或者权限校验的问题
  • 1: 表示字段基本的错误, 会给出详细的错误字段和原由
  • 2: 表示整条错误
  • -3: 网络或服务端异常

res.msg 是对 res.code 的文字说明。

# 6.4 开启 Debug 模式

从 v1.6.0 版本开始,客户端 SDK 支持 Debug 模式,需要配合 TA 平台 2.5 之后的版本使用。

Debug 模式可能会影响数据采集质量和 App 的稳定性,只用于集成阶段数据验证,不要在线上环境使用。

当前 SDK 实例支持三种运行模式:

  • "none": 不开启 Debug
  • "debug": 开启 Debug 模式,并入库
  • "debugOnly": 开启 Debug 模式,不入库

SDK 初始化:

var config = {
  appid: "YOUR_APPID",
  server_url: "YOUR_SERVER_URL",
  debugMode: "debug"
};
var ta = new TA(config);

为了避免 Debug 模式在生产环境上线,规定只有指定的设备才能开启 Debug 模式。只有在客户端开启了 Debug 模式,并且设备 ID 在 TA 后台的"埋点管理"页的"Debug 数据"板块中配置了的设备才能开启 Debug 模式。

设备 ID 可以通过以下三种方式获取:

  • TA 平台中事件数据中的 #device_id 属性
  • 通过实例接口调用:获取设备 ID

# 七、相关预置属性

# 7.1 所有事件带有的预置属性

以下预置属性,是小程序/小游戏 SDK 中所有事件(包括自动采集事件)都会带有的预置属性

属性名 中文名 说明
#ip IP 地址 用户的 IP 地址,TA 将以此获取用户的地理位置信息
#country 国家 用户所在国家,根据 IP 地址生成
#country_code 国家代码 用户所在国家的国家代码(ISO 3166-1 alpha-2,即两位大写英文字母),根据 IP 地址生成
#province 省份 用户所在省份,根据 IP 地址生成
#city 城市 用户所在城市,根据 IP 地址生成
#device_model 设备型号 用户设备的型号,如 iPhone 8 等
#device_id 设备 ID 用户的设备 ID,取初始化时生成的 UUID
#screen_height 屏幕高度 用户设备的屏幕高度,如 1920 等
#screen_width 屏幕宽度 用户设备的屏幕高度,如 1080 等
#manufacturer 设备制造商 用户设备的制造商,如 Apple,vivo 等
#os_version 操作系统版本 iOS 11.2.2、Android 8.0.0 等
#os 操作系统 如 Android、iOS 等
#network_type 网络状态 上传事件时的网络状态,如 WIFI、3G、4G 等
#lib SDK 类型 您接入 SDK 的类型,如 MP(小程序)、MG(小游戏)等
#lib_version SDK 版本 您接入 SDK 的版本
#scene 场景值 微信小程序启动时传入的场景值
#mp_platform 小程序平台 标识应用所在的平台
#zone_offset 时区偏移 数据时间相对 UTC 时间的偏移小时数

# 7.2 自动采集事件的预置属性

以下预置属性,是各个自动采集事件中所特有的预置属性

  • 小程序启动(ta_mp_show)的预置属性
属性名 中文名 说明
#url_path 页面路径 小程序启动被展示页面的路径
  • 小程序隐藏(ta_mp_hide)的预置属性
属性名 中文名 说明
#duration 事件时长 表示本次启动ta_mp_show到隐藏ta_mp_hide的持续时长,单位是秒
  • 小程序页面浏览(ta_mp_view)的预置属性
属性名 中文名 说明
#url_path 页面路径 页面路径,也就是被展示页面的路径
#referrer 前向路径 被展示页面之前页面的路径,也就是跳转前路径,如果是启动小程序时展示的首页,则取值为“直接打开”
  • 小程序页面转发分享(ta_mp_share)的预置属性
属性名 中文名 说明
#url_path 页面路径 小程序被转发时所在的页面路径

# 7.3 获取预制属性

服务端埋点需要 App 端的一些预置属性时,可以通过此方法获取 客户端 端的预置属性,再传给服务端。

   //获取属性对象
   var presetProperties=ta.getPresetProperties();

           //生成事件预置属性
           var properties=presetProperties.toEventPresetProperties();
   /*
      {
         "#device_model":"iPhone 5",
         "#device_id":"3204487163-1624513721217",
         "#screen_width":320,
         "#screen_height":568,
         "#os":"iOS",
         "#os_version":"10.0.1",
         "#network_type":"wifi",
         "#zone_offset":8,
         "#manufacturer":"Apple"
       }
   */

           //获取某个预置属性
           var os=presetProperties.os;//os类型,如Android
           var osVersion=presetProperties.osVersion;//系统版本号
           var networkType=presetProperties.networkType;//网络类型
           var manufacture=presetProperties.manufacture;//设备制造商
           var deviceModel=presetProperties.deviceModel;//设备型号
           var screenWidth=presetProperties.screenWidth;//屏幕宽度
           var screenHeight=presetProperties.screenHeight;//屏幕高度
           var deviceId=presetProperties.deviceId;//设备ID
           var zoneOffset=presetProperties.zoneOffset;//时区偏移值


IP,国家城市信息由服务端解析生成,客户端不提供接口获取这些属性

# 八、进阶功能

从 v1.7.0 开始,SDK 支持上报三种特殊类型事件: 首次事件、可更新事件、可重写事件。这三种事件需要配合 TA 系统 2.8 及之后的版本使用。由于特殊事件只在某些特定场景下适用,所以请在数数科技的客户成功和分析师的帮助下使用特殊事件上报数据。

# 8.1 首次事件

首次事件是指针对某个设备或者其他维度的 ID,只会记录一次的事件。例如在一些场景下,您可能希望记录在某个设备上第一次发生的事件,则可以用首次事件来上报数据。

// 示例:上报设备首次事件, 假设事件名为 DEVICE_FIRST
ta.trackFirstEvent({
  eventName: "DEVICE_FIRST",
  properties: { INT_PROPERTY: 0 }
});

如果您希望以设备以外的其他维度来判断是否首次,则可以为首次事件设置 FIRST_CHECK_ID. 例如您需要记录某个账号的首次事件,可以将账号 ID 设置为首次事件的 FIRST_CHECK_ID:

// 示例:上报用户账号的首次事件, 假设事件名为 USER_FIRST
// 将用户 ID 设置为首次事件的 FIRST_CHECK_ID
ta.trackFirstEvent({
  eventName: "USER_FIRST",
  firstCheckId: "YOUR_ACCOUNT_ID",
  properties: { INT_PROPERTY: 0 }
});

注意:由于在服务端完成对是否首次的校验,首次事件默认会延时 1 小时入库。

# 8.2 可更新事件

您可以通过可更新事件实现特定场景下需要修改事件数据的需求。可更新事件需要指定标识该事件的 ID,并在创建可更新事件对象时传入。TA 后台将根据事件名和事件 ID 来确定需要更新的数据。

// 示例: 上报可被更新的事件,假设事件名为 UPDATABLE_EVENT
ta.trackUpdate({
  eventName: "UPDATABLE_EVENT",
  properties: { status: 3, price: 100 },
  eventId: "test_event_id"
});
// 上报后事件属性 status 为 3, price 为 100

ta.trackUpdate({
  eventName: "UPDATABLE_EVENT",
  properties: { status: 5 },
  eventId: "test_event_id"
});
// 上报后事件属性 status 被更新为 5, price 不变

# 8.3 可重写事件

可重写事件与可更新事件类似,区别在于可重写事件会用最新的数据完全覆盖历史数据,从效果上看相当于删除前一条数据,并入库最新的数据。TA 后台将根据事件名和事件 ID 来确定需要更新的数据。

// 示例: 上报可被重写的事件,假设事件名为 OVERWRITE_EVENT
ta.trackOverwrite({
  eventName: "OVERWRITE_EVENT",
  properties: { status: 3, price: 100 },
  eventId: "test_event_id"
});

// 上报后事件属性 status 为 3, price 为 100
ta.trackOverwrite({
  eventName: "OVERWRITE_EVENT",
  properties: { status: 5 },
  eventId: "test_event_id"
});

// 上报后事件属性 status 被更新为 5, price 属性被删除

# Release Notes

v2.0.0 2021/09/15

  • 支持暂停/开始、停止/恢复数据上报
  • 支持事件黑名单
  • 代码优化

v1.8.2 2021/06/24

  • 支持预制属性获取

v1.8.1 2021/03/08

  • 新增快手小程序的支持

v1.8.0 2020/11/20

  • 新增哔哩哔哩小游戏、小米小游戏、H5 游戏的支持
  • 完善游戏引擎支持:支持 ts 项目接入
  • 完善游戏引擎支持:支持常见小游戏、快游戏平台(华为、小米、OPPO、VIVO)、H5 游戏
  • 其他代码细节层面的优化

v1.7.1 2020/08/27

  • 支持魅族平台

v1.7.0 2020/08/24

  • 支持首次事件,可更新事件,可重写事件

v1.6.2 2020/07/23

  • 支持钉钉小程序
  • 修复华为快游戏上报异常问题

v1.6.1 2020/07/10

  • 支持华为快游戏

v1.6.0 2020/06/10

  • 支持 debug 模式

v1.5.0 2020/02/10

  • 属性值支持 Array 类型
  • 新增 userAppend 接口
  • 去除本地属性值检查

v1.4.4 2019/12/24

  • 修复 VIVO 和 OPPO 平台首次 appHide 没有计时

v1.4.3 2019/12/20

  • 优化 OPPO 快游戏网络请求

v1.4.2 2019/11/20

  • 支持 OPPO、VIVO 快游戏

v1.4.0 2019/10/22

  • 新增userUnset接口,可用于清空一个用户属性
  • 新增预置属性#zone_offset,单位为小时。 默认情况下会将本地时区的偏移上报到服务端,该时间偏移会受夏令时影响。满足如下公式:
utc_time + #zone_offset = #event_time

v1.3.2 2019/09/29

  • 修复 v1.3.1 引入的部分平台的兼容性问题

v1.3.1 2019/09/27

  • track, userSet, userSetOnce, userAdd, userDel 接口添加回调函数

v1.3.0 2019/08/15

  • 代码优化
    • #network_type 属性根据网络状态更新
    • 数据发送内容:用户属性数据不传送预置属性,简化发送内容
    • 优化日志打印
  • 新增接口
    • getAccountId()
    • getDistinctId()
    • timeEvent()
    • initInstance()
    • identify()authorizeOpenID()
    • getDeviceId()
    • getSuperProperties()
    • unsetSuperProperty()
    • setDynamicSuperProperties()
  • 多实例
    • 通过调用 initInstance(name, config) 可以创建新的实例.
    • 子实例默认使用父实例的配置,默认情况下不启用本地缓存
  • 配置信息
    • enablePersistence 父实例默认为 true,子实例默认为 false
    • asyncPersistence 异步读取缓存
    • maxRetries 当请求失败或超时时的重试次数, 默认为 3 次
    • sendTimeout 超时时间,单位为毫秒
    • enableLog 是否打开日志打印
  • 跨平台
    • 支持主流小程序小游戏平台:微信、百度、支付宝、字节跳动、快应用
    • 增加预置属性 #mp_platform,标识应用所在的平台
    • #lib 为 MP/MG,分别代表小程序和小游戏