In diesem Leitfaden wird beschrieben, wie Sie Ihre Absturzberichte mithilfe von Crashlytics-APIs anpassen. Standardmäßig sammelt Crashlytics automatisch plattformnative Absturzberichte für alle Benutzer Ihrer App (Sie können auch automatische Absturzberichte deaktivieren und stattdessen Opt-in-Berichte für Ihre Benutzer aktivieren). Crashlytics bietet standardmäßig fünf Protokollierungsmechanismen: benutzerdefinierte Schlüssel , benutzerdefinierte Protokolle , Benutzerkennungen , abgefangene und nicht abgefangene Ausnahmen.
Bei Flutter-Apps werden schwerwiegende Berichte in Echtzeit an Crashlytics gesendet, ohne dass der Benutzer die Anwendung neu starten muss. Nicht schwerwiegende Berichte werden auf die Festplatte geschrieben, um zusammen mit dem nächsten schwerwiegenden Bericht oder beim Neustart der App gesendet zu werden.
Nicht erfasste Ausnahmen melden
Sie können automatisch alle „fatalen“ Fehler abfangen, die innerhalb des Flutter-Frameworks ausgelöst werden, indem Sie FlutterError.onError
mit FirebaseCrashlytics.instance.recordFlutterFatalError
überschreiben. Alternativ können Sie FlutterError.onError
mit FirebaseCrashlytics.instance.recordFlutterError
überschreiben, um auch „nicht schwerwiegende“ Ausnahmen abzufangen:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
Asynchrone Fehler
Asynchrone Fehler werden vom Flutter-Framework nicht abgefangen:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
Um solche Fehler abzufangen, können Sie den PlatformDispatcher.instance.onError
Handler verwenden:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
Fehler außerhalb von Flutter
Um Fehler abzufangen, die außerhalb des Flutter-Kontexts auftreten, installieren Sie einen Fehler-Listener auf dem aktuellen Isolate
:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
Abgefangene Ausnahmen melden
Zusätzlich zum automatischen Melden der Abstürze Ihrer App können Sie mit Crashlytics nicht schwerwiegende Ausnahmen aufzeichnen und Ihnen senden, wenn das nächste Mal ein schwerwiegendes Ereignis gemeldet wird oder wenn die App neu gestartet wird.
Verwenden Sie die recordError
Methode, um nicht schwerwiegende Ausnahmen in den Catch-Blöcken Ihrer App aufzuzeichnen. Zum Beispiel:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
Möglicherweise möchten Sie auch weitere Informationen über den Fehler protokollieren, was mit der information
-Eigenschaft möglich ist:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
Diese Ausnahmen werden in der Firebase-Konsole als nicht schwerwiegende Probleme angezeigt. Die Problemzusammenfassung enthält alle Zustandsinformationen, die Sie normalerweise bei Abstürzen erhalten, zusammen mit Aufschlüsselungen nach Version und Hardwaregerät.
Crashlytics verarbeitet Ausnahmen in einem dedizierten Hintergrundthread, um die Auswirkungen auf die Leistung Ihrer App zu minimieren. Um den Netzwerkverkehr Ihrer Benutzer zu reduzieren, begrenzt Crashlytics bei Bedarf die Anzahl der vom Gerät gesendeten Berichte.
Fügen Sie benutzerdefinierte Schlüssel hinzu
Benutzerdefinierte Schlüssel helfen Ihnen dabei, den spezifischen Zustand Ihrer App zu ermitteln, der zu einem Absturz geführt hat. Sie können Ihren Absturzberichten beliebige Schlüssel/Wert-Paare zuordnen und dann die benutzerdefinierten Schlüssel verwenden, um Absturzberichte in der Firebase-Konsole zu suchen und zu filtern.
Im Crashlytics-Dashboard können Sie nach Problemen suchen, die mit einem benutzerdefinierten Schlüssel übereinstimmen.
Wenn Sie ein bestimmtes Problem in der Konsole überprüfen, können Sie die zugehörigen benutzerdefinierten Schlüssel für jedes Ereignis anzeigen (Unterregisterkarte „Schlüssel “) und die Ereignisse sogar nach benutzerdefinierten Schlüsseln filtern (Menü „Filter“ oben auf der Seite).
Verwenden Sie die setCustomKey
Instanzmethode, um Schlüssel/Wert-Paare festzulegen. Hier sind einige Beispiele:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
Fügen Sie benutzerdefinierte Protokollmeldungen hinzu
Um sich mehr Kontext für die Ereignisse zu verschaffen, die zu einem Absturz geführt haben, können Sie Ihrer App benutzerdefinierte Crashlytics-Protokolle hinzufügen. Crashlytics ordnet die Protokolle Ihren Absturzdaten zu und zeigt sie in der Firebase-Konsole auf der Registerkarte Crashlytics-Protokolle an.
Verwenden Sie log
, um Probleme zu lokalisieren. Zum Beispiel:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Benutzer-IDs festlegen
Um ein Problem zu diagnostizieren, ist es oft hilfreich zu wissen, bei welchen Ihrer Benutzer ein bestimmter Absturz aufgetreten ist. Crashlytics bietet eine Möglichkeit, Benutzer in Ihren Absturzberichten anonym zu identifizieren.
Um Benutzer-IDs zu Ihren Berichten hinzuzufügen, weisen Sie jedem Benutzer eine eindeutige Kennung in Form einer ID-Nummer, eines Tokens oder eines Hash-Werts zu:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Wenn Sie jemals eine Benutzerkennung löschen müssen, nachdem Sie sie festgelegt haben, setzen Sie den Wert auf eine leere Zeichenfolge zurück. Durch das Löschen einer Benutzerkennung werden vorhandene Crashlytics-Datensätze nicht entfernt. Wenn Sie mit einer Benutzer-ID verknüpfte Datensätze löschen müssen, wenden Sie sich an den Firebase-Support .
Opt-in-Berichterstellung aktivieren
Standardmäßig sammelt Crashlytics automatisch Absturzberichte für alle Benutzer Ihrer App. Um Benutzern mehr Kontrolle über die von ihnen gesendeten Daten zu geben, können Sie die Opt-in-Berichterstellung aktivieren, indem Sie die automatische Berichterstellung deaktivieren und nur dann Daten an Crashlytics senden, wenn Sie dies in Ihrem Code wünschen:
Deaktivieren Sie die automatische Erfassung nativ:
Apple-Plattformen
Fügen Sie Ihrer
Info.plist
Datei einen neuen Schlüssel hinzu:- Schlüssel:
FirebaseCrashlyticsCollectionEnabled
- Wert:
false
Android
Fügen Sie im
application
IhrerAndroidManifest.xml
Datei einmeta-data
Tag hinzu, um die automatische Erfassung zu deaktivieren:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Schlüssel:
Aktivieren Sie die Erfassung für ausgewählte Benutzer, indem Sie zur Laufzeit die Außerkraftsetzung der Crashlytics-Datenerfassung aufrufen.
Der Überschreibungswert bleibt beim Start Ihrer App bestehen, sodass Crashlytics automatisch Berichte sammeln kann. Um die automatische Absturzmeldung zu deaktivieren, übergeben Sie als Überschreibungswert
false
. Bei Festlegung auffalse
gilt der neue Wert erst bei der nächsten Ausführung der App.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Crash Insights-Daten verwalten
Crash Insights hilft Ihnen bei der Lösung von Problemen, indem es Ihre anonymisierten Stack-Traces mit Traces aus anderen Firebase-Apps vergleicht und Sie darüber informiert, ob Ihr Problem Teil eines größeren Trends ist. Bei vielen Problemen stellt Crash Insights sogar Ressourcen bereit, die Ihnen beim Debuggen des Absturzes helfen.
Crash Insights verwendet aggregierte Absturzdaten, um allgemeine Stabilitätstrends zu identifizieren. Wenn Sie die Daten Ihrer App lieber nicht teilen möchten, können Sie Crash Insights über das Crash Insights- Menü oben in Ihrer Crashlytics-Problemliste in der Firebase-Konsole deaktivieren.