安装
npm install @x-edu/tracker
使用
关于神策的用法详见:https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_web_high-7538088.html
初始化
import { XTracker } from '@x-edu/tracker'
XTracker.init({
env = window.__global_env,
sensors: {
serverUrl: '',
appKey: '',
bridge: true,
heatmap: {
clickmap: 'not_collect',
scroll_notice_map: 'not_collect'
},
subServerUrl: '',
subAppKey: ''
},
callback: ({ sensors }) => {
},
_qt: false
})
上报
点击埋点(注:需在 XTracker.init 完成后调用)
XTracker.track({
eventName: '',
params: {
event_type: 'clickEvent' | 'businessEvent',
...otherParams
}
})
PV 埋点(注:需在 XTracker.init 完成后调用)
XTracker.pv({
eventName: '',
params
})
关于 window.sensors(仅针对未使用神策双报的情况)
window.sensors
: 神策对象,相当于 XTracker.init 中 callback 的回调参数 sensors。
注意:window.sensors
需要在 XTracker.init 完成后使用,否则 window 上不存在该属性。
由于 XTracker.init 是一个异步的过程,在实际使用中可能出现初始化还未完成就去取 window.sensors
的情况,此时该属性可能还不存在,以下提供了两种方法避免这种问题:
-
方法1:@x-edu/tracker 提供了异步的静态方法 XTracker.getSensors()
来获取神策对象
const getSensors = async () => {
const sensors = await XTracker.getSensors()
console.log('window.sensors', sensors)
}
getSensors()
-
方法2:@x-edu/tracker 提供了异步的静态方法 XTracker.getInitState()
来获取 sdk 初始化的完成状态。完成初始化后,如果启用了神策上报,window.sensors
就一定存在
const getTrackInitState = async () => {
const state = await XTracker.getInitState()
if (state) {
console.log('window.sensors', window.sensors)
}
}
getTrackInitState()
需要调用神策的方法时,请使用 window.sensors.xx
调用或在 XTracker.init 的 callback 中通过回调参数 sensors.xx
调用。
使用示例:神策注册公共属性
注意:如果有使用 registerPage 方法,该方法要在 XTracker.track 或 XTracker.pv 调用前完成,否则会导致公共属性注册失败
window.sensors.registerPage({
nduser_id: '',
identity: '游客',
application_id: 'xstudy_web',
owned_role: ''
})
关于使用神策双报的注意事项(2.0.0 版本开始支持)
神策双报是通过 iframe 上报实现的,没有特殊需求时,并不会使用到神策双报。
- 有无使用神策双报的区别在于:
XTracker.getSensors()
返回值(即下述的 sensors) 和 callback 中的 sensors
定义的变化。
- 如果未使用神策双报:
sensors = window.sensors
,支持所有神策方法
- 如果使用神策双报:
sensors = 内部实例化的神策对象
,目前仅支持 sensors.registerPage 方法
- 不开启(使用)神策上报时,sensors 为 null
- 如果是从 1.x 版本升级到 2.x 的,并且需要使用神策双报时:需要注意原本使用
window.sensors.registerPage
的地方,需要做修改。(因为不替换的话,会导致上报到双报地址的数据缺失注册的公共属性)
-
步骤1: 先用 XTracker.getSensors()
获取实例化对象
const getSensors = async () => {
const sensorsInstance = await XTracker.getSensors()
console.og('sensorsInstance', sensorsInstance)
}
getSensors()
-
步骤2: 把原本的 window.sensors
替换为上面获取的 sensorsInstance
如果不存在需要异步获取参数,再注册公共属性的情况,可以直接在 XTracker.init 的 callback 中通过回调参数 sensors.registerPage
调用。
- 使用双报功能后,全埋点和点击图相关的数据采集上报,不支持上报到 subServerUrl,只能上报到 serverUrl。
不支持的原因:神策双报的实现机制是在当前页面创建一个 iframe,然后通过该 iframe 执行数据上报。由于 iframe 中本身没有任何页面元素,因此无法采集到当前页面上的元素信息。这导致 sensors.quick('autoTrack')
和 XTracker.init.sensors.heatmap
等功能无法将全埋点数据上报到 subServerUrl。