Skip to main content
MoleSignal Flutter App RUM SDK 与 Browser RUM SDK 使用同一套会话、Action、错误、资源和回放 写入契约。Flutter 原生监测让移动端沿用相同的排障流程,同时避免伪造浏览器专属指标。

能力对齐

Flutter 上报 build、raster、vsync、首次渲染与慢帧数据。LCP、CLS 等浏览器专属指标不会在 Flutter 应用中生成。

环境要求

  • Flutter 3.35 或更高版本;
  • Dart 3.9 或更高版本;
  • 使用默认持久化身份存储时,需要 Android 24+ 或 iOS 13+。

安装与初始化

clientToken 会随 App 下发,必须视为公开凭证。请使用数据源接入向导生成的应用绑定 msrum_ Client Token。
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 会记录当前可见的具名路由。使用 Routergo_router 时,将观察器 传给对应路由集成。路由没有稳定名称,或应用不通过 Navigator 管理页面时,调用 startView
每个 View 的首个渲染帧会生成 flutter_time_to_first_render,并携带 build、raster 与 vsync 耗时。超过 longFrameThreshold 的帧会生成慢帧 Action。

识别用户并记录应用活动

SDK 会链式调用已有的 FlutterError.onErrorPlatformDispatcher.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 依赖。
该包装器会采集脱敏 URL、Method、耗时、状态码、响应大小与可用的 W3C Trace 标识。 Trace Context 的读取顺序为:响应 traceparentServer-Timing 中的 traceparent, 最后是请求 traceparent 只信任指定服务时,限制读取 Trace Header 的 URL:
SDK 不会全局拦截网络。使用 Dio 或自定义客户端时,从 Interceptor 调用 addResource

上传 Release Symbols

通过不可变的发布流水线变量设置 versionarchitecturedebugId。同一构建产生的所有 调试产物都必须使用相同标识。运行时检测值与自动派生值适合开发环境,但不能作为稳定的生产 符号化标识。 构建 Android 与 iOS Release 时启用 --obfuscate--split-debug-info。上传每个生成的 .symbols 文件,并使用 kind=flutter_symbols、匹配的 androidios 平台、规范化架构 与 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。首次采集的画面会转换为 rrweb MetaFullSnapshot 事件;后续变化的 画面会转换为增量图片 Mutation,未变化画面不会重复上传。因此现有 MoleSignal 回放播放器可以 沿用同一流程呈现浏览器与 Flutter 会话。
sessionReplaySampleRate 只作用于已经被 sessionSampleRate 选中的会话,两者相乘得到实际回放 覆盖率。手动录制同样只作用于已选中的会话。回放使用独立队列,默认每 10 秒刷新,每个会话使用 独立递增序号,目标分段约为 1 MiB,单次请求上限为 8 MiB。

保护回放内容

默认的 RumPrivacyLevel.mask 会在 PNG 编码前遮住 TextRichText 与可编辑区域。 Input 在 allow 模式下也始终保持遮罩。SDK 还会默认移除 URL Query 与 Fragment、递归脱敏 常见敏感上下文字段,并且不上传 Raw Error Stack。敏感图片、地图、自绘内容、Platform View 或完整组件需要放入显式隐私边界:
RumReplayMaskRumReplayBlock 都会在采集画面中将对应区域替换为不透明色块。 未遮罩的原始像素不会进入事件队列。
SDK 无法从 Widget 类型识别 CustomPainter 绘制的文字,必须显式包裹自绘区域。 Platform View 的采集结果取决于平台合成方式,请在 Android 与 iOS 真机上验证敏感内容。

主要配置

RumSessionReplayConfiguration 的默认值为每 5 秒采集、Action 后采集、每个逻辑像素输出 0.5 个像素、图片最长边 900 像素,并使用 #6B7280 作为遮罩颜色。 还可配置 excludedUrlsallowedTracingUrlsmaxQueueSize、会话超时、诊断回调、 自定义 Transport 与持久化。trackLongFramestrackLongTasks 的兼容别名。

刷新与停止

受控跳转前需要等待队列上报时,调用 flush()。应用最终清理时调用 stop(),移除监测并刷新 普通事件与回放队列。

Browser RUM SDK

对比 Browser SDK 接入方式与浏览器专属监测能力。

RUM 概览

查看 Web 与 App 共用的数据模型和排障流程。

Source Maps 与 Symbols

还原 Flutter、Android、iOS 与 Web Release 堆栈。
最后修改于 2026年8月5日