SDK 初始化参数
参数 | 类型 | 默认值 | 含义 | 备注 |
---|---|---|---|---|
name | String | sensors | SDK 使用的一个默认的全局变量,会注册在 App 全局函数内,在 Page 中可以通过 getApp[name].track 来使用 | |
server_url | String | 数据接收地址 |
| |
autoTrack | Object | 无 | 是否开启自动采集 |
|
show_log | Boolean | true | 是否打印 log |
|
send_timeout | Number | 1000 | 请求发送超时时间(如果一个请求发送后,超过规定时间没响应,则继续发送下一条数据) |
|
use_client_time | Boolean | false | 是否使用客户端时间 |
|
max_string_length | Number | 500 | 通用字符串最大长度,超过部分会被截取丢弃(url 太长可能会导致数据发送失败,所以限制长度) | |
allow_amend_share_path | Boolean | true | 设置 true 后会自动修改 Page.onShareAppMessage 中的 path 属性,新增一些参数包括当前用户的 Distinct ID 等 |
|
batch_send | Boolean | true | 小程序中是否使用批量发送数据功能 |
|
datasend_timeout | Number | 3000 | 请求发送取消时间 |
|
source_channel | Array | 无 | 需要解析的渠道参数 |
|
is_persistent_save | Object | 无 | 是否需要将最近一次渠道信息保存到 Storage 中 |
|
preset_properties | Object | 无 | 配置采集指定预置属性 |
|
autotrack_exclude_page | Object | 无 | 配置指定页面不采集 $MPViewScreen 页面浏览事件 |
|
framework | Object | 无 | 如果使用 Taro 框架开发小程序,元素点击事件会触发多次,配置 Taro 参数之后可以只采集一次 |
|
preset_events | Object | 无 | 预置事件的自定义控制 |
|
全埋点采集逻辑
事件名称 | 生命周期 | 采集时机 | 说明 |
---|---|---|---|
$MPLaunch(小程序启动) | App.onLaunch | 小程序进程被杀死,重新打开时会触发 |
|
$MPShow(小程序显示) | App.onShow | 小程序启动,或从后台进入前台显示 |
|
$MPHide(小程序进入后台) | App.onHide | 点击小程序右上角退出按钮、微信进入后台、手机锁屏、小程序进程被杀死时 |
|
$MPViewScreen(小程序页面浏览) | Page.onShow | 小程序启动打开页面、小程序内打开页面、从后台进入前台打开页面时触发 |
|
$MPShare(小程序分享) | Page.onShareAppMessage | 设置这个函数后,点击分享按钮触发 |
|
$MPClick(小程序元素点击) | 当 Page 中定义的事件处理函数被触发时采集 |
| |
$MPAddFavorites(小程序收藏) | page.onAddToFavorites | 点击小程序收藏按钮时触发 | |
$MPPageLeave(小程序页面离开) | page.onHide 或 page.onUnload | 小程序页面隐藏或卸载时触发 |
设置事件公共属性
设置事件静态公共属性
所有小程序 SDK 支持通过 registerApp 接口设置所有事件都有的公共属性。可以在 app.js 文件引入 sensorsdata.min.js 文件之后,init 方法调用之前使用 registerApp 方法设置公共属性。
// 注册事件公共属性。
var sensors = require('/dist/wechat/sensorsdata.cjs.js');
sensors.registerApp({
userLever: 'VIP3',
userSex: '男'
});
sensors.init();
设置事件动态公共属性
版本要求
微信小程序 SDK > v1.13.27
当设置动态公共属性的时候,注意使用函数类型作为属性值,函数的返回值应当是神策支持的类型,请参考数据格式,否则会被过滤掉。
var i=0
sensors.registerApp({
index: function() {
return ++i; // 返回数字
},
istrue: function() {
return i<10 ? true : false; // 返回bool
},
isEmptyString: function() {
return ""; // 返回字符串
},
isDate: function() {
return new Date('December 17, 1995 03:24:00'); // 返回日期类型
},
isArrayOfStr: function() {
return ["1","2","3"] // 返回元素是字符串的数组
}
})
另外如果函数在异步回调中返回值,这种情况也是会被过滤掉。
sensors.registerApp({
num:function(){
setTimeout(()=>{
return 100
},500)
}
})
用户属性设置
保留初次属性
对于需要保证只有首次设置时有效的属性,如用户首次充值金额、首次设置的昵称等,可以使用 setOnceProfile 接口进行记录。与 setProfile 方法不同的是,如果被设置的用户属性已存在,则这条记录会被忽略而不会覆盖已有数据,如果属性不存在则会自动创建。
// 设置用户属性 subscribers 为 7277
sensors.setOnceProfile({
email:'xxx@xx',
favoriteFruits: ['苹果', '油桃'],
subscribers: 7277
});
// 再次设置用户属性 subscribers 为 7278 不生效,属性值仍然是 7277
sensors.setOnceProfile({
subscribers: 7278
});
数值属性累加
针对一些数值型属性,如消费总额、用户积分等属性,我们可以使用 incrementProfile 对原值进行累加,神策会自动计算并保存累加之后的值。
// 设置用户订阅次数属性
sensors.incrementProfile({
subscribers: 5
});
// 对用户订阅次数进行累加,此时在神策系统中查询 subscribers 属性值为 10
sensors.incrementProfile({
subscribers: 5
});
列表属性追加
对于列表类型用户属性,如用户喜爱的水果、用户爱看的电影等属性,可以调用 appendProfile 接口进行追加一些新值。
// 设置用户喜爱的水果属性
sensors.appendProfile({
favoriteFruits: ['葡萄', '香蕉']
});
// 对用户喜爱的水果属性追加新值
sensors.appendProfile({
favoriteFruits: ['苹果', '桃子']
});
自定义匿名 ID
默认情况下,SDK 会生成匿名 ID 并可以保证该 ID 的唯一性,如果需要替换神策默认分配的匿名 ID ,可以在配置初始化 SDK 参数之后(init 接口调用之前)立即调用 identify 方法进行替换。
// 自定义匿名 ID
sensors.identify('自定义匿名 ID', true);
获取预置属性
某些情况下可能需要在前端获取 SDK 预置属性,SDK 支持使用 getPresetProperties 方法获取部分事件预置属性。
// 获取事件预置属性
sensors.getPresetProperties();
清除公共属性
对于调用 registerApp 设置的公共属性,SDK 提供 clearAppRegister 接口清除这些属性。
// 清除设置的 current_url 和 referrer 公共属性
sensors.clearAppRegister(['current_url', 'referrer']);
获取匿名 ID
小程序 SDK 提供了 getAnonymousID 接口来获取匿名 ID。
sensors.getAnonymousID();
采集小程序页面浏览时长
小程序 SDK 可以通过开启 $MPPageLeave 预置事件来自动采集。
- 1.14.20 及以上版本的微信小程序 SDK 支持
sensors.init({
autoTrack: {
pageLeave: true // 默认不开启,为 false
}
});
// $MPPageLeave 预置事件中会采集 event_duration 预置属性来记录页面浏览时长,单位为秒
本地存储加密功能
目前 SDK 保存在 storage 中的信息包含用户信息及 register 设置的属性信息,可以对 storage 中的数据进行深层加密,保证安全性
版本要求
- 微信小程序 SDK 1.14.9 及以上版本
功能配置
// app.js
var sensors = require('/dist/wechat/sensorsdata.cjs.js');
sensors.init({
name: 'sensors',
server_url: '数据接收地址',
encrypt_storage : true // 是否开启本地加密存储
});