Flutter SDK - Инициализация SDK
Требования
Section titled Требования- Flutter
3.41или новее (Dart SDK^3.0.0). - Бэкенд OpenReplay версии
v1.26.0или новее. Более старые бэкенды не поддерживают кадры: события по-прежнему записываются, а экран — нет.
У пакета нет зависимостей из pub — протокол передачи, пакетирование, gzip и multipart полностью реализованы на Dart, а всё нативное проходит через единственный platform channel.
Установка
Section titled Установкаflutter pub add openreplay
Или добавьте его в ваш pubspec.yaml:
dependencies:
openreplay: ^1.0.9
Инициализация
Section titled ИнициализацияВы должны передать 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 пройдёт layout.
Настройка слушателя навигации
Section titled Настройка слушателя навигацииДобавьте ORNavigatorObserver в ваш MaterialApp (или CupertinoApp, или любой Navigator), чтобы добавляемые и удаляемые маршруты отображались на временной шкале воспроизведения:
MaterialApp(
navigatorObservers: [ORNavigatorObserver()],
// ...
)
Маршруты передаются по route.settings.name. Для безымянных маршрутов используется их позиция в стеке (route/2), поэтому именованные маршруты делают временную шкалу гораздо более читаемой.
Очистка данных
Section titled Очистка данныхПодробнее см. как очищать данные в записях Flutter.
Параметры инициализации
Section titled Параметры инициализацииПараметры передаются в start() в виде OROptions:
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Закрывает platform views (WebView, карты, превью камеры) заглушкой. Они отрисовываются в нативных слоях, которые Flutter не может считать, поэтому без этого параметра они выглядят пустыми. По умолчанию:true.wifiOnly: boolЗарезервирован; пока не применяется. По умолчанию:true.debugLogs: boolВключает собственное логирование SDK. По умолчанию:false.debugImages: boolСохраняет захваченные кадры для отладки. По умолчанию:false.
Доступны два пресета: OROptions.defaults (все перечисленные выше значения) и OROptions.defaultDebug (то же самое, но с debugLogs: true).
URL сервера
Section titled URL сервераПо умолчанию serverUrl указывает на OpenReplay Cloud. В self-hosted развёртываниях его передают в start() или задают заранее:
OpenReplay.instance.serverUrl = 'https://your.instance.com/ingest';
Модули
Section titled МодулиМетоды
Section titled МетодыОстались вопросы?
Section titled Остались вопросы?Если у вас есть какие-либо вопросы об этом процессе, не стесняйтесь обращаться к нам в нашем Slack или загляните на наш Форум.