UniApp 会话重放¶
UniApp 会话重放当前支持 Android 和 iOS,暂不支持 HarmonyOS。普通 uni-app 通过可选的 GC-UniSessionReplay 模块初始化;uni 小程序由宿主 App 通过对应平台的 Native SDK 初始化。
前置条件¶
- 已完成 UniApp 应用接入,并初始化 Mobile SDK、RUM 与 View 采集;
- 使用
0.3.0或更高版本的GC-UniPlugin、GC-JSPlugin和GC-UniSessionReplay,三个模块的版本号保持一致; - HBuilderX 版本不低于
4.25.0; - Android 最低支持 API 24,iOS 最低支持 12.0。
安装¶
从 SDK 源码仓库对应版本的 Hbuilder_Example/uni_modules 中,将 GC-UniSessionReplay 复制到业务工程的 uni_modules:
初始化¶
先完成 Mobile SDK 与 RUM 初始化,再初始化 Session Replay。建议在启动 View 自动采集前调用一次 GCUniSessionReplay.setConfig():
import {
GCUniSessionReplay,
GCSessionReplayTouchPrivacy,
GCSessionReplayTextAndInputPrivacy,
GCSessionReplayImagePrivacy
} from '@/uni_modules/GC-UniSessionReplay';
GCUniSessionReplay.setConfig({
sampleRate: 100,
sessionReplayOnErrorSampleRate: 0,
touchPrivacy: GCSessionReplayTouchPrivacy.SHOW,
textAndInputPrivacy:
GCSessionReplayTextAndInputPrivacy.MASK_SENSITIVE_INPUTS,
imagePrivacy: GCSessionReplayImagePrivacy.MASK_NON_BUNDLED_ONLY,
enableLinkRUMKeys: ['wgt_id', 'wgt_name']
});
推荐初始化顺序:
mobileAgent.sdkConfig()
-> rum.setConfig()
-> GCUniSessionReplay.setConfig()
-> gcViewTracking.startTracking()
采集 uni-app 页面内容¶
Android 和 iOS 平台的 uni-app 页面运行在应用内置的 WebView 中。初始化 GC-UniSessionReplay 后,还需要通过 gcViewTracking.evalSessionReplayJS() 将 Web 监测 SDK 注入 uni-app 的渲染 WebView,并开启 Web Session Replay。完成此操作后,会话重放中才能展示 uni-app 页面内容及用户在页面中的操作。
请在调用 gcViewTracking.startTracking() 前配置以下注入脚本:
import { gcViewTracking } from '@/uni_modules/GC-JSPlugin';
// #ifdef APP-PLUS
const jsCode = `
// 在 uni-app 的渲染 WebView 中加载 Web 监测 SDK
var script = document.createElement('script');
script.src = 'https://static.guance.com/browser-sdk/v3/dataflux-rum.js';
script.onload = function() {
DATAFLUX_RUM.setGlobalContextProperty('wgt_id', 'wgt_id_1');
DATAFLUX_RUM.setGlobalContextProperty('wgt_name', 'wgt_name_1');
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
// 桥接模式仍需校验数据接收地址,但 RUM 数据会通过
// FTWebViewJavascriptBridge 发送,而不会请求此地址
datakitOrigin: window.location.origin,
});
window.DATAFLUX_RUM.startSessionReplayRecording();
};
document.head.appendChild(script);
`;
gcViewTracking.evalSessionReplayJS(jsCode);
// #endif
wgt_id 和 wgt_name 是可选的自定义字段,可用于标识由 uni-app 渲染层产生的数据。如果需要将这些字段关联到会话重放数据,请在 GCUniSessionReplay.setConfig() 的 enableLinkRUMKeys 中声明字段名称,并通过 DATAFLUX_RUM.setGlobalContextProperty() 为同名字段设置实际值。如果不需要通过这些字段区分数据,可以不配置 enableLinkRUMKeys,同时删除注入脚本中的两行 setGlobalContextProperty() 调用。
evalSessionReplayJS() 会在 uni-app 页面对应的渲染 WebView 中执行该脚本,无需在每个页面中重复调用。
此处采集的是 uni-app 自身的渲染页面。若需要采集 <web-view> 组件加载的外部网页,请参考 WebView 数据监测。
参数说明¶
| 参数名称 | 参数类型 | 必须 | 参数说明 |
|---|---|---|---|
| sampleRate | number | 否 | 采样率,范围 [0,100],0 表示不采集,100 表示全采集,默认 100 |
| sessionReplayOnErrorSampleRate | number | 否 | 错误采集率,范围 [0,100];未命中 sampleRate 采样的会话发生错误时,按此比例采集错误前 1 分钟的数据,默认 0 |
| touchPrivacy | string | 否 | 触控隐私级别:show、hide,默认 hide |
| textAndInputPrivacy | string | 否 | 文本与输入隐私级别:maskSensitiveInputs、maskAllInputs、maskAll,默认 maskAll |
| imagePrivacy | string | 否 | 图片隐私级别:maskNonBundledOnly、maskAll、maskNone,默认 maskAll;Android 将 maskNonBundledOnly 映射为仅遮蔽大图 |
| enableSwiftUI | boolean | 否 | 仅 iOS;是否录制 SwiftUI 页面,默认 false |
| enableLinkRUMKeys | array |
否 | 将指定的 RUM Context 字段关联到 Session Replay 数据 |
查看会话重放¶
移动端会话重放的查看方式与 Web 端一致,具体可参考 Web 会话重放访问方式。