帮你快速理解、总结文档立即下载

数据上报验证

最近更新时间:2026-10-28 11:59:31
本文档已由 AI 辅助审校
我的收藏
本文介绍接入用户体验监控 React Native SDK 后,如何验证各监控能力的数据上报是否成功。

前提条件

已完成 SDK 集成 与 SDK 初始化,并在用户授权后启动 SDK。
控制台查看的应用、站点地域、运行环境(env,默认筛选 production)与客户端实际配置一致。
采集开关说明:JS 侧默认开启 onError(spa、api、behavior 需显式开启);原生侧默认开启 crash、replay、struggle。
验证期采样建议:建议在接入验证期间将控制台应用采样率与回放采样率临时调为100%,并在初始化时开启 debug: true,方便观察上报日志;验证完成后再按生产需求调整。

步骤1:检查上报请求

理解上报链路

React Native SDK 的 JS 层事件不直接从 JS 发起 Collector HTTP 请求,而是通过 TDEMRn 原生桥交由 Android / iOS 原生 SDK 统一发送:
JS (onError / spa / api / behavior) -> TDEMRn Native Bridge -> Android / iOS Native SDK -> Collector
因此,在 React Native 调试器的 Network 面板中看不到采集请求属于正常现象。请通过原生控制台日志(Android Logcat / iOS Xcode Console)或原生网络抓包确认下列请求:
端点
内容
POST {url}/api/v1/config
拉取远程配置,仅当返回允许采集且采样命中时才挂载 JS 监控插件。
POST {url}/api/v1/collect/events
上报标准事件(JS 错误、原生崩溃、接口测速、路由 PV、行为、挣扎、自定义事件等)。
POST {url}/api/v1/collect/replay
上报 Session Replay 原生录屏分段数据(需远程配置启用且回放采样命中)。
{url} 为初始化时填写的站点根地址(如国内站 https://dem.rumt-zh.com)。两端判定成功的标准不同:
Android 只要 HTTP 状态码在 200–299 即视为成功,不解析响应体里的 code,因此无 body 的204算成功。
iOS 在 2xx 之后还要求响应体能解析成 JSON,且整数 code 为0,空 body 的204不会被当成成功。

自检运行状态与主动上报

在已初始化的 tdem 实例上执行以下诊断代码,可快速检查原生桥状态、远程配置回调及基础主动上报接口。
console.log('nativeInitialized', tdem.isNativeStarted());
console.log('remoteConfig', tdem.getRemoteConfig());
console.log('canCollect', tdem.canCollect());
tdem.getSessionId()
.then(sessionId => console.log('sessionId', sessionId))
.catch(error => console.warn('session unavailable', error));

tdem.track('integration_check', {tags: {source: 'rn-integration'}});
tdem.measure('integration_duration', 120);
tdem.captureMessage('RN integration check', 'info');
tdem.captureException(new Error('RN integration check'));
说明:
若 tdem.canCollect() 为 false,请先检查 /api/v1/config 返回的 enabled 与采样率配置,不要循环重新创建实例或阻塞业务页面渲染。
双端都可能以 E_NOT_STARTED 拒绝 getSessionId():
Android 仅在原生实例不存在时拒绝(实例已在但会话号为空仍会成功返回空字符串)。
iOS 在当前会话号长度为0时拒绝。请捕获异常并在初始化完成后再查询。

步骤2:验证各监控能力

监控能力
验证操作
预期结果与核对方式
JS 错误与 Promise 异常
在测试按钮中触发未捕获的 JS 异常(如 setTimeout(() => { throw new Error('verify js error'); }, 0))、未处理的 Promise.reject(new Error('verify promise')),并调用 tdem.captureException(new Error('verify captured'))
在 异常分析 页面可查到 js_error 与 promise_error。captureException 同样以 js_error 入库(mechanism_type: 'manual',mechanism_handled: 1),exception_frames 来自 JS Error.stack,不再走原生 crash 通道。验证全局捕获与 Hermes SourceMap 还原时,仍建议再触发一次未捕获的 JS / Promise 异常。
接口测速(api)
开启 api: true 后发起正常的 fetch / XHR 请求与一次可控失败请求
在 API 监控 页面可查到请求的 URL、HTTP 状态码、耗时及业务返回码状态
路由与用户行为
开启 spa: true、behavior: true 并包裹 tdem.wrap(App),依次切换页面、点击按钮、滑动列表并编辑非敏感输入框(验证过程中请保持应用在前台)
在 会话分析 / 用户旅程中,page_view 顺序与路由一致;若中途将应用切到后台,时间轴会插入 _background_,回到前台时还会重报离开前的页面。click / scroll / long_press 携带真实界面文案(target_text),表单事件仅记录长度分桶、无输入明文。
原生崩溃
在测试包中触发一次原生测试异常
崩溃事件在下次启动应用时完成补传;在 问题追踪 页面切换对应系统(Android / iOS)可查到崩溃记录。
会话回放与挣扎检测
确认 replay: true、struggle: true 且命中采样,在应用内完成页面跳转、点击与滚动,或调用 tdem.trackStruggle('verify_struggle', {severity: 'high'})(或同一按钮 1 秒内连点 5 次触发 rage_click)
在 会话分析 中打开对应会话的回放播放器,视频分段可正常播放,画面操作时间点与右侧事件时间轴对齐,且可在时间轴或挣扎分析中查到对应挣扎事件。
注意:
验证崩溃的代码仅限在开发测试环境中使用,验证完成后请及时移除,切勿带入生产发版流程。连接 Xcode 或 Android Studio 调试器时,调试器可能优先拦截崩溃信号,建议断开调试器后冷启动触发并再次启动应用完成上报。

步骤3:验证符号还原

将与当前测试安装包同一次构建产出的符号文件,在 配置与管理→ 符号表文件上传登记:
JS Sourcemap:上传 Hermes 组合 SourceMap(.map)。AppVersion 须与初始化 version 完全一致;Minified URL 须与异常堆栈帧 abs_path(去掉 ? 与 # 后)一致。Android 与 iOS 若归一化 Bundle 地址相同,请使用不同版本号(如 1.0.0-android / 1.0.0-ios)避免互相覆盖。
Android / iOS 原生符号:按页签分别上传 mapping.txt、未 strip 的 .so 或 .dSYM 内 DWARF 文件,并按控制台提示填写身份字段。
符号登记仅对上传完成后新上报的异常生效。请在登记成功后新触发一次未捕获异常,打开新事件详情确认源码文件名、函数名与行号。

步骤4:查看日志与控制台排查

JS 调试日志:初始化开启 debug: true 后,可在 Metro / React Native 控制台按 [TDEM-ReactNative] 过滤查看插件挂载状态(plugin patch / plugin skip)与事件转发日志。
Android 原生日志:在终端执行 adb logcat -s TDEM-Android:D TDEM-ReactNative:I 查看原生配置拉取、桥接调用、事件批次上报与回放分片日志。
iOS 原生日志:初始化需开启 debug: true(原生 debugEnabled)后才会 NSLog。在 Xcode 的 Console(或打开 macOS「控制台」App 选择对应的 iOS 真机或模拟器)中按 [TDEM] 过滤,事件上报成功时会出现 [TDEM][transport] delivery_batch_acknowledged 和 [TDEM][transport] delivery_event_acknowledged。
控制台多端与环境筛选:登录控制台进入对应的 React Native 应用,确认顶部筛选的环境(env)、时间范围与测试一致;查看原生崩溃时请切换 Android / iOS 系统标签。若仍未查到数据,请核对远程配置与采样(canCollect())、本地采集开关,以及控制台环境 / 时间范围 / 操作系统筛选。

版本说明

本文按当前 tdem-rn-sdk(Android 原生依赖 com.tencent.tdem:tdem:0.1.25)说明符号准备与验证方法。请按 步骤 3 上传与测试安装包同一次构建的 JS Sourcemap 及 Android / iOS 原生符号,并在登记成功后新触发异常核对还原结果。