SDK Flutter - Initialiser le SDK
Prérequis
Section titled Prérequis- Flutter
3.41ou version ultérieure (Dart SDK^3.0.0). - Un backend OpenReplay en
v1.26.0ou version ultérieure. Les backends plus anciens ne signalent pas la prise en charge des frames : les événements sont toujours enregistrés, mais pas l’écran.
Le package n’a aucune dépendance pub : le protocole de transmission, le batching, gzip et le multipart sont entièrement implémentés en Dart, et tout ce qui est natif passe par un unique platform channel.
Installation
Section titled Installationflutter pub add openreplay
Ou ajoutez-le à votre pubspec.yaml :
dependencies:
openreplay: ^1.0.9
Initialisation
Section titled InitialisationVous devez passer la projectKey à start(). Vous pouvez obtenir cette valeur depuis votre tableau de bord OpenReplay sous ‘Preferences > Projects’.
Ajouter le code de suivi
Section titled Ajouter le code de suiviEnveloppez votre application dans OpenReplayWidget, puis démarrez le tracker. Ce wrapper est obligatoire : il fournit la repaint boundary à partir de laquelle les frames sont capturées, donc sans lui, rien n’est enregistré.
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() peut être appelé sans risque avant la première frame : la capture ne commence qu’une fois que OpenReplayWidget a effectué sa mise en page.
Configurer le listener de navigation
Section titled Configurer le listener de navigationAjoutez ORNavigatorObserver à votre MaterialApp (ou CupertinoApp, ou tout Navigator) afin que les routes ajoutées et retirées apparaissent dans la chronologie du replay :
MaterialApp(
navigatorObservers: [ORNavigatorObserver()],
// ...
)
Les routes sont signalées par route.settings.name. Les routes sans nom se rabattent sur leur position dans la pile (route/2), c’est pourquoi les routes nommées donnent des chronologies bien plus lisibles.
Assainir les données
Section titled Assainir les donnéesConsultez comment assainir les données dans les replays Flutter pour plus de détails.
Options d’initialisation
Section titled Options d’initialisationLes options sont passées sous forme d’OROptions à start() :
await OpenReplay.instance.start(
projectKey: 'YOUR_PROJECT_KEY',
options: const OROptions(
logs: false,
targetLongEdge: 1080,
),
);
crashes: boolCapture les erreurs Dart. Les crashs natifs nécessitent toujours un outil de reporting natif. Par défaut :true.analytics: boolCapture les interactions tactiles, les balayages, les écrans et les saisies. Par défaut :true.performances: boolCapture le CPU, la mémoire, la batterie et l’état thermique. Par défaut :true.logs: boolCapture la sortie dedebugPrint. Par défaut :true.screen: boolActive la capture des frames. Par défaut :true.screenshotBatchSize: ScreenshotBatchSizeNombre de frames mises en mémoire tampon avant qu’un lot soit empaqueté et envoyé :low(10),normal(20) ouhigh(30). Par défaut :normal.targetLongEdge: intCôté le plus long d’une frame capturée, en pixels. Plafonne le coût par frame afin qu’il ne varie pas selon la taille de l’écran. Par défaut :720.dedupeFrames: boolIgnore les frames dont les pixels sont identiques, octet pour octet, à la précédente. La lecture n’est pas affectée : le lecteur conserve le dernier instantané situé au moment courant ou avant. Par défaut :true.maskPlatformViews: boolRecouvre les platform views (WebView, cartes, aperçu de la caméra) d’un espace réservé. Elles sont rendues dans des couches natives que Flutter ne peut pas relire, donc sans cette option elles apparaissent vides. Par défaut :true.wifiOnly: boolRéservé ; pas encore appliqué. Par défaut :true.debugLogs: boolActive la journalisation propre au SDK. Par défaut :false.debugImages: boolExporte les frames capturées à des fins de débogage. Par défaut :false.
Deux préréglages sont fournis : OROptions.defaults (toutes les valeurs ci-dessus) et OROptions.defaultDebug (identique, avec debugLogs: true).
URL du serveur
Section titled URL du serveurserverUrl pointe par défaut vers OpenReplay Cloud. Les déploiements auto-hébergés le passent à start(), ou le définissent à l’avance :
OpenReplay.instance.serverUrl = 'https://your.instance.com/ingest';
Modules
Section titled ModulesMéthodes
Section titled MéthodesDes questions ?
Section titled Des questions ?Si vous avez des questions sur ce processus, n’hésitez pas à nous contacter sur notre Slack ou à consulter notre Forum.