接入概览
选哪个 SDK、密钥放在哪、怎么标识一个人、渠道参数怎么带。
选哪种接入方式
| 场景 | 用 | 说明 |
|---|---|---|
| 网页、单页应用 | Web SDK | 自动发页面浏览、全埋点、热力图坐标;按需加载回放 |
| Go 服务端 | Go SDK | 下单、支付、任务完成这类服务端事件 |
| Java 服务端 | Java SDK | 与 Go 同一套语义 |
| App、小程序、其它语言 | HTTP 协议 | 官方不维护移动端 SDK,按协议直接 POST /sa |
| 邮件打开、不能跑脚本的地方 | 像素 | GET /sa.gif,永远返回一张 1×1 透明图 |
同一个项目可以同时用几种方式:网页用 Web SDK 记浏览和点击,服务端用 Go SDK 记支付成功,都进同一张事件表,漏斗可以跨端串起来。
上报地址与写入密钥
所有 SDK 都只要两个参数:
js
evstats.init({
endpoint: "https://stats.example.com/sa", // 完整的采集地址,SDK 原样请求
key: "evs_wk_xxx" // 项目的写入密钥
})endpoint是完整 URL,包含/sa。SDK 不会再拼路径;其它地址(/sdk/config、/replay)由它换路径得到。key是项目的写入密钥,在「系统 → 项目 → 接入」页签里。它出现在网页源码里是正常的:只能给这个项目写事件,不能读数据。- 密钥轮换后旧密钥立即失效(
40101),记得同时更新各端的配置。 - 采集的跨域规则(CORS)按项目的
allow_origins:留空时允许所有来源,填了就只允许列出的来源。
身份
每条事件有两个身份字段:
| 字段 | 从哪来 |
|---|---|
anonymousId | Web SDK 在浏览器里生成,存在 localStorage 的 evstats_anonymous_id;服务端 SDK 由调用方给出(DistinctID) |
userId | 登录后调用 identify("user_42") 之后,新事件都带上它 |
入库时算出 distinct_id:有 userId 时用 userId,否则用 anonymousId。UV、漏斗、留存都按 distinct_id 去重。
匿名和登录不会自动合并
同一个人登录前的浏览(匿名 ID)和登录后的行为(用户 ID)在统计里是两个 distinct_id。identify 会带上当时的匿名 ID 并存下来,但本期查询不合并。退出登录时调用 reset(),换一个新的匿名 ID。
服务端没有浏览器匿名 ID,调用方必须给一个稳定的 DistinctID,通常就是用户 ID。
渠道参数
Web SDK 自动从地址栏读取:
| 参数 | 去向 |
|---|---|
utm_source、utm_medium、utm_campaign、utm_term、utm_content | 进独立的列,报表「渠道」按它们分组;同一次浏览会话内沿用 |
gclid、fbclid、ttclid、msclkid | 广告平台的点击编号,原名放进 properties,归因时优先级最高 |
来源网站取自 document.referrer;本站之间的跳转不算外部来源。服务端 SDK 不读地址栏,需要时自己把这些值放进属性。
字段沿用行业标准
批量上报的外壳沿用 Segment HTTP API(batch、messageId、anonymousId、userId、timestamp、properties、context),预置事件和属性沿用神策的名字($pageview、$WebClick、$utm_source、$element_content……)。已经按这两套习惯埋过点的,改上报地址和密钥即可。完整字段见 HTTP 协议,事件与属性见 事件与属性。
装好之后
打开项目的「接入」页签,接入检查 会告诉你收到了什么、谁发的、丢了多少、为什么。
evstats
