RUM 配置¶
获取 RUM¶
普通 uni-app:
uni 小程序:
uni 小程序由宿主 App 完成 RUM 初始化,不调用 rum.setConfig();本页自动采集器与手动采集 API 可在宿主初始化完成后使用。
RUM 初始化配置¶
rum.setConfig({
androidAppId: 'YOUR_ANDROID_APP_ID',
iOSAppId: 'YOUR_IOS_APP_ID',
harmonyAppId: 'YOUR_HARMONY_APP_ID',
errorMonitorType: 'all',
deviceMonitorType: ['cpu', 'memory']
});
| 参数名称 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| androidAppId | string | Android 发布时是 | Android 平台 appId |
| iOSAppId | string | iOS 发布时是 | iOS 平台 appId |
| harmonyAppId | string | HarmonyOS 发布时是 | HarmonyOS 平台 appId |
| sampleRate | number | 否 | 采样率,范围 [0,1],默认 1 |
| sessionOnErrorSampleRate | number | 否 | 错误采集率,范围 [0,1],默认 0,SDK 0.2.2 以上支持 |
| enableNativeUserAction | boolean | 否 | 是否开启 Native Action 追踪,纯 uni-app 应用建议关闭,Android 云打包不支持 |
| enableNativeUserResource | boolean | 否 | 是否开启 Native Resource 自动追踪,Android 云打包不支持。由于 uni-app 在 iOS 端通过系统 API 发起网络请求,开启后 iOS 请求会被自动采集;此时请屏蔽 iOS 侧手动 Resource 采集,避免重复采集 |
| enableNativeUserView | boolean | 否 | 是否开启 Native View 自动追踪,纯 uni-app 应用建议关闭 |
| errorMonitorType | string/array | 否 | 错误补充监控类型:all、battery、memory、cpu |
| deviceMonitorType | string/array | 否 | 页面监控类型:all、battery(仅 Android)、memory、cpu、fps |
| detectFrequency | string | 否 | 页面监控频率:normal、frequent、rare |
| globalContext | object | 否 | 自定义全局参数,特殊 key:track_id |
| enableResourceHostIP | boolean | 否 | 是否采集目标域名 IP,仅影响 enableNativeUserResource = true 的默认采集 |
| enableTrackNativeCrash | boolean | 否 | 是否开启 Android Java Crash 和 OC/C/C++ 崩溃监测 |
| enableTrackNativeAppANR | boolean | 否 | 是否开启 Native ANR 监测 |
| enableTrackNativeFreeze | boolean | 否 | 是否采集 Native Freeze |
| nativeFreezeDurationMs | number | 否 | Native Freeze 阈值,范围 [100,),单位毫秒 |
| rumDiscardStrategy | string | 否 | 丢弃策略:discard、discardOldest |
| rumCacheLimitCount | number | 否 | 本地缓存最大 RUM 条目数量限制,默认 100000 |
| enableTraceWebView | boolean | 否 | 是否开启通过原生 SDK 采集 WebView 数据,默认 true,SDK 0.2.6 以上支持 |
| allowWebViewHost | array | 否 | 允许数据追踪的 WebView host 列表,null 时全采集 |
RUM 用户数据追踪¶
Action¶
HarmonyOS 如需自动采集点击、Tap、长按和 Tab 切换 Action,需要显式启动 JS Action 采集器:
Android、iOS 的 Native Action 自动采集由 enableNativeUserAction 控制。
API - startAction¶
启动 RUM Action。
RUM 会绑定该 Action 期间可能触发的 Resource、Error、LongTask 事件。避免在 0.1s 内多次调用;同一 View 在同一时间仅关联一个 Action,前一个 Action 未结束时,新 Action 会被丢弃。它与 addAction 互不影响。
| 参数名称 | 参数类型 | 必须 | 参数说明 |
|---|---|---|---|
| actionName | string | 是 | 事件名称 |
| actionType | string | 是 | 事件类型 |
| property | object | 否 | 事件上下文 |
API - addAction¶
添加 Action 事件。此类数据无法关联 Error、Resource、LongTask,无丢弃逻辑。
| 参数名称 | 参数类型 | 必须 | 参数说明 |
|---|---|---|---|
| actionName | string | 是 | 事件名称 |
| actionType | string | 是 | 事件类型 |
| property | object | 否 | 事件上下文 |
View¶
自动采集¶
推荐使用 gcViewTracking。它会统一监听页面的 onLoad、onReady、onShow、onHide、onUnload 以及 App 前后台事件,并自动调用原生 RUM View API。
请在项目 main.js 中尽早调用一次。Vue 2 在创建根 Vue 实例前调用;Vue 3 需要将 createSSRApp 返回的 app 传入:
Vue 2¶
import App from './App';
import { gcViewTracking } from '@/uni_modules/GC-JSPlugin';
import Vue from 'vue';
gcViewTracking.startTracking();
const app = new Vue({
...App
});
app.$mount();
Vue 3¶
import App from './App';
import { gcViewTracking } from '@/uni_modules/GC-JSPlugin';
import { createSSRApp } from 'vue';
export function createApp() {
const app = createSSRApp(App);
gcViewTracking.startTracking(app);
return { app };
}
采集规则:
- 页面首次展示时,
loading_time按onLoad到onReady计算,单位为纳秒。 - 采集器启动过晚或未收到完整页面生命周期时,无法可靠计算的加载时间使用
-1;页面再次显示或 App 回到前台时使用0。 - 页面隐藏、卸载或 App 进入后台时会停止当前 View;同一生命周期内的重复
onShow、resume会自动去重。 - 路由失败不会生成 View;同一路由的多个页面实例会分别维护状态。
兼容采集方式¶
旧版本的 mixin 方式仍保留用于兼容。新项目应优先使用 gcViewTracking,不要同时启用两种自动采集方式,否则可能产生重复 View。
App.vue + 首个页面组合配置可参考 SDK 包示例工程 Hbuilder_Example/App.vue 和 Hbuilder_Example/pages/index/index.vue:
// step 1. 将 GC-JSPlugin 添加到工程 uni_modules
// step 2. 在 App.vue 中添加 Router 监控
<script>
import { gcWatchRouter } from '@/uni_modules/GC-JSPlugin';
export default {
mixins: [gcWatchRouter],
}
</script>
// step 3. 在首个 page 页面添加 pageMixin
<script>
import { gcPageMixin } from '@/uni_modules/GC-JSPlugin';
export default {
mixins: [gcPageMixin],
}
</script>
仅采集指定页面时,可参考 SDK 包示例工程 Hbuilder_Example/pages/rum/index.vue:
<script>
import { gcPageViewMixinOnly } from '@/uni_modules/GC-JSPlugin';
export default {
mixins: [gcPageViewMixinOnly],
}
</script>
手动采集¶
rum.onCreateView({
viewName: 'Current Page Name',
loadTime: 100000000
});
rum.startView({
viewName: 'Current Page Name'
});
rum.stopView();
API - onCreateView¶
创建页面加载时长记录。
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| viewName | string | 是 | 页面名称 |
| loadTime | number | 是 | 页面加载耗时,单位纳秒 |
API - startView¶
进入页面。
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| viewName | string | 是 | 页面名称 |
| property | object | 否 | 事件上下文 |
API - stopView¶
离开页面。
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| property | object | 否 | 事件上下文 |
Error¶
自动采集¶
手动采集¶
API - addError¶
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| message | string | 是 | 错误信息 |
| stack | string | 是 | 堆栈信息 |
| state | string | 否 | App 运行状态:unknown、startup、run |
| type | string | 否 | 错误类型,默认 uniapp_crash |
| property | object | 否 | 事件上下文 |
Resource¶
自动采集¶
自 0.3.0 起推荐使用 gcResourceTracking。它会拦截 Android、iOS、HarmonyOS 的标准 uni.request,自动采集请求成功或失败产生的 RUM Resource。如已初始化 Trace,还会根据配置的链路类型生成 Trace Header 并添加到请求头;开启 enableLinkRUMData 后,可关联 RUM Resource 与 Trace。业务代码已设置的同名请求头不会被覆盖。
请在发起请求前调用一次 startTracking,之后继续直接使用 uni.request:
uni.request({
url: requestUrl,
method: method,
header: header,
timeout: 30000,
success(res) {
console.log('success:' + JSON.stringify(res));
},
fail(err) {
console.log('fail:' + JSON.stringify(err));
},
complete() {
console.log('complete');
}
});
startTracking 配置:
| 字段 | 类型 | 必须 | 默认值 | 说明 |
|---|---|---|---|---|
| enableIOS | boolean | 否 | true |
是否在 iOS 端通过 JS 拦截器采集 uni.request。Android、HarmonyOS 不受此参数影响;iOS 已开启 enableNativeUserResource 时应设置为 false,避免与原生 URLSession 自动采集重复 |
// iOS 已通过 rum.setConfig({ enableNativeUserResource: true }) 开启原生采集时:
gcResourceTracking.startTracking({
enableIOS: false
});
使用说明:
- 支持 App Android、App iOS 与 App HarmonyOS;应在应用启动阶段、第一次调用
uni.request前执行。 startTracking只应调用一次,重复调用不会重复安装拦截器。- 如已初始化 Trace,请求会自动添加 Trace Header;业务代码显式设置的同名请求头优先。
- 原有
success、fail、complete回调保持不变。 gcRequest.request从 0.2.7 起仅作为废弃兼容 API 保留。启用全局采集器后不需要替换uni.request,也不要并行使用两种采集方式。
gcRequest.request 的旧配置仅供尚未迁移的项目参考:
| 兼容字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| filterPlatform | array | 否 | 当启用 enableNativeUserResource 后,可设置 filterPlatform: ["ios"] 屏蔽 iOS 侧旧版手动采集 |
手动采集¶
通过手动调用 startResource、stopResource、addResource 自行实现,可参考 GCResourceTracking.js。
API - startResource¶
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| key | string | 是 | 请求唯一标识 |
| property | object | 否 | 事件上下文 |
API - stopResource¶
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| key | string | 是 | 请求唯一标识 |
| property | object | 否 | 事件上下文 |
API - addResource¶
| 参数名称 | 参数类型 | 必须 | 参数说明 |
|---|---|---|---|
| key | string | 是 | 请求唯一标识 |
| content | content object | 是 | 请求相关数据 |
| property | object | 否 | 事件上下文 |
content object¶
| prototype | 参数类型 | 参数说明 |
|---|---|---|
| url | string | 请求 URL |
| httpMethod | string | HTTP 方法 |
| requestHeader | object | 请求头 |
| responseHeader | object | 响应头 |
| responseBody | string | 响应结果 |
| resourceStatus | number | 请求结果状态码 |
| errorMessage | string | 请求失败信息 |
| errorStack | string | 请求失败堆栈 |
| fetchStartTime | number | 请求开始时间,单位纳秒 |
| requestStartTime | number | 开始发送请求时间,单位纳秒 |
| responseStartTime | number | 开始接收响应时间,单位纳秒 |
| responseEndTime | number | 响应接收完成时间,单位纳秒 |
| tcpStartTime | number | TCP 连接开始时间,单位纳秒 |
| tcpEndTime | number | TCP 连接结束时间,单位纳秒 |
| dnsStartTime | number | DNS 解析开始时间,单位纳秒 |
| dnsEndTime | number | DNS 解析结束时间,单位纳秒 |
| sslStartTime | number | SSL 连接开始时间,单位纳秒 |
| sslEndTime | number | SSL 连接结束时间,单位纳秒 |