DatadogConfiguration 与 DatadogRumConfiguration 传入。
采样率
远程配置
flashcat_flutter_plugin 0.2.0 起,会话采样率可以在控制台 应用管理 → 远程配置 页签在线调整,无需改代码、重新发版。该功能默认关闭,需要在初始化时开启:
- 控制台发布的采样率对下一个新会话生效,进行中的会话不受影响。
- 下发的值会持久化到本地,冷启动后的第一个会话即按上次下发的采样率抽样。
- 请求失败、超时或响应无法识别时,沿用已生效的值,不会清空;控制台停用远程配置后,恢复使用初始化时的
sessionSamplingRate。 - Flutter SDK 只读取会话采样率与自定义配置项两项,其余配置项不生效。自定义配置项可通过
getRemoteConfig()读取,未开启远程配置或尚未拿到配置时返回null:
beforeSampling 回调干预:每次新建会话时,它收到即将生效的采样率(sessionSampleRate)与控制台的自定义配置项(custom),返回新的采样率即可覆盖,返回 null 表示不干预。回调同步执行,需保持轻量;返回 0–100 以外的值、抛出异常或执行超时,都会沿用原生 SDK 的判定。未开启远程配置时回调同样会执行,此时 sessionSampleRate 是本地设置的值,custom 为 null。
DatadogSdk.instance.rum?.setForcedSession():若当前会话未被采中,会立即结束并开启一个采集的新会话,此后直到进程结束的会话一律采集;该设置无法撤销,重启 App 后恢复。
如果 Flutter 是挂接到一个已经初始化过的原生 SDK 上(add-to-app 场景),
remoteConfigurationEnabled 与 beforeSampling 必须由原生侧在初始化 RUM 时配置,见 iOS SDK 高级配置 与 Android SDK 高级配置;getRemoteConfig() 与 setForcedSession() 仍可在 Dart 侧调用。隐私同意
TrackingConsent 控制是否采集与上报数据,适配 GDPR 等合规要求:
事件过滤与脱敏
事件映射器在事件上报前执行,返回null 丢弃事件,或修改后返回。可用于脱敏敏感字段、去除噪声、重命名视图。
分布式追踪
对firstPartyHosts 命中的域名,SDK 会注入 W3C traceparent,实现前端 RUM 与后端 APM 的链路关联。追踪需要配合网络采集(enableHttpTracking())。
自定义上报地址
私有化部署时,通过customEndpoint 覆盖默认上报地址:
WebView 追踪
Flutter 页面内嵌 WebView 时,可通过flashcat_webview_tracking 把 WebView 中的 Browser RUM 事件关联到当前原生 RUM 会话。
pubspec.yaml
trackDatadogEvents 的是允许关联的主机名列表。主机名会匹配其子域名,但不支持通配符。WebView 加载的页面必须已经接入 Flashduty Browser SDK;Android 还必须启用 JavaScriptMode.unrestricted,否则无法建立关联。
符号文件上传
要把崩溃与错误堆栈还原到源码位置,需要上传符号文件。Flutter 应用可能同时包含 Dart 与原生帧:
使用 FlashCat CLI 上传符号文件:
符号文件与崩溃事件是通过构建产物的 build ID 关联的,
service 与 release-version 不参与匹配。因此二者与 SDK 初始化值不一致时,符号解析依然正常,只影响控制台「源码映射」列表中的归类与筛选。建议仍保持一致——尤其注意 Flutter 的构建号后缀(如 1.2.3+45)容易造成两边不一致。真正必须对上的是 build ID:--split-debug-info 产出的 app.<platform>-<arch>.symbols、APK 内 libapp.so、以及控制台「源码映射 → Flutter」列表中的 Build ID 三者必须相同。每次改动 Dart 代码都会生成新的 build ID,所以符号上传必须纳入每一次发布构建,否则该版本的堆栈会静默退化为不解析。