本文将为您介绍如何初始化用户体验监控 iOS SDK。
操作步骤
参考以下代码初始化用户体验监控 iOS SDK,在 App 启动后初始化监控框架,一般推荐在
application:didFinishLaunchingWithOptions:delegate 中进行初始化。1. 在 AppDelegate 实现文件中引入对应的头文件。
import TDEMiOSSDK
@import TDEMiOSSDK;
2. 创建配置对象并启动 SDK。
id / url 为必填,缺失会导致初始化失败(invalidConfiguration);userId / deviceId 为业务必填,缺失不会导致初始化失败,但会使控制台的用户、设备维度无法聚合(version 已自动取 CFBundleShortVersionString,可不填)。其余配置项均有默认值,按需补充即可,详见 完整配置项说明。let configuration = TDEMConfiguration(id: "<project-key>", // 必填:项目标识url: URL(string: "https://dem.rumt-zh.com")! // 必填:采集服务基础地址(国内站))configuration.version = "1.0.0" // 建议显式配置:默认取 CFBundleShortVersionString,回落 1.0.0configuration.env = "production" // 运行环境,默认 productionconfiguration.userId = "<user-id>" // 必填:预置用户标识(用户维度聚合)configuration.deviceId = "<device-id>" // 必填:设备标识(设备异常率统计)configuration.debug = false // 可选:诊断日志开关,默认 falseTDEM.start(configuration: configuration)
// id 与 url 为必填:项目标识 / 采集服务基础地址(国内站)TDEMConfiguration *configuration =[[TDEMConfiguration alloc] initWithId:@"<project-key>"url:[NSURL URLWithString:@"https://dem.rumt-zh.com"]];configuration.version = @"1.0.0"; // 建议显式配置:默认取 CFBundleShortVersionString,回落 1.0.0configuration.env = @"production"; // 运行环境,默认 productionconfiguration.userId = @"<user-id>"; // 必填:预置用户标识(用户维度聚合)configuration.deviceId = @"<device-id>"; // 必填:设备标识(设备异常率统计)configuration.debug = NO; // 可选:诊断日志开关,默认 NO[TDEM startWithConfiguration:configuration];
初始化后即可自动采集崩溃、卡顿、启动、网络等数据,无需额外打点。用户行为监控(
behavior)与会话回放(replay)默认关闭,需显式开启。注意:
id 与 url 为必填。url 是采集服务基础地址,支持 http / https(生产环境请使用 HTTPS),SDK 会自行拼接具体协议端点。国内站填 https://dem.rumt-zh.com,详见 上报域名。userId 与 deviceId 需一并传入。二者缺失不会导致初始化失败,但会使控制台无法按用户 / 设备维度聚合:userId 为空时该字段不会写入上报体;deviceId 为空或空白时上报字面量 not_set,设备异常率统计会失真。设备 ID 非常重要,用户体验监控使用设备 ID 来计算设备异常率。请通过
TDEMConfiguration.deviceId 或 TDEM.setDeviceId(_:) 传入稳定的业务设备标识;未设置时上报 not_set,按设备维度的异常率统计会失真。SDK 不读取 IDFV 等系统标识,需由业务侧提供。建议在用户授权个人信息保护规则后再初始化 SDK。
切勿把真实 project key、采集凭证或生产环境地址提交进代码仓库。
上报域名
请根据项目所在地域选择对应的上报域名。不同站点的数据相互隔离,跨站填写会导致数据无法入库。
站点 | 上报域名 |
国内站 | https://dem.rumt-zh.com |
新加坡站 | https://dem.rumt-sg.com |
美国站 | https://dem.rumt-us.com |
接入时填写站点根地址即可,无需拼接路径,SDK 会自行拼接具体协议端点。
完整配置项说明
以下为
TDEMConfiguration 的全部配置项,均需在 TDEM.start(configuration:) 之前设置。其中 id / url / userId / deviceId 需按要求传入,其余为可选配置。基础配置
下表中
id / url / userId / deviceId 为必填,其余为可选(均有默认值或可不配置)。id 与 url 由 SDK 强制校验,缺失会直接初始化失败。userId、deviceId 为业务必填项,缺失虽不影响 SDK 运行,但会导致控制台对应的用户 / 设备维度无法聚合。version 已默认取 CFBundleShortVersionString,通常无需手工传入。配置项 | 说明 |
id | 必填。项目标识,对应请求体中的 project_key。为空会导致初始化失败(invalidConfiguration)。 |
url | 必填。采集服务基础地址,需为 http / https 且带 host,SDK 会自行拼接具体协议端点(如 /api/v1/config、/api/v1/collect/events)。国内站填 https://dem.rumt-zh.com,详见「上报域名」。 |
version | 应用版本号,对应上报体的 app.version,用于版本对比与版本分布分析。默认自动取 CFBundleShortVersionString,取不到或为空时回落 1.0.0,因此可不手工传入;若业务版本号与 Bundle 版本不一致,建议显式配置。 |
env | 运行环境标识,允许值 production / development / gray / pre / daily / local / test / others,默认 production;未知值(含 staging)归一为 others。 |
userId | 必填。业务用户标识,对应上报体的 context.user_id;不填时该字段不会写入上报体,控制台无法按用户维度聚合分析。也可在初始化后调用 TDEM.setUser 动态设置。 |
deviceId | 必填。宿主提供的设备标识( String?)。由业务侧设置,SDK 不会自动生成 IDFV 或其他系统设备标识;未设置或传空白时,上报字面量 not_set,按设备维度的异常率统计会失真。也可在运行期调用 TDEM.setDeviceId(_:) 设置、TDEM.clearDeviceId() 清除。 |
defaultTags | 全局默认标签( [String: String]),注入每个事件。也可通过 TDEM.setTags 增删。 |
debug | 诊断日志开关,默认 false。开启后输出脱敏的本地诊断日志,不打印事件正文。 |
requestCaptureEnabled | 是否抓取事件与回放上报的 HTTP 请求 / 响应原始报文用于本地排查,默认 false。与 debug 相互独立,仅供测试环境使用。 |
requestCaptureDirectory | 原始报文落盘目录。必须与 requestCaptureEnabled 同时设置才生效,二者缺一则不抓取。 |
初始化时 SDK 会先请求
POST {url}/api/v1/config 拉取远程配置,仅在远程返回 enabled: true 且通过采样时才启动采集;拉取失败时沿用本地缓存,无缓存则保守不上报(进入 suppressed 状态)。需要感知结算结果时,可实现 TDEMInitListener 并通过 TDEM.addInitListener 注册。崩溃监控(crash,默认开启)
配置项 | 说明 |
enabled | 总开关,默认 true。开启后自动捕获崩溃,并接收 TDEM.captureException 上报的已捕获异常。 |
网络监控(network,默认开启)
配置项 | 说明 |
enabled | 总开关,默认 true。 |
reportAllSuccessfulRequests | 是否上报全部成功请求,默认 false(仅慢成功与错误 / 取消上报)。 |
slowThresholdMs | 慢请求阈值(ms),默认 1000。 |
allowedHosts | 域名白名单。非空时仅采集命中白名单的请求;匹配规则为精确域名或其子域(填 example.com 可命中 a.example.com)。 |
deniedHosts | 域名黑名单。仅在 allowedHosts 为空时生效,命中即不采集。 |
additionalSensitiveHeaderNames | 在默认敏感头之外追加需要脱敏的请求头名(不区分大小写)。 |
SDK 自身与采集服务之间的请求(与
url 同源)会被自动排除,不会产生递归上报。启动监控(launch,默认开启)
配置项 | 说明 |
enabled | 是否启用,默认 true。 |
manualEndEnabled | 是否等待业务调用 TDEM.endLaunch() 才封口,默认 false(首个页面展示后自动上报)。 |
冷启动 / 温启动的慢启动判定阈值由 SDK 内部维护(默认4000ms / 2000ms),接入方不可修改。
卡顿监控(stall,默认开启)
配置项 | 说明 |
enabled | 总开关,默认 true。 |
stallThresholdMs | 卡顿判定阈值(ms),默认1000,取值需大于0且小于5000,否则初始化失败( stall_invalid_configuration)。 |
除卡顿外,SDK 同时检测主线程无响应(阈值5000ms,内部固定),两类事件都会采集代表性堆栈与掉帧指标。
用户行为监控(behavior,默认关闭)
配置项 | 说明 |
enabled | 总开关,默认 false(合规整改起默认 opt-in,需显式开启)。 |
用户挣扎检测(struggle,默认开启)
配置项 | 说明 |
enabled | 总开关,默认 true。 |
clickRulesEnabled | 是否检测 rage / dead / error click,默认 true。 |
formRulesEnabled | 是否检测 long focus,默认 true。 |
navigationRulesEnabled | 是否检测 back-forward,默认 true。 |
规则阈值(rage 1s/5次、dead/error 3s、long focus 20s、back-forward 10s/3次)与 Android 对齐,SDK 内部写死,接入方不可修改。如需精确忽略某个控件的 dead click,可调用
TDEMBehaviorMetadata.setDeadClickIgnored(_:for:)。Session Replay 会话录屏(replay,默认关闭)
配置项 | 说明 |
enabled | 总开关,默认 false。 |
sessionSampleRate | 全量会话采样率(0.0–1.0),默认 0.1。 |
errorSampleRate | 错误触发采样率(0.0–1.0),默认 1.0。 |
quality | 录制质量预设( TDEMReplayQuality.low / .medium / .high),默认 low。 |
maskAllText | 是否遮罩所有文本内容,默认 false。 |
maskAllImages | 是否遮罩所有图片内容,默认 false。 |
默认仅遮罩输入类控件与显式标记为敏感的内容;也可通过
TDEMPrivacyMetadata.setReplayMasking(_:for:) 对单个 View 强制遮罩或放开。sessionSampleRate、errorSampleRate 超出 [0, 1] 会导致初始化失败(replay_invalid_configuration)。