Flutter SDK - 初始化 SDK
- Flutter
3.41或更高版本(Dart SDK^3.0.0)。 - OpenReplay 后端
v1.26.0或更高版本。较旧的后端不支持帧(frames):事件仍会被记录,但屏幕不会。
该软件包没有任何 pub 依赖——传输协议、批处理、gzip 和 multipart 全部用 Dart 实现,所有原生功能都通过单一的平台通道(platform channel)完成。
flutter pub add openreplay
或者将其添加到您的 pubspec.yaml 中:
dependencies:
openreplay: ^1.0.9
您必须将 projectKey 传给 start()。您可以在 OpenReplay 仪表盘的 ‘Preferences > Projects’ 下获取该值。
添加跟踪代码
Section titled 添加跟踪代码用 OpenReplayWidget 包裹您的应用,然后启动跟踪器。该包装组件是必需的:它提供了用于捕获帧的重绘边界(repaint boundary),没有它将不会录制任何内容。
import 'package:flutter/material.dart';
import 'package:openreplay/openreplay.dart';
void main() {
runApp(const OpenReplayWidget(child: MyApp()));
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await OpenReplay.instance.start(
projectKey: 'YOUR_PROJECT_KEY',
// not required if you're using our SaaS version
serverUrl: 'https://your.instance.com/ingest',
);
});
}
@override
Widget build(BuildContext context) => MaterialApp(
// records screen transitions
navigatorObservers: [ORNavigatorObserver()],
home: const HomePage(),
);
}
start() 可以安全地在第一帧之前调用——只有在 OpenReplayWidget 完成布局后才会开始捕获。
设置导航监听器
Section titled 设置导航监听器将 ORNavigatorObserver 添加到您的 MaterialApp(或 CupertinoApp,或任意 Navigator)中,这样 push 和 pop 的路由就会显示在回放时间线中:
MaterialApp(
navigatorObservers: [ORNavigatorObserver()],
// ...
)
路由以 route.settings.name 上报。未命名的路由会回退为其在栈中的位置(route/2),因此使用命名路由可以让时间线更易读。
有关更多详情,请参阅如何在 Flutter 回放中对数据进行脱敏。
初始化选项
Section titled 初始化选项选项以 OROptions 的形式传给 start():
await OpenReplay.instance.start(
projectKey: 'YOUR_PROJECT_KEY',
options: const OROptions(
logs: false,
targetLongEdge: 1080,
),
);
crashes: bool捕获 Dart 错误。原生崩溃仍需要原生崩溃上报工具。默认值:true。analytics: bool捕获触摸、滑动、屏幕和输入。默认值:true。performances: bool捕获 CPU、内存、电池和温度状态。默认值:true。logs: bool捕获debugPrint输出。默认值:true。screen: bool启用帧捕获。默认值:true。screenshotBatchSize: ScreenshotBatchSize打包并上传一个批次之前缓冲的帧数——low(10)、normal(20)或high(30)。默认值:normal。targetLongEdge: int捕获帧的最长边,单位为像素。限制每帧的开销,使其不随屏幕尺寸波动。默认值:720。dedupeFrames: bool跳过像素与上一帧逐字节相同的帧。回放不受影响——播放器会保持当前时间点或之前的最后一个快照。默认值:true。maskPlatformViews: bool用占位符覆盖平台视图(WebView、地图、相机预览)。它们在 Flutter 无法回读的原生图层中渲染,因此不启用此选项时它们会显示为空白。默认值:true。wifiOnly: bool预留选项;尚未生效。默认值:true。debugLogs: bool启用 SDK 自身的日志。默认值:false。debugImages: bool导出捕获的帧以便调试。默认值:false。
提供了两个预设:OROptions.defaults(即以上所有默认值)和 OROptions.defaultDebug(相同,但 debugLogs: true)。
服务器 URL
Section titled 服务器 URLserverUrl 默认指向 OpenReplay Cloud。自托管部署需要将其传给 start(),或者预先设置:
OpenReplay.instance.serverUrl = 'https://your.instance.com/ingest';