Im Crashlytics-Dashboard können Sie auf ein Problem klicken, um einen detaillierten Ereignisbericht zu erhalten. Sie können diese Berichte anpassen, um besser nachvollziehen zu können, was in Ihrer App passiert und unter welchen Umständen Ereignisse an Crashlytics gemeldet werden.
Melden Sie nicht abgefangene Ausnahmen und abgefangene Ausnahmen an Crashlytics.
Instrumentieren Sie Ihre App, um benutzerdefinierte Schlüssel, benutzerdefinierte Log-Nachrichten und Nutzer-IDs zu protokollieren.
Wenn Ihre App das Firebase SDK für Google Analytics verwendet, erhalten Sie automatisch Breadcrumb-Logs. Diese Logs geben Ihnen Einblick in Nutzeraktionen, die zu einem in Ihrer App erfassten Crashlytics-Ereignis führen.
Deaktivieren Sie die automatische Absturzmeldung und aktivieren Sie die Opt-in-Berichterstellung für Ihre Nutzer. Standardmäßig werden in Crashlytics plattformspezifische Absturzberichte für alle Nutzer Ihrer App erfasst.
Nicht abgefangene Ausnahmen melden
Sie können alle „fatalen“ Fehler, die im Flutter-Framework ausgegeben werden, automatisch abfangen, indem Sie FlutterError.onError
mit FirebaseCrashlytics.instance.recordFlutterFatalError
überschreiben. Alternativ können Sie auch „nicht schwerwiegende“ Ausnahmen abfangen, indem Sie FlutterError.onError
mit FirebaseCrashlytics.instance.recordFlutterError
überschreiben:
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 nicht vom Flutter-Framework 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 für die aktuelle Isolate
:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
Erkannte Ausnahmen melden
Zusätzlich zum automatischen Melden von App-Abstürzen können Sie mit Crashlytics nicht schwerwiegende Ausnahmefehler aufzeichnen und sie werden Ihnen gesendet, wenn das nächste schwerwiegende Ereignis gemeldet wird oder wenn die App neu gestartet wird.
Verwenden Sie die Methode recordError
, um nicht schwerwiegende Ausnahmen in den Catch-Blöcken Ihrer App aufzuzeichnen. 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 zum Fehler protokollieren. Das ist mit der information
-Eigenschaft möglich:
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 Console als nicht schwerwiegende Probleme angezeigt. Die Problemzusammenfassung enthält alle Statusinformationen, die Sie normalerweise bei Abstürzen erhalten, sowie Aufschlüsselungen nach Version und Hardwaregerät.
Crashlytics verarbeitet Ausnahmen in einem dedizierten Hintergrundthread, um die Leistung Ihrer App so wenig wie möglich zu beeinträchtigen. Um den Netzwerkverkehr Ihrer Nutzer zu reduzieren, begrenzt Crashlytics bei Bedarf die Anzahl der Berichte, die vom Gerät gesendet werden.
Benutzerdefinierte Schlüssel hinzufügen
Mit benutzerdefinierten Schlüsseln können Sie den spezifischen Status Ihrer App abrufen, der zu einem Absturz führte. Sie können Ihren Absturzberichten beliebige Schlüssel/Wert-Paare zuordnen und dann die benutzerdefinierten Schlüssel verwenden, um in der Firebase-Konsole nach Absturzberichten zu suchen und sie zu filtern.
Im Crashlytics-Dashboard können Sie nach Problemen suchen, die einem benutzerdefinierten Schlüssel entsprechen.
Wenn Sie ein bestimmtes Problem in der Konsole untersuchen, können Sie die zugehörigen benutzerdefinierten Schlüssel für jedes Ereignis auf dem Tab Schlüssel ansehen und die Ereignisse sogar nach benutzerdefinierten Schlüsseln filtern (Menü Filter oben auf der Seite).
Verwenden Sie die Instanzmethode setCustomKey
, um Schlüssel/Wert-Paare festzulegen. Hier 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);
Benutzerdefinierte Logmeldungen hinzufügen
Um mehr Kontext zu den Ereignissen zu erhalten, die zu einem Absturz geführt haben, können Sie Ihrer App benutzerdefinierte Crashlytics-Logs hinzufügen. Crashlytics verknüpft die Logs mit Ihren Absturzdaten und zeigt sie in der Firebase Console auf dem Tab Crashlytics Logs an.
Verwenden Sie log
, um Probleme einzugrenzen. Beispiel:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Nutzerkennungen festlegen
Um ein Problem zu diagnostizieren, ist es oft hilfreich zu wissen, welche Ihrer Nutzer einen bestimmten Absturz erlebt haben. Crashlytics bietet eine Möglichkeit, Nutzer in Ihren Absturzberichten anonym zu identifizieren.
Wenn Sie Ihren Berichten User-IDs hinzufügen möchten, weisen Sie jedem Nutzer eine eindeutige Kennung in Form einer ID-Nummer, eines Tokens oder eines gehashten Werts zu:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Wenn Sie eine Nutzer-ID löschen müssen, nachdem Sie sie festgelegt haben, setzen Sie den Wert auf einen leeren String zurück. Wenn Sie eine Nutzerkennung löschen, werden vorhandene Crashlytics-Datensätze nicht entfernt. Wenn Sie Datensätze löschen müssen, die mit einer Nutzer-ID verknüpft sind, wenden Sie sich an den Firebase-Support.
Navigationspfad-Logs abrufen
Navigationspfadlogs geben Ihnen einen besseren Einblick in die Interaktionen eines Nutzers mit Ihrer App, die zu einem Absturz‑, nicht schwerwiegenden oder ANR-Ereignis geführt haben. Diese Protokolle können hilfreich sein, wenn Sie versuchen, ein Problem zu reproduzieren und zu beheben.
Breadcrumb-Logs basieren auf Google Analytics. Damit Sie sie erhalten, müssen Sie Google Analytics für Ihr Firebase-Projekt aktivieren und das Firebase SDK für Google Analytics in Ihre App einfügen. Wenn diese Voraussetzungen erfüllt sind, werden Breadcrumb-Logs automatisch in die Daten eines Ereignisses auf dem Tab Logs aufgenommen, wenn Sie die Details eines Problems aufrufen.
Das Analytics SDK protokolliert das screen_view
-Ereignis automatisch. Dadurch kann in den Navigationspfadlogs eine Liste der Bildschirme angezeigt werden, die vor dem Absturz‑, nicht schwerwiegenden oder ANR-Ereignis aufgerufen wurden. Ein screen_view
-Breadcrumb-Log enthält einen firebase_screen_class
-Parameter.
Breadcrumb-Logs werden auch mit allen benutzerdefinierten Ereignissen gefüllt, die Sie manuell in der Sitzung des Nutzers protokollieren, einschließlich der Parameterdaten des Ereignisses. Anhand dieser Daten lässt sich eine Reihe von Nutzeraktionen nachvollziehen, die zu einem Absturz‑, nicht schwerwiegenden oder ANR-Ereignis geführt haben.
Sie können die Erhebung und Verwendung von Google Analytics-Daten steuern, einschließlich der Daten, die in Breadcrumb-Logs enthalten sind.
Berichterstellung für die Einwilligung aktivieren
Standardmäßig erfasst Crashlytics automatisch Absturzberichte für alle Nutzer Ihrer App. Um Nutzern mehr Kontrolle über die von ihnen gesendeten Daten zu geben, können Sie das Opt-in-Reporting aktivieren. Dazu deaktivieren Sie das automatische Reporting und senden Daten nur dann an Crashlytics, wenn Sie dies in Ihrem Code festlegen.
Automatische Erhebung nativ deaktivieren:
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
-Block 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 Erhebung für ausgewählte Nutzer, indem Sie den Crashlytics-Überschreibungsbefehl für die Datenerhebung zur Laufzeit aufrufen. Der Überschreibungswert bleibt bei allen nachfolgenden Starts Ihrer App erhalten, sodass Crashlytics automatisch Berichte für diesen Nutzer erfassen kann.
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Wenn der Nutzer die Datenerhebung später deaktiviert, können Sie
false
als Überschreibungswert übergeben. Dieser wird beim nächsten Start der App durch den Nutzer angewendet und bleibt bei allen nachfolgenden Starts für diesen Nutzer bestehen.
Daten für Absturzinformationen verwalten
Mit Absturzinformationen können Sie Probleme beheben, indem Sie Ihre anonymisierten Stacktraces mit Traces aus anderen Firebase-Apps vergleichen und feststellen, ob Ihr Problem Teil eines größeren Trends ist. Bei vielen Problemen bietet Crash Insights sogar Ressourcen, die Ihnen bei der Fehlerbehebung helfen.
Crash Insights verwendet aggregierte Absturzdaten, um allgemeine Stabilitätstrends zu ermitteln. Wenn Sie die Daten Ihrer App nicht freigeben möchten, können Sie Crash Insights im Menü Crash Insights oben in der Crashlytics-Problemliste in der Firebase-Konsole deaktivieren.