页面回放
该功能还在进一步开发完善中,功能及使用方式可能会发生变化。
背景
页面回放提供 App 发生崩溃异常前的页面变化情况,帮助了解崩溃发生前用户交互路径,准确了解错误对应用户体验的影响。
实现原理
页面回放的工作原理是,以每秒一张的速度,截取页面视图层次结构的快照以及对应的屏幕截图。并缓存最后一段时间内的数据。在发生崩溃错误时,将缓存的数据一并上报。通过 Bugly 内部的 crash id 将其与对应的崩溃关联后,便可以在崩溃个例中查找对应的页面回放信息。
为保护用户隐私,所有的屏幕截图都会进行模糊处理,以遮盖敏感信息。模糊处理通过对整个截图增加一定程度的“马赛克”处理,将文字、图像等信息进行了模糊化,保留了页面的基本结构信息。
为了避免部分场景下模糊处理后导致整个截图无法辨认,同时保留了部分白名单机制,业务可以根据情况可以将部分页面元素加入白名单,不进行模糊处理。关于模糊处理的方式,详见后续 API 说明。
开启方式
页面回放是新增能力,因此需要 SDK 升级至 2.8.2 及以后版本方可开启。成功开启该功能,需要同时具备以下条件:
- 接入对应的模块:默认采用 Cocoapods 集成 Bugly SDK 时,默认包含有该模块;若使用分模块集成的方案,则需要增加对该模块的引用:
target 'XXX' do
pod 'Bugly' # 直接接入了 Bugly 所有模块
# 两种接入方式中选择一种即可,不可以同时存在
pod 'Bugly/ViewCapture' # 单独接入 ViewCapture 模块
end
- 需要在 SDK 初始化时启动的模块中包含
BUGLY_MODULE_VIEW_CAPTURE
或使用RM_MODULE_ALL
:
[Bugly start:@[BUGLY_MODULE_VIEW_CAPTURE, /*...*/] config:config completeHandler:^{/*...*/}];
// 或直接使用
[Bugly start:RM_MODULE_ALL config:config completeHandler:^{/*...*/}];
- 需要在 SDK 配置中开启页面回放模块配置:
其中各个配置项的含义如下:
sample_ratio
: 通用采样率,用于控制 ViewCapture 的采样频率。默认值为 0,业务视需求调整采样,建议设置值在 0.01 ~ 0.1 之间;scale
: 截图图片缩放比例,默认值为 0.6。如非必要,建议保持默认值,越大的缩放值截图越清晰,但会导致资源开销过大;mask_pixel_size
: “马赛克”遮罩像素大小,默认值为 3。该值越大图像模糊程度越高,过高的模糊值会导致截图的结构信息丢失,太低则无法有效隐藏隐私信息;capture_interval
: 页面截图间隔时间,单位为秒,默认值为 1;max_cache_count
: 截图缓存最大数量,默认值为 10。当截图数量超过该值时,将自动清理最旧的截图;
- 成功开启后,会在 SDK 启动时,输出的模块开启日志中包含对应的模块名称:
[Bugly][Event][BuglyDAUReporter.m:100][SDK setup] Activate Module:(
...
"view_capture"
...
)
API 说明
为了充分保护用户隐私,默认情况下 Bugly 会对所有的页面截图进行模糊处理。但为满足业务的需求,同时支持业务按照自身需求,对部分页面元素进行白名单处理。在白名单中的元素将不进行模糊处理。
目前支持两种方式添加白名单:
- 通过 UIView 的类名添加白名单:
@interface BuglyViewCapturePlugin : NSObject
+ (void)addIgnoreMaskViewClass:(Class)viewCls;
@end
通过该接口添加白名单,所有该类的实例对象都将不进行模糊处理。
- 通过 UIView 对象属性添加白名单:
@interface UIView (BuglyViewCapture)
/**
* 是否让 Bugly View Capture 忽略对该 View 进行模糊处理
* 默认为 NO,将会对该 View 进行模糊处理
* 若设置为 YES,该 View 及其子 View 都不进行模糊处理
*/
@property (nonatomic, assign) BOOL buglyViewCaptureIgnoreMask;
@end
该接口通过使用 UIView 的 Category 添加属性,可以对单个 View 进行设置,更加灵活。
需要特别注意的是,被添加为白名单的 View 元素所在的区域内的所有元素都会忽略模糊处理,在使用时需要尤为注意。
回放数据查看
页面回放数据目前仅提供原始数据查看,相关查看及交互功能还在开发中。
回放数据在发生崩溃后上报,出现在 crash 个例附件中。
回放数据是 App 二次启动后通过通用附件通道上传,因此在调试验证时,需要重启 App 后等待一段时间后才能看到对应的回放数据。
点击下载附件中的view_capture_.zip
文件,解压后,便可以看到按照时间戳命名的页面回放数据。
其中 jpeg 是对应的截屏,json 是对应的页面结构信息。
未来此部分内容会通过 Bugly Web 端进行可视化展示。