SDK Flutter - Initialiser le SDK

Options de configuration pour la méthode start du tracker Flutter

SDK Flutter ⁠-⁠ Initialiser le SDK

  • Flutter 3.41 ou version ultérieure (Dart SDK ^3.0.0).
  • Un backend OpenReplay en v1.26.0 ou 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.

flutter pub add openreplay

Ou ajoutez-le à votre pubspec.yaml :

dependencies:
  openreplay: ^1.0.9

Vous devez passer la projectKey à start(). Vous pouvez obtenir cette valeur depuis votre tableau de bord OpenReplay sous ‘Preferences > Projects’.

Enveloppez 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 navigation

Ajoutez 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.

Consultez comment assainir les données dans les replays Flutter pour plus de détails.

Les 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: bool Capture les erreurs Dart. Les crashs natifs nécessitent toujours un outil de reporting natif. Par défaut : true.
  • analytics: bool Capture les interactions tactiles, les balayages, les écrans et les saisies. Par défaut : true.
  • performances: bool Capture le CPU, la mémoire, la batterie et l’état thermique. Par défaut : true.
  • logs: bool Capture la sortie de debugPrint. Par défaut : true.
  • screen: bool Active la capture des frames. Par défaut : true.
  • screenshotBatchSize: ScreenshotBatchSize Nombre de frames mises en mémoire tampon avant qu’un lot soit empaqueté et envoyé : low (10), normal (20) ou high (30). Par défaut : normal.
  • targetLongEdge: int Cô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: bool Ignore 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: bool Recouvre 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: bool Réservé ; pas encore appliqué. Par défaut : true.
  • debugLogs: bool Active la journalisation propre au SDK. Par défaut : false.
  • debugImages: bool Exporte 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).

serverUrl 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';

Si vous avez des questions sur ce processus, n’hésitez pas à nous contacter sur notre Slack ou à consulter notre Forum.