useTracker()
useTracker 是埋点统一上报入口——按 system/info.tracker 配置自动分流到集团 WebSDK 或自建通道(#228),业务侧无感。业务 / 组件调 useTracker().track(event, payload) 上报自定义事件,不直接碰 window.WebSDK —— 绕过它会丢掉 framework 的 gate(配置未就绪自动 no-op)+ 降级(懒加载 / 容错),裸调在配置缺失时会报错。
工作原理
- 双重 gate —— 满足以下两条才真正上报,缺任一 → 静默 no-op(不报错):
ModuleOptions.tracker.enabled为真(总开关,默认true)system/info.tracker任一通道配置就绪:endpoint(自建通道,#228)或appId+encryptedConfig(集团 WebSDK 通道)——两通道行为与优先级见打点底座 · 两种上报通道
这让"后端配置未就绪"场景零特殊处理:组件埋点照写,运行时自动不发,后端给配置后自动开始上报。 - 懒加载 + 容错 —— WebSDK 通道下首次上报触发 SDK 懒加载;SDK 未就绪 / 单事件失败均吞掉(
console.error),不打断业务(fire-and-forget)。自建通道则完全不加载 WebSDK——事件入内存队列批量 flush(sendBeacon优先、fetch keepalive兜底),细节见打点底座 · 两种上报通道。
返回值
| 名称 | 类型 | 说明 |
|---|---|---|
isEnabled | () => boolean | tracker 是否已启用(总开关 + 后端配置都就绪) |
track | (event: WebSdkEvent | (string & {}), payload?: Record<string, unknown>) => void | 上报一个事件(fire-and-forget,未启用时静默 no-op) |
event:预置枚举 + 自定义事件名(双通道语义不同)
event 接受 WebSdkEvent 预置枚举(保留 IDE 补全)或任意自定义字符串,两条上报通道对枚举外名字的行为不同:
- 自建通道(
system/info.tracker.endpoint):自定义事件名透传入库(后端自由建表)——业务事件如login/sign_up/favorite/like直接上报即可。命名规范 snake_case、不与预置枚举同义重复。 - 集团 WebSDK 通道:SDK 只认下表 28 个枚举,枚举外名 dev 期 console.warn 后忽略(prod 静默)——白名单是 SDK 的约束。
SDK 实际支持的 28 个预置事件:
| 分类 | 事件 |
|---|---|
| 页面 / 导航 | navigation、appPageView、appInstall、pageClick、appPageitemExposure、appPageitemClick |
| 推荐 | recommendListView、recommendListClick |
| 内容 | videoEvent、novelEvent、comicEvent |
| 搜索 | keywordSearch、keywordClick |
| 广告(自渲染) | advertising、adImpression、adClick |
| 广告(AdSDK 联动) | adRequest、adFill、adNoFill、adLoadSuccess、adImpressionSdk、adClickSdk、adClose、adError |
| IM | imEvent、imConversationView、imConnectionSuccess、imMessageContent |
payload字段各异、由 SDK 内部按事件 schema 校验,framework 不逐事件细化类型(统一Record<string, unknown>)。
使用示例
// 示例 1:上报页面浏览
const { track } = useTracker()
track('appPageView', { page_key: 'home', page_name: '首页' })
// 示例 2:上报搜索关键词
function onSearch(keyword: string) {
track('keywordSearch', { keyword })
}
// 示例 3:先判断是否启用再做有成本的埋点准备
const { isEnabled, track } = useTracker()
if (isEnabled()) {
const payload = buildExpensivePayload()
track('videoEvent', payload)
}
注意事项
- 不要直接调
window.WebSDK—— 绕过 gate / 降级,配置缺失时会抛错。统一走useTracker().track()。 - 广告埋点不要手拼字段 —— 走
useAdTrack(位级 + 创意级字段自动组装),或直接用SwAd*组件(内置曝光 / 点击埋点)。 - 上报是 fire-and-forget,不返回 Promise;失败只
console.error,不影响业务流程。
相关
useAdTrack—— 广告曝光 / 点击埋点封装(内部调本 composable)- 打点底座 —— 完整事件清单与用法
- Module Options · tracker —— 埋点底座开关配置