跳转至

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;
   srConfig.sampleRate = 100;
   [[FTRumSessionReplay sharedInstance] startWithSessionReplayConfig:srConfig];
   let srConfig = FTSessionReplayConfig.init()
   srConfig.touchPrivacy = .show
   srConfig.textAndInputPrivacy = .maskSensitiveInputs
   srConfig.imagePrivacy = .maskNonBundledOnly
   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 以上版本支持
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();

代码和配置参考

文档评价

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