本文详细介绍用户体验监控微信小程序 SDK 的各功能接口,帮助您更灵活、深度地使用 SDK。
初始化
import TDEM from 'tdem-mp-sdk';const tdem = TDEM.init({projectKey: 'YOUR_PROJECT_KEY',endpoint: 'https://dem.rumt-zh.com',});
用户标识管理
// 初始化时通过 userId / uin 传入,或登录后补写tdem.setUser('user-123');// 登出时清除用户标识tdem.clearUser();
中途
setUser 只更新后续录制与事件上的用户字段,不会主动新开会话;若此时不存在有效会话(冷启动、本地缓存被清),或距上次前后台切换已超过30分钟,则会随会话重建一并生效。clearUser() 清空 userId 与 uin,用于登出后解除用户维度关联。全局标签管理
tdem.setTags({ channel: 'mp-weixin' }); // 设置/追加标签tdem.removeTags('channel'); // 移除指定标签(支持字符串或数组)tdem.clearTags(); // 清空所有标签
自定义事件
tdem.track('pay_start', {tags: { source: 'banner' },properties: { amount: 99 },});
name 须为非空字符串;tags / properties 分别落到 data.tags 与 data.event_properties,值会被转为字符串,单个值最长1024字符。自定义测速
// 使用计时器tdem.startMeasure('checkout');tdem.endMeasure('checkout');// 或直接上报耗时(毫秒)tdem.measure('onload', 1200);
日志上报
tdem.captureMessage('checkout retry', { level: 'warn' });
异常上报
tdem.captureException(new Error('支付失败'), {tags: { module: 'pay' },});
页面管理
// 手动上报 PVtdem.reportPageView('/pages/checkout/index', { pageTitle: '结算页' });// 虚拟页面(弹窗、Tab 等)tdem.setPage('/modal/confirm', { pageTitle: '确认弹窗' });// 弹窗关闭后恢复tdem.leavePage();
reportPageView(pageUrl?, options?):上报一次页面浏览(event_type = page_view)。不传
pageUrl 时取当前页面地址;options 支持 pageTitle / referrer / navigationType / fromPage / toPage / isFirstVisit / isFirstLoad / deviceType / replayId / tags / properties。setPage(pageUrl, options?):声明进入一个虚拟页面,内部以 navigationType = push 上报一次 PV,后续事件归到该页面下;pageUrl 必填且须为非空字符串,否则调用被忽略;options 支持 pageTitle / pageGroup。leavePage():退出虚拟页面,恢复到真实页面地址。MP 端已自动接管页面
onLoad / onShow 生命周期,常规路由跳转无需手动调用;仅在弹窗、Tab 切换等无路由变化的场景使用。挣扎事件上报
tdem.trackStruggle('payment_declined', {severity: 'high', // 可选:low | medium | high,默认 mediumtags: { channel: 'checkout' },properties: { reason: 'risk_rejected' },});
name 须为非空字符串且不超过 128 字符,否则本次上报被丢弃。severity 仅接受 low / medium / high,传其他值本次上报被丢弃;对应权重分别为1/3/5。无需也不能填写 owner 与规则元信息,这些属 SDK 实现细节,不由公开 API 接受。
上报通道与自动检测的挣扎事件一致:
event_type = struggle、event_category = behavior,具体类型落在 data.event_name(此处为 custom_struggle)。详见数据上报验证中的 挣扎事件。表单提交结果上报
tdem.reportFormSubmitResult({status: 'success', // 必填:success | faileventName: 'form_submit', // 可选:事件名formId: 'register-form', // 可选:表单标识fieldId: 'email', // 可选:字段标识validationCode: 'E001', // 可选:校验码validationMessage: '邮箱格式错误', // 可选:校验信息(最长 256 字符)});
status 必填,缺失时本次调用被忽略;eventName 不传时默认按 form_submit_${status} 命名。validationMessage 超过256字符会被截断。原始事件上报
// 直接上报 TDEMEvent 格式的事件(高级用法)tdem.reportTDEMEvent({event_id: 'evt_xxx',event_type: 'custom',event_category: 'custom',timestamp: Date.now(),page_url: '/pages/index/index',data: { event_name: 'my_event', tags: { key: 'value' } },});
支持传入单个事件对象或事件数组。
SDK 会统一补齐
page_url、replay_id,并把 defaultTags 合并进事件 tags。属高级用法,常规业务建议优先使用 track / measure / captureMessage / captureException。扩展设备信息(Bean)
tdem.extendBean('customKey', 'customValue'); // 追加自定义键值到公共 Beanconst bean = tdem.getBean(); // 读取 Bean 查询串
extendBean(key, value):向公共 Bean 追加自定义键值,随上报请求的查询串一并带出。SDK 内部亦通过该机制写入 platform / model / vp / sr / netType / sessionId / replayId / referer 等公共字段。getBean():返回形如 id=xxx&uin=yyy&from=zzz 的查询串,便于本地排查上报参数。配置修改与销毁
tdem.setConfig({ version: '1.2.3', env: 'production' });tdem.destroy();
注意:
env 非 production 时,控制台默认筛选可能看不到数据。合法取值为 production / development / gray / pre / daily / local / test / others,传入其他值会回落到 others。构造函数进阶项
需要接口返回码修正、trace 注入、WebSocket 监控、setData 性能阈值时,可直接
new TDEM(config) 构造,详见 SDK 初始化中的 构造函数进阶项。此时 projectKey 与 endpoint 之外,还可传 id / hostUrl / version / api / websocketHack / setDataReportConfig / enableHttp2 / eventReport(apiUrl / reportUrl / eventPath)等字段。静默降级
基础库过低、部分 Hook 失败:只上报仍能拿到的事件,不打断宿主。
远程配置失败且无缓存:关闭回放。
存储不可用:不写缓存,失败丢弃。
采集错误不对用户展示。
未知运行时平台:初始化直接停止。
注意:
aid(设备标识)写在 storage 键
TDEM_ID,清缓存会换新 aid。