Electron 配置与生命周期¶
本文是 Windows 和 macOS Native Bridge 共用的配置说明。首次接入使用 managed 快速开始;模式选择见应用接入。平台宿主初始化、运行时安装和打包仍分别见 Windows和 macOS。
Main 配置¶
managed 在 bootstrap() 的 native.settings 中配置应用和上传参数。external 由原生宿主配置 Native SDK,不传入 native.settings。
native.settings 参数 |
默认值 / 要求 | 说明 |
|---|---|---|
applicationId |
必填 | RUM 应用 ID。 |
datakitUrl |
与 DataWay 二选一 | 本地 DataKit 地址。 |
datawayUrl |
与 DataKit 二选一 | 公网 DataWay 地址。 |
clientToken |
使用 DataWay 时必填 | 数据上报 Token。 |
service |
必填 | 服务名。 |
environment |
必填 | 运行环境。 |
version |
必填 | 应用版本。 |
cachePath |
可选 | 自定义 Native 缓存目录。 |
sessionSamplingRate |
100 |
RUM Session 采样百分比,0~100。(Adapter 0.1.0-alpha.4 起) |
logSamplingRate |
100 |
Log 采样百分比,0~100。(Adapter 0.1.0-alpha.4 起) |
sessionReplaySamplingRate |
100 |
Replay 采样百分比,0~100。(Adapter 0.1.0-alpha.4 起) |
traceSamplingRate |
100 |
Trace 采样百分比,0~100。(Adapter 0.1.0-alpha.4 起) |
loggingEnabled |
false |
是否启用 Log。 |
replayEnabled |
false |
是否启用 Replay。 |
traceEnabled |
false |
是否启用 Trace。 |
debug |
false |
是否启用 Native 诊断输出。 |
traceType |
w3c_traceparent |
Native Trace Header 类型。 |
httpTimeoutMs |
10000 |
上传超时,单位毫秒,范围 1..300000。 |
replayPrivacy |
mask |
支持 allow、mask-user-input、mask。 |
sampleRate |
1 |
旧 0~1 单位,改用 sessionSamplingRate。(已废弃) |
loggingSampleRate |
1 |
旧 0~1 单位,改用 logSamplingRate。(已废弃) |
replaySampleRate |
1 |
旧 0~1 单位,改用 sessionReplaySamplingRate。(已废弃) |
traceSampleRate |
1 |
旧 0~1 单位,改用 traceSamplingRate。(已废弃) |
Windows 可保留 0.1 等小数精度;默认配套的 macOS Native Runtime 使用整数百分比,启用的采集功能使用新版字段传入小数时,Adapter 会报错,不会四舍五入。自定义 macOS Runtime 的小数采样支持取决于其实际能力,普通采样与 Replay 分别检查。旧采样字段自 Adapter 0.1.0-alpha.4 起废弃,仍兼容原有单位及既有 macOS 舍入行为。同一配置同时设置新旧字段时,以新字段为准,包括显式设置 0。
macOS 实际上报的应用版本由应用打包信息决定。traceEnabled 只配置 Native Trace,不会自动为 Renderer 的请求注入 Trace Header。
用户绑定和全局属性通过 Native SDK 的能力统一管理,见 Windows 自定义标签和 Apple SDK 自定义标签。Adapter Client 不提供与 Browser setUser() 对等的公共用户绑定接口;不要通过引用 Adapter 内部模块修改 Native 状态。
Preload¶
只使用 npm 包公开入口:Main 使用 @cloudcare/electron-native-adapter;无业务 Preload 时使用快速开始中的 preload/standalone;已有 Preload 时调用一次安装函数:
const {
installElectronRumPreload,
} = require("@cloudcare/electron-native-adapter/preload/install");
installElectronRumPreload();
保持 contextIsolation: true、nodeIntegration: false 和 sandbox: true。沙箱 Preload 不能直接用普通 Node.js require() 加载 npm 包,需用应用的 bundler 合并上述代码及其依赖,并保留 electron 为外部依赖。例如已安装 esbuild 的项目可执行:
npx esbuild src/preload.cjs --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload.cjs
将 webPreferences.preload 指向产物的绝对路径。独立 Preload 已可直接用于沙箱,不需要重复安装桥接。不要复制 Adapter 源码或直接引用未公开的 internal/、core/、platform/ 文件。
窗口管理¶
每个需要采集的窗口都必须加载 Preload,并在加载页面前登记。autoAttach 默认为 false;设置为 true 会登记已有和后续创建的窗口,适用于所有窗口均可信且需要采集的应用,不能代替 Preload。
只监测指定窗口时,在 bootstrap() 中保持 autoAttach: false,然后登记该窗口:
// client 为 bootstrap() 返回值,window 为已配置 Preload 的 BrowserWindow。
const detach = client.attachWindow(window);
await window.loadFile("index.html");
// 需要提前停止采集时调用 detach() 或 client.detachWindow(window)。
每个窗口单独登记;刷新和导航不需要重复登记。窗口销毁时 Adapter 自动移除登记。包含不可信页面的应用仅为目标窗口加载 Preload,并限制远程页面的导航、弹窗、权限和允许域名。
Renderer¶
managed 和 external 共用快速开始的 Renderer 初始化。每个页面在 Bridge 就绪后初始化 Browser RUM,真实应用 ID、Session、采样和上传仍由 Native SDK 管理。Bridge 已存在不代表数据一定送达,还需检查 Main 传输错误和服务端接收结果。
页面日志¶
先开启 Native 日志能力:managed 设置 loggingEnabled: true;external 按 Windows 宿主或 macOS Logger配置。主进程通过 client.capabilities.log 检查实际能力,仅在启用该能力的页面初始化 Browser Logs;如通过业务 Preload 传递该状态,只暴露布尔值。
安装 @cloudcare/browser-logs(Bridge 接入要求 3.3.6 或更高版本)后,在已完成 RUM Bridge 接入的 Renderer 中使用:
import { datafluxLogs } from "@cloudcare/browser-logs";
datafluxLogs.init({
datakitOrigin: "http://127.0.0.1",
sessionSampleRate: 100,
forwardErrorsToLogs: true,
forwardConsoleLogs: ["error", "warn"],
});
Browser 保持 100%,实际日志采样由 Native 控制。关闭 Native 日志能力时,不要仍在页面独立初始化 Logs 作为备用上传路径。
Session Replay¶
Replay 默认关闭,必须同时满足 Native SDK 配置、对应组件和 Bridge 实际能力要求。先完成 Windows 可选 Replay 运行时或 macOS Replay 配置,再在 datafluxRum.init() 后检查能力:
const capabilities = JSON.parse(
window.FTWebViewJavascriptBridge.getCapabilities(),
);
if (capabilities.includes("records")) {
datafluxRum.startSessionReplayRecording();
}
records 表示 Native 提供回放能力,不代表当前 Session 必然命中采样。不要照搬 Browser 独立录制流程强制开启 Replay。主进程也可检查 client.capabilities.replay;组件缺失、关闭与开启后的验证按平台说明执行。
生命周期与诊断¶
bootstrap() 返回 Client,提供 capabilities、attachWindow()、detachWindow()、updateWindow()、transportState 和幂等的 stop()。通过 onError 接收异步传输和窗口处理错误,transportState 用于检查可写状态、背压和传输失败。
| 模式 | client.stop() 的效果 |
|---|---|
| managed | 停止窗口采集,关闭 Adapter 初始化的 Native SDK;Windows 同时关闭 Bridge EXE |
| external | 断开 Electron 连接,原生宿主 SDK 继续运行;宿主仍负责自己的退出清理 |
正常退出时必须等待 stop(),完整异步退出处理见快速开始 Main 示例。停止采集不是“全部离线数据已经上传”的确认。Windows 连接超时、Bridge 输出和启动 Action 等参数见平台配置。macOS 不提供 Windows 的自动启动 Action;混合模式的回放窗口可见性边界见 macOS Replay。