Un'app non ha nessun tag script, quindi l'equivalente è un pacchetto e una chiamata; vedi misurare un'app per che cosa ti dà. Il pacchetto Flutter di Skomi non dipende da niente se non da Flutter stesso.
Il codice sorgente, e un'app di dimostrazione che riporta se stessa, stanno su skomi-sdk-flutter.
Avvialo una volta
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Skomi.start(SkomiOptions(appId: 'your-app-id'));
runApp(const MyApp());
}
L'identificativo dell'app viene da Le mie app dentro Skomi. Non è un segreto e appartiene al tuo codice sorgente: identifica un'app invece di autenticarla, esattamente come fa un identificativo di sito.
Dai un nome alle tue schermate
// dovunque una schermata diventi visibile
Skomi.screen('checkout/review', props: {'tier': 'gold'});
Non c'è nessuna cattura automatica dei nomi di rotta, ed è deliberato: il nome della classe di un widget è come il tuo codice chiama una schermata, non come la chiameresti in un report. Fino a 20 proprietà per schermata: testo, numeri, booleani.
Due cose che Flutter non gli può dire
La versione della tua app. Flutter non ha nessuna API di framework per quello, quindi passagliela:
final info = await PackageInfo.fromPlatform(); // package_info_plus
await Skomi.start(SkomiOptions(appId: '…', appVersion: info.version));
Lasciala fuori e ogni schermata riporta senza versione, e il pannello della versione dell'app lo dice invece di tirare a indovinare, che è onesto e poco utile.
Dove vive la coda per quando non c'è rete. Senza un percorso finisce nella cartella temporanea dell'app. Quella è privata dell'app e sopravvive a un riavvio, ma il sistema può reclamarla quando lo spazio scarseggia; dagli un percorso di documenti se perdere una sessione in coda ti importa.
Che cosa ottieni senza chiederlo
Sessioni, schermate, versioni dell'app, suddivisioni per piattaforma, dispositivo e sistema operativo, e un tasso senza crash. La coda sopravvive all'assenza di rete, all'uscita e al crash, e ogni schermata porta un identificativo coniato una volta sola così un lotto rimandato viene riconosciuto invece che contato due volte.
Gira su Android, iOS, macOS, Windows e Linux. Una versione web compila e non raccoglie niente, di proposito: un'applicazione Flutter web è un sito, e un sito riceve lo script.
Errori - che cosa cattura, e che cosa non può
try {
await checkout();
} catch (error, stack) {
Skomi.captureError(error, stack: stack);
showRetry();
}
start si concatena a FlutterError.onError e a PlatformDispatcher.instance.onError, quindi quello che avevi già installato continua a funzionare. Cattura gli errori sollevati dentro la framework Flutter e gli errori non gestiti sull'isolate di radice.
⚠ Non è un sistema di segnalazione dei crash e non va usato come tale. Un crash nativo (un segfault nel C++ di un plugin, una chiusura per memoria esaurita, una NSException da un canale di piattaforma) uccide l'isolate che l'avrebbe segnalato. Tieni Crashlytics, Sentry o la segnalazione dello store stesso per quelli. Quello che Skomi aggiunge è la metà in Dart, sulla stessa pagina degli errori che segnali tu, e un tasso senza crash che puoi leggere accanto ai numeri delle tue versioni.
I guasti sono raggruppati per tipo, mai per messaggio: un messaggio porta identificativi, percorsi e importi, quindi raggrupparci sopra dà una riga per occorrenza e un report che non dice niente.
Controlla che funzioni
Fai girare l'app, passa fra due schermate, e guarda la tua dashboard. Se non arriva niente, le cause solite sono un identificativo di app dell'app sbagliata e uno start che non è mai stato atteso.