Eine App hat kein Skript-Tag, die Entsprechung ist also ein Paket und ein Aufruf; siehe eine App messen dazu, was Sie damit bekommen. Das Skomi-Flutter-Paket hängt von nichts außer Flutter selbst ab.
Der Quelltext und eine Demo-App, die sich selbst meldet, liegen unter skomi-sdk-flutter.
Einmal starten
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Skomi.start(SkomiOptions(appId: 'your-app-id'));
runApp(const MyApp());
}
Die App-ID kommt aus My Apps in Skomi. Sie ist kein Geheimnis und gehört in Ihren Quelltext: sie kennzeichnet eine App, statt eine zu authentifizieren, genau wie eine Website-ID.
Benennen Sie Ihre Bildschirme
// dort, wo ein Bildschirm sichtbar wird
Skomi.screen('checkout/review', props: {'tier': 'gold'});
Es gibt keine automatische Erfassung von Routennamen, und das ist Absicht: Ein Widget-Klassenname ist das, was Ihr Code einen Bildschirm nennt, nicht das, was Sie in einem Bericht so nennen würden. Bis zu 20 Eigenschaften je Bildschirm: Zeichenketten, Zahlen, Wahrheitswerte.
Zwei Dinge, die Flutter ihm nicht sagen kann
Ihre App-Version. Flutter hat dafür keine Framework-API, geben Sie sie also mit:
final info = await PackageInfo.fromPlatform(); // package_info_plus
await Skomi.start(SkomiOptions(appId: '…', appVersion: info.version));
Lassen Sie sie weg, meldet jeder Bildschirm keine Version, und der Bereich App-Version sagt das dann, statt zu raten, was ehrlich und wenig nützlich ist.
Wo die Offline-Warteschlange liegt. Ohne Pfad landet sie im temporären Verzeichnis der App. Das ist app-privat und übersteht einen Neustart, aber das Betriebssystem kann es bei Speicherknappheit zurückfordern; geben Sie einen Dokumentenpfad an, wenn Ihnen der Verlust einer wartenden Sitzung etwas ausmacht.
Was Sie ohne Zutun bekommen
Sitzungen, Bildschirme, App-Versionen, Aufschlüsselungen nach Plattform, Gerät und Betriebssystem sowie eine absturzfreie Rate. Die Warteschlange übersteht Offline-Sein, Beenden und Abstürze, und jeder Bildschirm trägt eine einmal vergebene Kennung, sodass ein wiederholter Stapel erkannt statt zweimal gezählt wird.
Läuft auf Android, iOS, macOS, Windows und Linux. Ein Web-Build kompiliert und erhebt absichtlich nichts: eine Flutter-Web-App ist eine Website, und eine Website bekommt das Skript.
Fehler - was es erfasst und was nicht
try {
await checkout();
} catch (error, stack) {
Skomi.captureError(error, stack: stack);
showRetry();
}
start hängt sich an FlutterError.onError und PlatformDispatcher.instance.onError, alles, was Sie bereits installiert haben, funktioniert also weiter. Es erfasst Fehler, die im Flutter-Framework auftreten, und unbehandelte Fehler im Root-Isolate.
⚠ Es ist kein Absturzmelder und darf nicht als einer benutzt werden. Ein nativer Absturz (ein Segfault im C++ eines Plugins, ein Abschuss wegen Speichermangels, eine NSException aus einem Platform Channel) tötet das Isolate, das ihn hätte melden sollen. Behalten Sie dafür Crashlytics, Sentry oder die Meldung des Stores. Was Skomi hinzufügt, ist die Dart-Hälfte, auf derselben Seite wie die Fehler, die Sie selbst melden, und eine absturzfreie Rate, die Sie neben Ihren Versionszahlen lesen können.
Fehler werden nach Typ gruppiert, nie nach Meldung: Eine Meldung trägt Kennungen, Pfade und Beträge, eine Gruppierung danach ergibt also eine Zeile je Vorkommen und einen Bericht, der nichts sagt.
Prüfen, ob es funktioniert
Starten Sie die App, wechseln Sie zwischen zwei Bildschirmen und sehen Sie in Ihr Dashboard. Wenn nichts ankommt, sind die üblichen Ursachen eine App-ID aus der falschen App und ein start, auf das nie gewartet wurde.