跳转到主要内容
Flashduty Android RUM SDK 默认自动收集所有 RUM 事件的多个指标和属性。您还可以通过 API 添加自定义属性以扩展默认数据集。

应用启动指标

Flashduty 自动收集以下应用启动性能指标:
指标描述测量范围
cold_start_duration冷启动持续时间从应用进程创建到首个 Activity 渲染完成
warm_start_duration温启动持续时间应用进程已存在,从 Activity 开始到渲染完成
hot_start_duration热启动持续时间应用和 Activity 都在内存中,从恢复到渲染完成
activity_start_durationActivity 启动持续时间onCreate 到首帧绘制完成
is_pre_warmed预热启动标识布尔值,指示应用是否通过预热启动(Android 11+)
启动类型说明:
  • 冷启动 - 应用首次启动或进程被终止后启动,需要加载所有资源并初始化应用状态
  • 温启动 - 应用进程在内存中,但 Activity 需要重新创建
  • 热启动 - 应用和 Activity 都在内存中,只需将 Activity 带回前台

Views 监控

View 代表用户在应用中看到的唯一屏幕。每个 View 开始时会创建一个新的 RUM 事件,并在 View 的整个生命周期内更新该事件。
View 会收集其生命周期内发生的所有资源、操作、错误和长任务的相关信息。

自动追踪策略

在 Android 中,Activities 和 Fragments 被视为 View。SDK 提供以下自动追踪策略:
策略描述适用场景
ActivityViewTrackingStrategy基于 Activity 生命周期追踪传统 Activity 架构
FragmentViewTrackingStrategy基于 Fragment 生命周期追踪Fragment 为主的应用
MixedViewTrackingStrategy同时追踪 Activity 和 Fragment混合架构应用
NavigationViewTrackingStrategy适用于 Jetpack Navigation 组件使用 Navigation 的应用
您也可以通过手动调用 RumMonitor.startView()RumMonitor.stopView() 来自定义 View 追踪。

默认属性

RUM SDK 为所有事件自动附加默认属性,帮助您了解用户设备、网络状态和应用上下文。
属性名类型描述
application.idstringFlashduty 应用 ID。
application.namestring应用包名(例如 com.example.app)。
application.versionstring应用版本名称。
application.buildstring应用构建版本号。
session.idstring唯一会话 ID,用于将用户旅程中的事件分组。
session.typestring会话类型:user
view.idstring为每个 View 生成的唯一 ID。
view.urlstringView 的规范化 URL(Activity 或 Fragment 的类名)。
view.namestring可自定义的 View 名称。
envstring应用的环境名称(例如 proddev)。
servicestring服务名称,用于区分应用的不同模块或微服务。
versionstring应用版本。
sdk_versionstringFlashduty SDK 版本。
datenumber事件发生的时间戳(epoch 毫秒)
typestring事件类型(如 viewresourceactionerrorlong_task
以下属性与设备相关,在所有 RUM 事件中自动收集:
属性名类型描述
device.typestring设备类型,如 mobiletablettv 等。
device.namestring设备商业名称(例如 Samsung Galaxy S21)。
device.modelstring设备型号(例如 SM-G991B)。
device.brandstring设备品牌(例如 Samsung)。
device.architecturestring设备架构(例如 arm64-v8a
device.marketing_namestring设备的市场营销名称
以下网络相关属性在所有 RUM 事件中自动收集:
属性名类型描述
connectivity.statusstring设备网络可达性状态(connectednot_connectedmaybe)。
connectivity.interfacesarray可用网络接口列表(例如 wificellularethernet)。
connectivity.cellular.technologystring蜂窝网络技术类型(例如 LTE5G
connectivity.cellular.carrier_namestring运营商名称(例如 中国移动
以下操作系统相关属性在所有 RUM 事件中自动收集:
属性名类型描述
os.namestring操作系统名称(例如 Android)。
os.versionstring操作系统版本(例如 13)。
os.version_majorstring操作系统主版本号(例如 13
os.buildstring系统构建号(例如 TQ2A.230505.002
RUM 可以从用户的 IP 地址推断出地理位置信息:
属性名类型描述
geo.countrystring国家名称
geo.country_isostring国家的 ISO 代码
geo.citystring城市名称
地理位置信息由 Flashduty 后端根据客户端 IP 地址推断,不会在客户端收集精确的 GPS 位置。
您可以通过 setUser() API 设置用户信息,这些信息会被附加到所有 RUM 事件中:
属性名类型描述
usr.idstring用户的唯一标识符
usr.namestring用户的友好名称
usr.emailstring用户的电子邮件地址
您还可以添加自定义用户属性,例如 usr.planusr.role 等。

事件特定属性

除了默认属性外,不同类型的 RUM 事件还会收集特定的指标和属性。
属性名类型描述
session.idstring唯一会话 ID。
session.typestring会话类型:user
session.has_replaybool会话是否包含会话重放录制
session.is_activebool会话是否处于活动状态
View 事件包含以下特定属性和性能指标:
属性名类型描述
view.idstring每个 View 的唯一 ID。
view.namestringView 的自定义名称。
view.urlstringView 的 URL(Activity 或 Fragment 类名)。
view.time_spentnumber(ns)用户在此 View 上花费的时间。
view.loading_timenumber(ns)View 加载完成所需的时间。
view.loading_typestringView 加载类型:initial_loadactivity_displayfragment_display
view.first_contentful_paintnumber(ns)首次内容绘制时间(仅适用于 API 29+)。
view.action.countnumberView 中收集的所有操作的数量。
view.resource.countnumberView 中收集的所有资源的数量。
view.error.countnumberView 中收集的所有错误的数量。
view.long_task.countnumberView 中收集的所有长任务的数量。
view.crash.countnumberView 中收集的所有崩溃的数量
view.is_activeboolView 是否仍处于活动状态
Resource 事件表示应用中的网络请求。收集的属性包括:
属性名类型描述
resource.idstring资源的唯一标识符。
resource.typestring资源类型(例如 xhrfetchimagecssjsfontmediaother)。
resource.urlstring资源的 URL。
resource.methodstringHTTP 方法(例如 GETPOST)。
resource.status_codenumberHTTP 响应状态码。
resource.durationnumber(ns)加载资源所花费的总时间。
resource.sizenumber资源大小(字节)。
resource.dns.durationnumber(ns)DNS 解析时间(domainLookupEnd - domainLookupStart)。
resource.connect.durationnumber(ns)建立连接的时间(connectEnd - connectStart)。
resource.ssl.durationnumber(ns)TLS 握手时间(connectEnd - secureConnectionStart),仅适用于 HTTPS。
resource.first_byte.durationnumber(ns)等待首字节响应的时间(responseStart - requestStart)。
resource.download.durationnumber(ns)下载响应的时间(responseEnd - responseStart)。
resource.redirect.durationnumber(ns)后续 HTTP 重定向所花费的时间(redirectEnd - redirectStart)。
resource.provider.namestring资源提供商名称,默认为 unknown
resource.provider.domainstring资源提供商域名
resource.provider.typestring资源提供商类型(如 first-partycdnadanalytics
错误事件收集异常和崩溃信息,错误消息和堆栈跟踪会被自动包含:
属性名类型描述
error.sourcestring错误来源(例如 webviewloggernetworksourceconsole)。
error.typestring错误类型或错误代码。
error.messagestring简洁、人类可读的单行错误消息。
error.stackstring堆栈跟踪或错误的补充信息。
error.issue_idstring错误问题的唯一标识符。
error.categorystring错误的高级分类,可能的值:ANR(应用无响应)、Exception(异常)。
error.filestring发生错误的文件名(用于错误追踪问题)。
error.linenumber发生错误的行号
error.is_crashbool指示该错误是否导致应用崩溃
网络错误:网络错误包含有关失败的 HTTP 请求的信息,并收集以下属性:
属性名类型描述
error.resource.status_codenumberHTTP 响应状态码。
error.resource.methodstringHTTP 方法(例如 POSTGET)。
error.resource.urlstring资源 URL。
error.resource.provider.namestring资源提供商名称,默认为 unknown
error.resource.provider.domainstring资源提供商域名
error.resource.provider.typestring资源提供商类型(如 first-partycdnadanalytics
Action 代表用户与应用的交互(例如点击、滑动、滚动)。计时属性:
属性名类型描述
action.loading_timenumber(ns)操作的加载时间。
action.long_task.countnumber此操作收集的所有长任务数量。
action.resource.countnumber此操作收集的所有资源数量
action.error.countnumber此操作收集的所有错误数量
基本属性:
属性名类型描述
action.idstring用户操作的 UUID
action.typestring用户操作类型(如 tapscrollswipeapplication_start
action.namestring用户操作的名称
action.target.namestring用户交互的元素,仅适用于自动收集的操作

数据存储与安全

本地存储机制

在数据上传到 Flashduty 之前,会以明文形式存储在应用的缓存目录中。 存储位置:
/data/data/<package_name>/cache/com.flashcat.rum/
安全保护:
  • 缓存文件夹受 Android 应用沙箱保护
  • 在大多数设备上,其他应用无法读取这些数据
安全注意事项:
  • 如果移动设备已 root 或有人篡改 Linux 内核,存储的数据可能会变得可读
  • 敏感数据不应包含在 RUM 事件中,或者应在发送前通过 EventMapper 进行混淆或过滤

数据上传机制

Android RUM SDK 采用批处理方式上传事件,在保证数据传输的同时最小化对用户体验的影响。

批处理流程

1

事件收集

SDK 将未压缩的事件追加到批次文件中,使用 TLV 编码格式(Tag-Length-Value)。
2

批次优化

当批次关闭时:
  • 读取批次文件并提取事件
  • 对 RUM 事件进行去重优化(删除冗余的 View 事件)
  • 构建特定于每个追踪的有效载荷
3

压缩上传

使用 gzip 压缩数据,减少网络流量和上传时间。

上传触发条件

批次在以下任一情况下会被上传:
触发条件说明
文件大小批次文件大小达到阈值(例如 4MB)
事件数量批次中的事件数量达到阈值
应用状态应用切换到后台
定时上传定期上传(例如每 5 秒)

上传策略

智能上传机制:
  • 网络优化 - 优先通过 WiFi 上传,移动网络也支持
  • 电量管理 - 确保不会过度消耗设备电量
  • 失败重试 - 上传失败时批次会保留在本地,直到成功发送
  • 数据压缩 - 使用 gzip 压缩,减少网络流量

Direct Boot 模式支持

如果您的应用支持 Direct Boot 模式(在设备解锁前启动),请注意:
在设备解锁前捕获的数据将不会被记录,因为此时凭据加密存储尚不可用。
Flashduty SDK 会在设备解锁后开始收集数据。如果您需要在 Direct Boot 模式下收集数据,请确保使用设备加密存储而非凭据加密存储。

相关文档