用户体验监控 Electron SDK 通过 npm 安装,采用 main + renderer 两步接入。只需安装一个包,renderer 所需的 Web SDK 已内置。
前提条件
Electron
>=23。项目使用 main / renderer 分进程结构,且能分别构建两端入口文件。
若使用 TypeScript,建议开启
esModuleInterop。安装
npm install tdem-electron-sdk --save
注意:
包名统一为
tdem-electron-sdk,不带 @tencent 前缀。依赖
tdem-node-sdk 会随包自动安装,不要单独在业务里安装或 init 它。只需安装这一个包:renderer 需要的 Web SDK 已内置,无需应用安装或声明。
两个进程入口
SDK 只公开两个子路径入口,请按进程分别引入:
入口 | 进程 | 典型文件 |
tdem-electron-sdk/main | 主进程 | main.ts / index.ts(主入口) |
tdem-electron-sdk/renderer | 渲染进程 | 渲染层入口(如 renderer.ts) |
// 主进程import { init } from 'tdem-electron-sdk/main';// 渲染进程import { init } from 'tdem-electron-sdk/renderer';
注意:
两端不要混用入口。在主进程引入
tdem-electron-sdk/renderer(或反之)会导致 bootstrap 获取失败、SDK 拒绝初始化。初始化时序(关键约束)
必须在创建任何
BrowserWindow 或自定义 Session 之前完成 main 初始化:1. main 进程启动,调用
init()。2. SDK 注入内置 preload 并注册 IPC 代理。
3. 之后才创建
BrowserWindow。4. renderer 加载后调用
init()。// main.ts —— 先初始化,再建窗口import { app, BrowserWindow } from 'electron';import { init } from 'tdem-electron-sdk/main';const tdem = init({id: 'project-id',url: 'https://dem.rumt-zh.com',});app.whenReady().then(() => {const window = new BrowserWindow({webPreferences: {contextIsolation: true,nodeIntegration: false,},});// ...});
注意:
顺序颠倒会导致 SDK 的自带 preload 未注入到已存在的 Session 上,renderer 侧
init() 会直接拒绝(不会降级为浏览器直传)。renderer 侧入口的初始化方式与 main 不同:
init() 返回 Promise,必须 await 取得 client 后再调用其方法;id / url / version 由 main 侧提供,renderer 不要重复传入。可选配置(如会话回放采样率)与完整参数说明见 SDK 初始化-操作步骤:// renderer.ts —— 渲染进程入口import { init } from 'tdem-electron-sdk/renderer';const tdem = await init();
preload 注入机制
SDK 的自动注入依赖 Electron 23及以上版本,并按版本走两条实现路径:
Electron 35+:调用
session.registerPreloadScript() 注册 SDK 自带的 preload.cjs。Electron 23 - 34:调用
session.getPreloads() 读取现有脚本列表,再用 setPreloads() 把 SDK preload 插到最前,从而保留业务已有的 preload。同时监听
app 的 session-created 事件,对后续创建的自定义 partition 一并注入;若初始化时 app 已 ready,则立即补注入。因此:不要在
new BrowserWindow() 里配置 TDEM 的 preload 路径,SDK 已自动接管。业务自己的
webPreferences.preload 原样保留,Electron 会先执行 Session preload、再执行它,SDK 不会覆盖。若业务自行调用
session.setPreloads() 覆盖完整列表,可能把 SDK preload 挤掉;此时 renderer 侧 init() 会直接拒绝(不会降级为浏览器直传),请改用追加方式或确保顺序。上报域名
请根据项目所在地域选择对应的上报域名。不同站点的数据相互隔离,跨站填写会导致数据无法入库。
站点 | 上报域名 |
国内站 | https://dem.rumt-zh.com |
新加坡站 | https://dem.rumt-sg.com |
美国站 | https://dem.rumt-us.com |
接入时填写站点根地址即可,无需拼接路径,SDK 会自行拼接具体协议端点。
打包注意事项
若启用了 Node 子进程注入(把 sidecar / CLI 纳入同一 TDEM 会话,
nodeInjection: true,默认关闭,详见 SDK 初始化-Node 子进程注入),打包时必须把 Node SDK 留在 asar 外,否则预加载无法解析真实文件。以 electron-builder 为例:{"asarUnpack": ["**/node_modules/tdem-node-sdk/**"]}