Skip to main content
本文介绍 React Native SDK 的进阶配置项。所有配置都通过 DdSdkReactNativeConfiguration 实例的属性设置,在 DdSdkReactNative.initialize(config) 之前完成。

采样率

隐私同意

TrackingConsent 控制是否采集与上报数据,适配 GDPR 等合规要求:

事件过滤与脱敏

事件映射器在事件上报前执行,返回 null 丢弃事件,或修改后返回。可用于脱敏敏感字段、去除噪声。

分布式追踪

firstPartyHosts 命中的域名(含子域名),SDK 会在 XHR / fetch 请求上注入追踪头,实现前端 RUM 与后端 APM 的链路关联。默认同时注入 W3C traceparent 与 Datadog 格式头;可以按域名指定 propagatorTypes

自定义上报地址

私有化部署时,通过 customEndpoints 分别覆盖 RUM、Logs 的上报地址:
每个地址都是最终的 intake URL,不是仅包含协议和域名的基础地址。rum 必须包含 /api/v2/rum;如果部署在路径前缀下,还需要保留该前缀,例如 https://example.com/flashduty/api/v2/rum。公有云无需设置,保持 config.site = 'CN' 即可。

WebView 追踪

应用内嵌 WebView 时,用 @flashcatcloud/mobile-react-native-webview 导出的 WebView 替换 react-native-webview,即可把 WebView 中的 Browser RUM 事件关联到当前原生 RUM 会话。
allowedHosts 是允许关联的主机名列表,会匹配其子域名。WebView 加载的页面必须已经接入 Flashduty Browser SDK。该组件完整兼容 react-native-webview 的属性。

Source map 上传

release 包的 JS 堆栈是压缩过的,需要上传 source map 才能在控制台还原到源码文件与行号。服务端按 service + 版本号 + bundle 文件名 匹配 source map,因此上传时使用的 service 与版本必须和 SDK 上报的一致。
SDK 上报的版本号默认取应用的版本(Android versionName、iOS CFBundleShortVersionString),也可以通过 config.version 覆盖;覆盖后上传时必须使用同一个值。Metro 的 debug ID 插件不是必需的。
android/app/build.gradle 中引入随包下发的 Gradle 脚本。它会挂在 release 打包任务之后,bundle 生成后自动调用 FlashCat CLI 上传 source map。
android/app/build.gradle
构建时通过环境变量提供有 source map 上传权限的 API key:
上传行为(0.1.1 起):
0.1.0 在缺少 FLASHCAT_API_KEY 时会让 assembleRelease 整体失败,APK 停留在旧版本。请升级到 0.1.1 或更高版本。
上传的 bundle 文件名必须与 app 运行时实际加载的文件名一致(默认 Android 为 index.android.bundle、iOS 为 main.jsbundle)。符号化按文件名匹配堆栈帧:如果在 CI 里通过 --bundle-output 把产物改名后再上传,线上堆栈里的文件名与之对不上,source map 将永远不会命中。iOS 与 Android 即使 bundle 同名也会按平台分开存储,互不覆盖。
每次改动 JS 代码都会生成新的 bundle,source map 上传必须纳入每一次发布构建,否则该版本的堆栈会保持压缩状态。原生崩溃走另一套符号文件,见下一节。

原生崩溃符号化

RN 应用的崩溃分两类,用的符号文件也是两套:JS 异常靠 source map(上一节);原生崩溃由底层的 Android / iOS SDK 采集,靠 mapping 文件与 dSYM 还原

前提:开启原生崩溃采集

nativeCrashReportEnabled 默认为 false。不开启时,原生崩溃既不会上报也不会有任何提示——控制台里看不到任何记录,和”没发生过”完全一样。 构造函数的第 4~6 个位置参数是 trackInteractions / trackResources / trackErrors不是这个开关,必须单独赋值:

需要上传什么

RN 模板默认不开启混淆(enableProguardInReleaseBuilds = false),此时 release 包的 Java 堆栈本身就是可读的类名与方法名,不上传 mapping 也能定位。一旦在 android/app/build.gradle 中开启混淆,堆栈会变成 MainActivity.o0(SourceFile:5) 这样的短名,必须上传 mapping 文件才能还原。上传方式与 Android SDK 完全一致——引入 Flashcat Android Gradle 插件,随 release 构建自动上传:
android/app/build.gradle
含 NDK 原生代码时,同一插件会一并上传 NDK 符号文件。详见 源码映射
双端要各传各的符号文件。 符号文件按 service 匹配,而不设置 serviceName 时 Android 取 applicationId、iOS 取 bundle identifier——同一个 App 在控制台是两个 service,Android 的 mapping 不会用于 iOS 的崩溃,反之亦然。建议显式设置 serviceName 让双端一致,并在两端的发布流程里各自上传。

其他配置