跳转至

iOS 会话重放

前置条件

  • 确保您已设置并初始化 FTMobileSDK RUM 配置,并开启 View 的监控采集。
  • iOS Session Replay 版本支持:SDK.Version >= 1.6.0
  • 建议优先使用文档最上方 badge 显示的正式发布稳定版本,不再建议使用 alphabeta 等预发布版本。

  • 如果您希望提前集成超前能力、关注最新特性或跟进未正式发布的变更,可以前往 GitHub 关注 iOS SDK 仓库及相关更新日志:GuanceCloud/datakit-ios

配置

根据您的包管理器将 FTMobileSDK 库中 FTSessionReplay 功能组件链接到您的项目:

CocoaPods

pod 'FTMobileSDK', 'last_version'
pod 'FTMobileSDK/FTSessionReplay', 'last_version' # 新增

Swift Package Manager

dependencies: [
.package(url: "https://github.com/GuanceCloud/FTMobileSDK.git", 
from: "last_version")
],
targets: [
    .target(
        name: "YourTarget",
        dependencies: [
            .product(name: "FTMobileSDK", package: "FTMobileSDK")
            .product(name: "FTSessionReplay", package: "FTMobileSDK"), //新增
        ]),
]

Carthage/Framework

SDK 1.6.2 以上版本支持

使用 Carthage 或手动集成 Framework 时,除基础 SDK 外,还需将 FTSessionReplay 会话重放组件一起添加到主项目 Target 的 Frameworks 中。

FTSessionReplay 是会话重放功能组件,依赖 FTMobileSDK 基础能力,不能单独使用。

代码调用

#import <FTMobileSDK/FTRumSessionReplay.h>
// 或
#import <FTSessionReplay/FTRumSessionReplay.h>

   FTSessionReplayConfig *srConfig = [[FTSessionReplayConfig alloc]init];
   srConfig.touchPrivacy = FTTouchPrivacyLevelShow;
   srConfig.textAndInputPrivacy = FTTextAndInputPrivacyLevelMaskSensitiveInputs;
   srConfig.imagePrivacy = FTImagePrivacyLevelMaskNonBundledOnly;
   // 如需采集 SwiftUI 页面,SDK 1.6.5 以上版本可开启
   srConfig.enableSwiftUI = YES;
   srConfig.sampleRate = 100;
   [[FTRumSessionReplay sharedInstance] startWithSessionReplayConfig:srConfig];
   let srConfig = FTSessionReplayConfig.init()
   srConfig.touchPrivacy = .show
   srConfig.textAndInputPrivacy = .maskSensitiveInputs
   srConfig.imagePrivacy = .maskNonBundledOnly
   // 如需采集 SwiftUI 页面,SDK 1.6.5 以上版本可开启
   srConfig.enableSwiftUI = true
   srConfig.sampleRate = 100
   FTRumSessionReplay.shared().start(with: srConfig)
属性 类型 必须 含义
sampleRate int 采样率。取值范围 [0,100],0 表示不采集,100 表示全采集,默认值为 100。此采样率是 RUM 采样基础上的采样率。
sessionReplayOnErrorSampleRate int 设置错误采集率,当会话未被 sampleRate 采样时,若会话期间发生错误,可以采集到错误前 1 分钟范围的数据,取值范围 [0,100],0 表示不采集,100 表示全采集,默认值为 0。SDK 1.6.2 以上版本支持
privacy FTSRPrivacy 设置 Session Replay 中内容屏蔽的隐私级别。默认 FTSRPrivacyMask
屏蔽处理:文本替换为 * 或 #。
FTSRPrivacyAllow: 除敏感输入控件外记录文本和输入内容,显示用户触控,并记录所有图片。
FTSRPrivacyMaskUserInput: 屏蔽输入元素并隐藏用户触控,仅记录 SF Symbols 以及通过 [UIImage imageNamed:] / UIImage(named:) 加载且随 App 打包的图片。
FTSRPrivacyMask: 屏蔽所有文本、输入、触控与图片。
即将废弃,可兼容使用,建议优先使用 touchPrivacytextAndInputPrivacyimagePrivacy 进行细粒度的屏蔽隐私级别设置
touchPrivacy FTTouchPrivacyLevel 会话重放中触控屏蔽的可用隐私级别。默认 FTTouchPrivacyLevelHide
FTTouchPrivacyLevelShow: 显示所有用户触控
FTTouchPrivacyLevelHide: 屏蔽所有用户触控
设置后覆盖 privacy 的配置
SDK 1.6.1 以上版本支持
textAndInputPrivacy FTTextAndInputPrivacyLevel 会话重放中文本和输入屏蔽的可用隐私级别。默认 FTTextAndInputPrivacyLevelMaskAll
FTTextAndInputPrivacyLevelMaskSensitiveInputs: 显示除敏感输入外的所有文本,例如密码输入
FTTextAndInputPrivacyLevelMaskAllInputs: 屏蔽所有输入字段,例如 UITextFieldUISwitchUISlider
FTTextAndInputPrivacyLevelMaskAll: 屏蔽所有文本和输入
设置后覆盖 privacy 的配置
SDK 1.6.1 以上版本支持
imagePrivacy FTImagePrivacyLevel 会话重放中图片屏蔽的可用隐私级别。默认 FTImagePrivacyLevelMaskAll
FTImagePrivacyLevelMaskNonBundledOnly: 仅记录 SF Symbols 以及通过 [UIImage imageNamed:] / UIImage(named:) 加载且随 App 打包的图片,网络下载或运行时生成的图片会被屏蔽。
FTImagePrivacyLevelMaskAll: 屏蔽所有图片。
FTImagePrivacyLevelMaskNone: 记录所有图片,包括网络下载或运行时生成的图片,请确认图片不包含敏感内容后使用。
设置后覆盖 privacy 的配置
SDK 1.6.2 以上版本支持
enableSwiftUI BOOL 启用 SwiftUI 页面的会话重放采集,默认值为 NO。SDK 1.6.5 以上版本支持
enableLinkRUMKeys NSArray 启用后,根据设置的 keys,关联 RUM Context 中对应字段至会话重放数据。可用于实现会话重放数据分流
SDK 1.6.2 以上版本支持

隐私覆盖

SDK 1.6.1 以上版本支持

SDK 除了支持通过 FTSessionReplayConfig 配置全局屏蔽级别,还支持在视图级覆盖这些设置。

视图级隐私覆盖:

  • 支持覆盖文本和输入屏蔽级别、触控屏蔽级别,以及图片屏蔽级别(SDK 1.6.2 以上版本支持)
  • 支持设置完全隐藏特定视图

注意:

  • 为了确保正确识别覆盖,应在视图生命周期中尽早应用它们。这可以防止会话重放在应用设置的覆盖之前处理视图的情况。
  • 隐私覆盖会影响视图及其子视图。这意味着,即使覆盖应用于可能不会立即生效的视图(例如,将图片覆盖应用于文本输入),覆盖仍会应用于所有子视图。
  • 隐私覆盖优先级:子视图 > 父视图 > 全局设置

文本和输入覆盖

要覆盖文本和输入隐私,请在视图实例上使用 sessionReplayPrivacyOverrides.textAndInputPrivacy 将其设为 FTTextAndInputPrivacyLevelOverride 枚举中的某个值。若需移除现有覆盖规则,直接将该属性设为 FTTextAndInputPrivacyLevelOverrideNone 即可。

#import <FTMobileSDK/UIView+FTSRPrivacy.h>
   // 对指定视图设置文本和输入覆盖
   myView.sessionReplayPrivacyOverrides.textAndInputPrivacy = FTTextAndInputPrivacyLevelOverrideMaskAll;
   // 移除视图的文本和输入覆盖设置
   myView.sessionReplayPrivacyOverrides.textAndInputPrivacy = FTTextAndInputPrivacyLevelOverrideNone;
   // 对指定视图设置文本和输入覆盖
   myView.sessionReplayPrivacyOverrides.textAndInputPrivacy = .maskAll
   // 移除视图的文本和输入覆盖设置
   myView.sessionReplayPrivacyOverrides.textAndInputPrivacy = .none

触控覆盖

要覆盖触控隐私,请在视图实例上使用 sessionReplayPrivacyOverrides.touchPrivacy 将其设为 FTTouchPrivacyLevelOverride 枚举中的某个值。若需移除现有覆盖规则,直接将该属性设为 FTTouchPrivacyLevelOverrideNone 即可。

#import <FTMobileSDK/UIView+FTSRPrivacy.h>
   // 对指定视图设置触控覆盖
   myView.sessionReplayPrivacyOverrides.touchPrivacy = FTTouchPrivacyLevelOverrideShow;
   // 移除视图的触控覆盖设置
   myView.sessionReplayPrivacyOverrides.touchPrivacy = FTTouchPrivacyLevelOverrideNone;
   // 对指定视图设置触控覆盖
   myView.sessionReplayPrivacyOverrides.touchPrivacy = .show;
   // 移除视图的触控覆盖设置
   myView.sessionReplayPrivacyOverrides.touchPrivacy = .none;

图片覆盖

SDK 1.6.2 以上版本支持

要覆盖图片隐私,请在视图实例上使用 sessionReplayPrivacyOverrides.imagePrivacy 将其设为 FTImagePrivacyLevelOverride 枚举中的某个值。若需移除现有覆盖规则,直接将该属性设为 FTImagePrivacyLevelOverrideNone 即可。

可用的图片覆盖级别:

  • FTImagePrivacyLevelOverrideMaskNonBundledOnly: 仅记录 SF Symbols 以及通过 [UIImage imageNamed:] / UIImage(named:) 加载且随 App 打包的图片,网络下载或运行时生成的图片会被屏蔽。
  • FTImagePrivacyLevelOverrideMaskAll: 屏蔽所有图片。
  • FTImagePrivacyLevelOverrideMaskNone: 记录所有图片,包括网络下载或运行时生成的图片,请确认图片不包含敏感内容后使用。
#import <FTMobileSDK/UIView+FTSRPrivacy.h>
   // 对指定视图设置图片覆盖
   myImageView.sessionReplayPrivacyOverrides.imagePrivacy = FTImagePrivacyLevelOverrideMaskNonBundledOnly;
   // 移除视图的图片覆盖设置
   myImageView.sessionReplayPrivacyOverrides.imagePrivacy = FTImagePrivacyLevelOverrideNone;
   // 对指定视图设置图片覆盖
   myImageView.sessionReplayPrivacyOverrides.imagePrivacy = .maskNonBundledOnly
   // 移除视图的图片覆盖设置
   myImageView.sessionReplayPrivacyOverrides.imagePrivacy = .none

隐藏元素覆盖

对于需要完全隐藏的敏感元素,请使用 sessionReplayPrivacyOverrides.hide 进行设置。

当设置某个元素为隐藏时 ,它将在重放中被标记为 "Hidden" 的占位符替换,并且不会记录其子视图。

注意:将视图标记为隐藏不会阻止在该元素上记录触控交互。要隐藏触控交互,除了将元素标记为隐藏外,还要使用触控覆盖

#import <FTMobileSDK/UIView+FTSRPrivacy.h>
   // 对指定视图标记隐藏元素覆盖
   myView.sessionReplayPrivacyOverrides.hide = YES;
   // 移除视图的隐藏元素覆盖设置
   myView.sessionReplayPrivacyOverrides.hide = NO;
   // 对指定视图标记隐藏元素覆盖
   myView.sessionReplayPrivacyOverrides.hide = true;
   // 移除视图的隐藏元素覆盖设置
   myView.sessionReplayPrivacyOverrides.hide = false;

Webview Session Replay

SDK 1.6.2 以上版本支持

WebView Session Replay,需要在 WebView 访问页面集成Web 监测 SDK,并在 Webview 开启 Session Replay。

//webview RUM 设置以外
window.DATAFLUX_RUM.startSessionReplayRecording();

代码和配置参考

文档评价

文档内容是否对您有帮助? ×