能力对齐
Flutter 上报 build、raster、vsync、首次渲染与慢帧数据。LCP、CLS 等浏览器专属指标不会在
Flutter 应用中生成。
环境要求
- Flutter 3.35 或更高版本;
- Dart 3.9 或更高版本;
- 使用默认持久化身份存储时,需要 Android 24+ 或 iOS 13+。
安装与初始化
1
添加依赖
pubspec.yaml 后运行 flutter pub get。2
在 runApp 前初始化
RumApp 提供回放边界、自动 Tap 采集与交互挫败检测。只有当前会话命中回放采样,
或手动开始录制时,SDK 才会采集屏幕回放。3
验证第一个会话
打开 RUM → 概览,选择包含当前时间的时间范围,确认
checkout-mobile 已出现。
再打开 会话,检查页面 Action 与设备上下文。site 可以是 MoleSignal Origin、/api 基础地址或 /api/v1 基础地址。SDK 会自动规范化地址,
并将数据发送到 /api/v1/rum。
采集页面与渲染性能
RumNavigationObserver 会记录当前可见的具名路由。使用 Router 或 go_router 时,将观察器
传给对应路由集成。路由没有稳定名称,或应用不通过 Navigator 管理页面时,调用 startView:
flutter_time_to_first_render,并携带 build、raster 与 vsync
耗时。超过 longFrameThreshold 的帧会生成慢帧 Action。
识别用户并记录应用活动
FlutterError.onError 与 PlatformDispatcher.onError 处理器。
额外 isolate 中的错误需要转发到主 isolate,再调用 addError。退出登录后可以调用
clearUser(),避免后续活动继续关联已登录用户。
自动 Tap 使用隐私安全的名称。用 RumUserAction 包裹关键控件,可以添加稳定的业务名称,
同时不会抢占 Flutter Gesture Arena:
trackUserInteractions: true 采集 Tap,再通过 trackFrustrations 控制 Rage Tap 与经过
画面变化验证的 Dead Tap。默认情况下,挫败检测跟随 trackUserInteractions。
监控 HTTP 资源并关联后端链路
使用MoleSignalHttpClient 包装 package:http:
如果应用尚未使用 package:http,请在应用中直接声明 http: ^1.6.0 依赖。
traceparent、Server-Timing 中的 traceparent,
最后是请求 traceparent。
只信任指定服务时,限制读取 Trace Header 的 URL:
addResource:
上传 Release Symbols
通过不可变的发布流水线变量设置version、architecture 与 debugId。同一构建产生的所有
调试产物都必须使用相同标识。运行时检测值与自动派生值适合开发环境,但不能作为稳定的生产
符号化标识。
构建 Android 与 iOS Release 时启用 --obfuscate 和 --split-debug-info。上传每个生成的
.symbols 文件,并使用 kind=flutter_symbols、匹配的 android 或 ios 平台、规范化架构
与 Debug ID。转发原生 Crash Frame 时,还要分别上传 Android ELF Symbols 与 Apple dSYM
内的 DWARF 文件。
调试产物上传需要具备 streams.configure 的管理 Token。不得使用应用绑定的 msrum_
Client Token 管理调试产物。
Source Maps 与 Symbols
生成、上传、匹配并验证 Flutter、Android、iOS 与 Web 调试产物。
启用会话回放
Flutter 没有 DOM。首次采集的画面会转换为 rrwebMeta 与 FullSnapshot 事件;后续变化的
画面会转换为增量图片 Mutation,未变化画面不会重复上传。因此现有 MoleSignal 回放播放器可以
沿用同一流程呈现浏览器与 Flutter 会话。
sessionReplaySampleRate 只作用于已经被 sessionSampleRate 选中的会话,两者相乘得到实际回放
覆盖率。手动录制同样只作用于已选中的会话。回放使用独立队列,默认每 10 秒刷新,每个会话使用
独立递增序号,目标分段约为 1 MiB,单次请求上限为 8 MiB。
保护回放内容
默认的RumPrivacyLevel.mask 会在 PNG 编码前遮住 Text、RichText 与可编辑区域。
Input 在 allow 模式下也始终保持遮罩。SDK 还会默认移除 URL Query 与 Fragment、递归脱敏
常见敏感上下文字段,并且不上传 Raw Error Stack。敏感图片、地图、自绘内容、Platform View
或完整组件需要放入显式隐私边界:
RumReplayMask 与 RumReplayBlock 都会在采集画面中将对应区域替换为不透明色块。
未遮罩的原始像素不会进入事件队列。
主要配置
RumSessionReplayConfiguration 的默认值为每 5 秒采集、Action 后采集、每个逻辑像素输出 0.5
个像素、图片最长边 900 像素,并使用 #6B7280 作为遮罩颜色。
还可配置 excludedUrls、allowedTracingUrls、maxQueueSize、会话超时、诊断回调、
自定义 Transport 与持久化。trackLongFrames 是 trackLongTasks 的兼容别名。
刷新与停止
受控跳转前需要等待队列上报时,调用flush()。应用最终清理时调用 stop(),移除监测并刷新
普通事件与回放队列。
Browser RUM SDK
对比 Browser SDK 接入方式与浏览器专属监测能力。
RUM 概览
查看 Web 与 App 共用的数据模型和排障流程。
Source Maps 与 Symbols
还原 Flutter、Android、iOS 与 Web Release 堆栈。