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

SDK 初始化

最近更新时间:2026-10-28 11:59:31
本文档已由 AI 辅助审校
我的收藏
本文将为您介绍如何初始化用户体验监控 React Native SDK、配置采集开关以及接入页面路由监控。开始前请先完成 SDK 集成。

操作步骤

步骤1:创建独立的初始化模块并置顶引入

启用用户行为采集(behavior)时,必须在业务代码引入并绑定 ScrollView、FlatList、SectionList、TextInput 之前执行 new TDEM(config),确保宿主组件包装生效。建议新建独立的 src/tdem.ts 模块,并在入口文件第一行引入。
// src/tdem.ts:请在用户同意隐私政策后加载并创建全局复用的 SDK 实例
import TDEM from 'tdem-rn-sdk';
import {Platform} from 'react-native';

export const tdem = new TDEM({
id: 'YOUR_APP_ID',
url: 'https://dem.rumt-zh.com',
env: 'production',
version: Platform.OS === 'ios' ? '1.0.0-ios' : '1.0.0-android',
debug: false,
onError: true,
spa: true,
api: true,
behavior: true,
crash: true,
replay: true,
struggle: true,
});
在入口文件第一行引入该模块:
// index.js 或 App.tsx:必须写在其他业务组件 import 之前
import './src/tdem';
注意:
spa、api、behavior 为 JS 侧采集开关,默认关闭,为便于验证数据上报,本示例将其设置为 true。onError 同属 JS 侧,默认开启,详见 JS 侧采集配置 。crash、replay、struggle 为原生侧采集开关,默认开启,详见 原生侧采集配置。完整默认值见 完整配置项说明。
id 与 url 为必填项。请将 YOUR_APP_ID 替换为控制台创建应用后分配的项目标识(project_key), url 替换为应用所属站点对应的上报域名,详见 上报域名。缺失 id 或 url 时请勿初始化 SDK。
version 请传入字符串(string)并与符号表上传时的版本号保持一致。由于 Android 与 iOS 的 Hermes SourceMap 在归一化 Bundle 地址相同时可能共享制品键,建议为双端设置不同后缀(如 '1.0.0-android' 与 '1.0.0-ios'),避免互相覆盖。
远程配置与采样闸门:原生层启动后会请求 POST {url}/api/v1/config 拉取远程配置,并向 JS 层回传 { enabled, started, tdemSampleRate, replaySampleRate }。仅当 started === true(远端启用、会话采样命中且原生运行时已启动)且对应本地开关开启时,JS 采集插件才会挂载。tdem.isNativeStarted() 仅表示原生初始化回调已执行,不能替代 tdem.canCollect()。
切勿把真实项目标识、云 API 密钥或内部测试环境地址提交进公开代码仓库。

步骤2:在获得用户隐私授权后初始化

SDK 在初始化过程中可能采集设备与用户信息,请在用户同意个人信息保护规则后再加载初始化模块或创建 TDEM 实例。

步骤3:全局复用同一实例并包裹根组件

导出 tdem 单例供全局调用,并使用 tdem.wrap(App) 包裹业务根组件以挂载全屏触摸采集边界。路由场景的完整示例见 路由接入(React Navigation)。

上报域名

请根据应用在控制台所属的站点地域选择对应的上报域名。不同站点的数据相互隔离,跨站填写会导致数据无法入库。
站点
控制台地域标识
url(上报域名)
国内站
ap-guangzhou
https://dem.rumt-zh.com
新加坡站
ap-singapore
https://dem.rumt-sg.com
硅谷站(美西)
na-siliconvalley
https://dem.rumt-us.com
接入时填写站点根地址即可,无需拼接 /api/v1/... 路径,SDK 会自行拼接具体协议端点。上报地域与 App 界面语言(中文 / 英文)相互独立,SDK 不会根据语言自动切换上报域名。

完整配置项说明

基础配置

参数
类型
必填
默认值
说明
id
string
是
无
项目标识,对应请求体中的 project_key,在控制台创建 React Native 应用后获取。
url
string
是
无
采集服务基础地址(如国内站 https://dem.rumt-zh.com),详见 上报域名。
env
string
否
不传
运行环境标识(如 production / test / development)。控制台默认筛选 production,其他环境需在控制台顶部切换。
version
string
否
不传
推荐显式配置。应用版本号字符串(如 '1.0.0-android'),用于版本分布分析及 SourceMap 匹配(原生桥仅读取字符串类型,请勿传入数字)。
userId
string
否
不传
业务用户标识,用于按用户维度聚合分析;也可在登录后调用 tdem.setUser(userId) 动态设置。
deviceId
string
否
不传
宿主提供的设备标识,初始化时传给原生层。未传时原生上报 not_set;请勿在 JS 侧自行生成。也可在运行时调用 tdem.setDeviceId(deviceId) / tdem.clearDeviceId()。
debug
boolean
否
false
调试日志开关,开启后 JS 层输出 [TDEM-ReactNative] 前缀日志,验证完成后建议关闭。
beforeReport
function
否
无
公共事件过滤钩子,作用于经 reportTDEMEvent 发送的每条 JS 事件;返回事件对象则放行,返回 null / false / undefined 则拦截该事件。

JS 侧采集配置

JS 侧采集开关支持两种写法:
传入布尔值:true 表示按默认子配置开启,false 表示关闭。
传入细分配置对象:在开启对应能力的同时,覆盖下表中的子参数。
参数
类型
默认值
说明
onError
boolean 或 OnErrorConfig
true
JS 运行时错误与未处理的 Promise rejection 监控。
spa
boolean 或 SpaConfig
false
路由页面浏览(PV)自动监控。需配合导航容器注册或手动页面接口使用。
api
boolean 或 ApiMonitorConfig
false
JS 层 fetch 与 XMLHttpRequest 接口测速与错误监控。
behavior
boolean 或 BehaviorConfig
false
RN 用户行为采集(点击、滑动、长按、表单交互)。开启时需使用 tdem.wrap(App) 包裹根组件。

onError 子配置

当 onError 传入 OnErrorConfig 对象时,可使用以下字段:
参数
类型
默认值
说明
ignoreErrors
string[]
空数组
错误 message 命中数组中任一子串时忽略该错误。未配置时不忽略。

spa 子配置

当 spa 传入 SpaConfig 对象时,可使用以下字段:
参数
类型
默认值
说明
ignore
字符串或正则表达式数组
空数组
跳过 page_view 上报的规则。字符串按路由名全等匹配(大小写敏感,不是子串);正则使用 RegExp.test。例如 ignore: ['home'] 不会跳过 Home 或 /home。

api 子配置

当 api 传入 ApiMonitorConfig 对象时,可使用以下字段:
参数
类型
默认值
说明
apiDetail
boolean
false
是否在接口事件中附带请求体(最长截断为 1000 字符)。开启前请确认请求体不含敏感信息。
ret
string[]
ret、retcode、code、errcode、errorcode
用于识别业务返回码的响应 JSON 顶层字段名名单。SDK 按响应对象自身的字段出现顺序,取第一个出现在该名单中的键,而不是按数组下标优先。例如 { "code": 1, "ret": 0 } 会命中 code。
retCodeHandler
function
未设置
自定义业务码解析函数。签名为 (data, url, ctx, payload),返回 { code, isErr }。配置后会替代默认解析规则;返回 null 或 undefined 时按 { code: "unknown", isErr: false } 处理。
reqParamHandler
function
未设置
请求体脱敏或裁剪处理函数。需同时开启 apiDetail: true。签名为 (data, url, ctx)。
未配置 retCodeHandler 时,SDK 按以下默认规则判定业务状态:
1. 若响应 JSON 顶层存在出现在 ret 名单中的字段,取第一个这样的字段;取值不为数字 0、字符串 "0" 或 "unknown" 时,判定为业务失败。
2. 否则,若存在字符串字段 status,取值不为 ok 或 success 时判定为失败。
SDK 自身的采集域名请求会自动排除,不会产生递归上报。

behavior 子配置

当 behavior 传入 BehaviorConfig 对象时,可使用以下字段。传入 behavior: true 等同于启用下表全部子开关。
参数
类型
默认值
说明
scroll
boolean
true
是否采集滑动事件。
longPress
boolean
true
是否采集长按事件。
input
boolean
true
是否采集表单焦点、变更、失焦与提交事件。
captureText
boolean
true
是否采集交互目标的可见文案(target_text)。
scrollThreshold
number
10
判定为滑动手势的最小位移阈值,单位为 pt。
longPressMs
number
500
判定为长按手势的最小按压时长,单位为 ms。
说明:
出于隐私保护,TextInput 表单事件仅采集控件标识、字段类型及输入长度分桶(0 / 1_10 / 11_50 / 51_plus),不采集输入明文;密码框(secureTextEntry)自动标记为加密字段。
交互目标可见文案(target_text)最长保留 127 字符,命中手机号、邮箱或 Token 等内置敏感规则时自动过滤。

原生侧采集配置

以下参数由 React Native 桥透传给 Android / iOS 原生 SDK:
参数
默认值
Android 端作用
iOS 端作用
crash
true
开启 Java 与 Native 崩溃监控
开启 Mach / Signal / NSException / C++ 崩溃监控
replay
true
开启原生 Session Replay 会话录屏
开启原生 Session Replay 会话录屏
struggle
true
开启原生用户挣扎检测
开启原生用户挣扎检测
说明:
原生侧的自动点击采集由 RN SDK 内部固定关闭,点击与手势统一由 JS 层采集,避免双端重复计数。
replay 本地默认开启,但实际是否录制仍受控制台远程配置及回放采样率(replaySampleRate)控制。

路由接入(React Navigation)

在根组件文件第一行引入 src/tdem.ts 中的 tdem 实例,将其与 React Navigation 的 NavigationContainer 绑定并用 tdem.wrap(App) 包裹根组件(示例中 RootNavigator 为业务导航组件):
import {tdem} from './src/tdem';
import {NavigationContainer, createNavigationContainerRef} from '@react-navigation/native';
import {createReactNavigationIntegration} from 'tdem-rn-sdk';

const navigationRef = createNavigationContainerRef();
const integration = createReactNavigationIntegration(tdem);

function App() {
return (
<NavigationContainer
ref={navigationRef}
onReady={() => integration.registerNavigationContainer(navigationRef)}>
<RootNavigator />
</NavigationContainer>
);
}

export default tdem.wrap(App);
说明:
registerNavigationContainer 会在导航就绪时自动读取当前叶子路由名并监听后续状态变化,无需对同一路由再次手动调用 reportPageView。
请始终正常渲染业务导航容器,切勿等待 tdem.canCollect() 返回 true 或 getSessionId() 返回非空值后才挂载页面,确保未命中采样或离线场景下应用界面仍可正常打开。