小程序\小游戏 SDK 使用指南

本指南将会介绍如何使用 小程序\小游戏 SDK 接入您的项目。建议在接入开始前,先阅读数据规则一章,在了解TA数据规则后再进行接入。您可以在访问GitHub获取 小程序\小游戏 SDK的源代码。

最新版本为: 1.7.1

更新时间为: 2020-08-27

下载地址

小程序\小游戏 SDK 是适用于各小程序平台、快应用、各小游戏平台的SDK,SDK提供了一套标准的API接口以及实现代码,针对不同的平台提供了不同的SDK文件,实现多个平台的适配。对于小游戏 SDK,我们也提供了常用游戏引擎的集成方案:Egret 白鹭引擎LayaboxCocos Creator.

目前,支持的平台及对应的文件如下:

小程序平台:

  • 微信小程序(thinkingdata.wx.min.js)
  • 支付宝小程序(thinkingdata.my.min.js)
  • 字节跳动小程序(thinkingdata.tt.min.js)
  • 百度小程序(thinkingdata.swan.min.js)
  • 钉钉小程序(thinkingdata.dd.min.js)

快应用平台:

  • 快应用(thinkingdata.quick.min.js)

小游戏平台:

  • 微信小游戏(thinkingdata.mg.wx.min.js)
  • 字节跳动小游戏(thinkingdata.mg.tt.min.js)
  • 百度小游戏(thinkingdata.mg.swan.min.js)
  • 手Q小游戏(thinkingdata.mg.qq.min.js)
  • VIVO 快游戏(thinkingdata.mg.qg.vivo.min.js)
  • OPPO 快游戏(thinkingdata.mg.qg.oppo.min.js)
  • 华为快游戏(thinkingdata.mg.qg.huawei.min.js)
  • 魅族快游戏 (thinkingdata.mg.qg.mz.min.js)

一、集成方法

以下是各平台的集成方式:

1.1 小程序平台集成 (以微信小程序为例,其余小程序平台请替换require的js文件)

在 app.js 中添加以下代码

var TA = require('./utils/thinkingdata.wx.min.js');

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
    },
  name: 'ta', // 全局变量名称, 默认为 thinkingdata
};

// 创建 TA 实例,如果开启自动采集,则TA实例将自动创建,可不调用以下初始化代码,直接使用SDK实例
var app = getApp();
app.ta = new TA(config);
  • appid是您的项目的APP_ID,需要进行配置,在您申请项目时会给出,请在此处填入
  • server_url为上传数据的URL,需要进行配置
  • autoTrack表示是否开启自动采集功能,每一个元素分别代表如下的自动采集事件,默认全部关闭:
  • appLaunch:自动采集小程序初始化,一次使用只会触发一次
  • appShow:自动采集小程序启动,或从后台进入前台
  • appHide:自动采集小程序从前台进入后台,并记录本次访问(启动至调入后台)的时间
  • pageShow:自动采集小程序页面显示或切入前台,记录页面路径以及前向路径
  • pageShare:自动采集小程序进行转发分享,记录转发时的页面

关于自动采集事件的详细信息,可以查看自动采集事件一节

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

如果您使用的是云服务,请使用以下传输URL:

https://receiver.ta.thinkingdata.cn

如果您使用的是私有化部署的版本,由于微信等平台的服务器域名中不能出现端口号,因此需要您自行配制域名,绑定TA私有化服务器的接收端。

在config中其他可选参数有:

var config = {
    //...
    enableLog: true, // 是否打开日志打印
    sendTimeout: 3000, // 网络请求超时时间,单位毫秒,默认值 3000 ms
    maxRetries: 3, // 网络请求失败时的重试次数,1 表示不重试。默认值是 3
    enablePersistence: true, // 是否使用本地缓存(用户 ID、设备 ID、公共属性记录在本地缓存),主实例默认为 true,子实例默认为 false
    debugMode: 'debug' // debug 模式
    //...
};

1.2 使用SDK实例

在其他页面中,可以调用以下代码获取SDK实例:

var ta = getApp().ta;

//调用SDK方法
ta.track('test');

1.3 初始化SDK实例

在SDK集成完毕之后,即可调用SDK方法,但只有调用了init之后,数据才会被上报,在调用init之前触发的数据(包括自动采集数据),将会被暂存,直到init被调用时才会上报,这些数据的上报时间为埋点触发时间,而非init被调用的时间

init被调用时,会将init调用前设置的用户ID以及公共属性同步到被暂存的数据中,动态公共属性会在init时获取上传值加入到事件中,也就是说在init调用前设置的用户ID以及公共属性会对所有数据生效,因此如果您需要设置用户ID或公共属性,请在调用对应接口之后再进行初始化。

为了以避免重复用户的情况发生,如果您调用authorizeOpenID设置访客ID,务必保证在初始化前先进行设置,即设置完用户ID后再初始化。
ta.authorizeOpenID('authorizeOpenID');
ta.login("ABC_123456");
ta.setSuperProperties({"channel": "渠道"});

//先设置ID以及公共属性再初始化
ta.init();

1.1 快应用集成

以下是快应用的集成方法,请在app.ux文件中<script>标签内的onCreate()函数中加入初始化代码:

import {ThinkingDataAPI, TAGloble} from './utils/thinkingdata.quick.min.js'

export default {
  onCreate() {
    var config = {
      name: 'ta', // 全局变量名称, 默认为 thinkingdata
      appid: 'YOU-APP-ID',
      server_url: 'https://youserverurl.com',
      autoTrack: {
        pageShow: true, // 自动采集 ta_mp_view
      }
    }
    var ta= new ThinkingDataAPI(config)
    TAGloble.ta = ta
    ta.init()
  }
}
  • appid是您的项目的APP_ID,需要进行配置,在您申请项目时会给出,请在此处填入
  • server_url为上传数据的URL,需要进行配置
  • autoTrack表示是否开启自动采集功能,每一个元素分别代表如下的自动采集事件,默认全部关闭:
  • pageShow:自动采集快应用页面显示或切入前台,记录页面路径以及前向路径

关于自动采集事件的详细信息,可以查看自动采集事件一节

如果您使用的是云服务,请使用以下传输URL:

https://receiver.ta.thinkingdata.cn

如果您使用的是私有化部署的版本,请使用TA私有化服务器的接收端URL。

在config中其他可选参数有:

var config = {
    //...
    enableLog: true, // 是否打开日志打印
    sendTimeout: 3000, // 网络请求超时时间,单位毫秒,默认值 3000 ms
    maxRetries: 3, // 网络请求失败时的重试次数,1 表示不重试。默认值是 3
    enablePersistence: true, // 是否使用本地缓存(用户ID、设备ID、公共属性记录在本地缓存),主实例默认为 true,子实例默认为 false
    persistenceComplete(ta) { // 异步存储初始化完成时的回调,可以做一些与缓存相关的删除操作
        //ta.clearSuperProperties();
    }
    //...
};
  • 异步存储初始化完成的回调函数persistenceComplete的设置

由于在快应用中,缓存是异步读取的,因此在读取缓存前执行的缓存查询与删除将会出现与预期不符的情况,为了保证在初始化阶段的缓存查询与删除能够正确执行,需要在persistenceComplete回调中编写查询或删除语句

与缓存中的数据包括:用户ID(#account_id与#distinct_id),设备ID,公共事件属性,timeEvent的计时

因此关于这些数据的查询与删除接口,如果需要在初始化阶段调用,必须在persistenceComplete的回调函数中编写,包括但不限于:

  • 用户ID,设备ID的getter
  • 清空公共事件属性的接口:clearSuperProperties

回调将会在缓存已经读取完成,顺序执行:

var config = {
    //...
    persistenceComplete(ta) {
        var aid = ta.getAccountId();
        ta.clearSuperProperties();
    },
    //...
}

针对异步调用导致的 SDK 状态问题,我们为每个实例设置了 Ready 状态。当以下条件全部满足时,我们认为实例已经 Ready:

  • 获取系统信息完成:我们通过调用平台提供的 getSystemInfo() 获取系统信息
  • 缓存信息读取完成:快应用是异步读取缓存
  • 用户主动调用了 ta.init()

当实例未进入 Ready 状态,我们会缓存所有上报的数据,等待实例初始化完成后,会清空缓存,以此保证状态正确。

在异步读取缓存的不同阶段,需要特别注意下面的说明: 1. 在缓存信息未读取的时候,可以设置公共属性、登录账户。 2. 当缓存读取完成时,我们会用新的值覆盖之前在缓存中的值。 3. 在缓存读取完成之前,调用涉及删除或读取之前缓存的一些信息的函数,则则无法读取或删除实际缓存中的数据。

针对上述第 3 点,可以通过在初始化时传入回调函数来保证调用时

1.2 使用SDK实例

在其他页面中,可以调用以下代码获取SDK实例:

import {TAGloble} from './utils/thinkingdata.quick.min.js'

var ta = TAGloble.ta
ta.track('test')

1.3 初始化SDK实例

在SDK集成完毕之后,即可调用SDK方法,但只有调用了init之后,数据才会被上报,在调用init之前触发的数据(包括自动采集数据),将会被暂存,直到init被调用时才会上报,这些数据的上报时间为埋点触发时间,而非init被调用的时间

init被调用时,会将init调用前设置的用户ID以及公共属性同步到被暂存的数据中,动态公共属性会在init时获取上传值加入到事件中,也就是说在init调用前设置的用户ID以及公共属性会对所有数据生效,因此如果您需要设置用户ID或公共属性,请在调用对应接口之后再进行初始化。

为了以避免重复用户的情况发生,如果您调用authorizeOpenID设置访客ID,务必保证在初始化前先进行设置,即设置完用户ID后再初始化。
ta.authorizeOpenID('authorizeOpenID');
ta.login("ABC_123456");
ta.setSuperProperties({"channel": "渠道"});

//先设置ID以及公共属性再初始化
ta.init();

1.4 开启自动采集事件

首先在初始化的config对象中,开启自动采集;开启采集后,在需要监控页面浏览的ux文件中,将<script>标签下的export default{...}替换成以下形式

import {TAGloble} from './utils/thinkingdata.quick.min.js'

// 获取TAGloble.TAPage
var Page = TAGloble.TAPage

//替换原先的export default,该页面的代码写在下述代码块中
export default Page ({ 
    //....
})

1.1 小游戏平台集成 (以微信小程序为例,其余小游戏平台请替换require的js文件)

在 game.js 中添加以下代码

var TA = require('./thinkingdata.mg.wx.min.js')

var config = {
    appid: 'YOU-APP-ID',
    server_url: 'https://youserverurl.com',
    autoTrack: {
       appShow: true, // 自动采集 ta_mg_show
       appHide: true, // 自动采集 ta_mg_hide
    },
    name: 'ta', // 全局变量名称, 默认为 thinkingdata
};

// 创建 TA 实例,如果开启自动采集,则TA实例将自动创建,可不调用以下初始化代码,直接使用SDK实例
GameGlobal.ta = new TA(config);
  • appid是您的项目的APP_ID,需要进行配置,在您申请项目时会给出,请在此处填入
  • server_url为上传数据的URL,需要进行配置
  • autoTrack表示是否开启自动采集功能,每一个元素分别代表如下的自动采集事件,默认全部关闭:
  • appShow:自动采集小游戏启动,或从后台进入前台
  • appHide:自动采集小游戏从前台进入后台,并记录本次访问(启动至调入后台)的时间

关于自动采集事件的详细信息,可以查看自动采集事件一节

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

如果您使用的是云服务,请使用以下传输URL:

https://receiver.ta.thinkingdata.cn

如果您使用的是私有化部署的版本,由于小游戏的服务器域名中不能出现端口号,因此需要您自行配制域名,绑定TA私有化服务器的接收端。

在config中其他可选参数有:

var config = {
    //...
    enableLog: true, // 是否打开日志打印
    sendTimeout: 3000, // 网络请求超时时间,单位毫秒,默认值 3000 ms
    maxRetries: 3, // 网络请求失败时的重试次数,1 表示不重试。默认值是 3
    enablePersistence: true, // 是否使用本地缓存(用户ID、设备ID、公共属性记录在本地缓存),主实例默认为 true,子实例默认为 false
    //...
};

1.2 使用SDK实例

在其他JS文件中,可以直接调用SDK实例:

//SDK实例是全局变量,可以直接调用
ta.track('test');

1.3 初始化SDK实例

在SDK集成完毕之后,即可调用SDK方法,但只有调用了init之后,数据才会被上报,在调用init之前触发的数据(包括自动采集数据),将会被暂存,直到init被调用时才会上报,这些数据的上报时间为埋点触发时间,而非init被调用的时间

init被调用时,会将init调用前设置的用户ID以及公共属性同步到被暂存的数据中,动态公共属性会在init时获取上传值加入到事件中,也就是说在init调用前设置的用户ID以及公共属性会对所有数据生效,因此如果您需要设置用户ID或公共属性,请在调用对应接口之后再进行初始化。

为了以避免重复用户的情况发生,如果您调用authorizeOpenID设置访客ID,务必保证在初始化前先进行设置,即设置完用户ID后再初始化。
ta.authorizeOpenID('authorizeOpenID');
ta.login("ABC_123456");
ta.setSuperProperties({"channel": "渠道"});

//先设置ID以及公共属性再初始化
ta.init();


2. 设置用户ID

在集成SDK之后,SDK会使用UUID作为每个用户的默认访客ID,该ID将会作为用户在未登录状态下身份识别ID。需要注意的是,UUID在用户更换设备及清理缓存时将会变更。

2.1 设置访客ID

如果您希望使用其他ID来作为用户的访客ID,您可以调用identify或者authorizeOpenID来设置访客ID(两个方法是等价的,根据使用习惯保留两个接口名):

//传入值为openid
ta.authorizeOpenID('OpenID');
//identify等价于authorizeOpenID
ta.identify('OpenID');

需要注意以下几点:

  1. 设置后的OpenID将会被设置为访客ID#distinct_id,如果使用login传入账号ID,则根据用户识别规则,会优先以账号ID为准
  2. 如果需要进行设置,必须在init之前调用本接口

2.2 设置账号ID

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

//用户的登录唯一标识,此数据对应上报数据里的#account_id,此时"#account_id"的值为"ABC_123456"
ta.login("ABC_123456");

//再次调用login调整账号ID,此时"#account_id"的值为"XYZ_987654"
ta.login("XYZ_987654");

请注意,该方法不会上传用户登录的事件

2.3 清除账号ID

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

//去除上报数据里的#account_id,之后的数据将不带有"#account_id"
ta.logout();

请注意,该方法不会上传用户登出的事件

3. 发送事件

您可以直接调用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"});

3.3 设置公共属性

对于一些重要的属性,譬如用户的设备ID、来源渠道、用户状态等,这些属性需要设置在每个事件中,此时您可以将这些属性设置为公共属性,即每个事件中都带有的属性。我们推荐您在发送事件前,先设置公共属性。

公共属性包含两种,事件公共属性和动态公共属性。在事件上报时,公共属性将会被插入到数据的properties中。如果此时公共属性与事件中设置的自定义属性有相同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设置公共事件属性,则同名字段后面的调用会覆盖之前的,不同名字段。

如果您需要清除公共事件属性,可以调用clearSuperProperties将所有公共属性清除。

ta.clearSuperProperties();

3.3.2 设置动态公共属性

动态公共属性会在事件上报时,执行一个 function ,并把返回值作为该动态公共属性的值,加入到事件中。您可以调用setDynamicSuperProperties接口设置动态公共属性。该接口接受一个 function 作为参数。

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

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

4. 用户属性

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 及之后版本使用

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. 其他功能

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. 相关预置属性

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 页面路径 小程序被转发时所在的页面路径

8. 进阶功能

从 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 Note

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,分别代表小程序和小游戏

results matching ""

    No results matching ""