Absturzberichte für Flutter anpassen

Plattform auswählen: iOS+ Android Flutter Unity


Sie können auf ein Problem klicken, um einen detaillierten Ereignisbericht im Dashboard DevOps & Engagement > Crashlytics der Firebase-Konsole aufzurufen. Sie können diese Berichte anpassen, um besser zu verstehen, was in Ihrer App passiert und welche Umstände zu den an Crashlytics gemeldeten Ereignissen geführt haben.

Ausnahmen melden

Nicht erfasste Ausnahmen melden

Sie können alle „schwerwiegenden“ Fehler, die im Flutter-Framework auftreten, automatisch abfangen, indem Sie FlutterError.onError mit FirebaseCrashlytics.instance.recordFlutterFatalError überschreiben. Alternativ können Sie auch „nicht schwerwiegende“ Ausnahmen erfassen, 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 vom Flutter-Framework nicht abgefangen:

ElevatedButton(
  onPressed: () async {
    throw Error();
  }
  ...
)

Solche Fehler können Sie mit dem Handler PlatformDispatcher.instance.onError abfangen:

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

Wenn Sie Fehler abfangen möchten, die außerhalb des Flutter-Kontexts auftreten, installieren Sie einen Error-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);

Abgefangene Ausnahmen melden

Zusätzlich zur automatischen Meldung von Abstürzen Ihrer App können Sie mit Crashlytics nicht schwerwiegende Ausnahmen aufzeichnen und sich diese beim nächsten Mal, wenn ein schwerwiegendes Ereignis gemeldet wird, oder beim Neustart der App senden lassen.

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. Dies ist mit dem Attribut information 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 im Dashboard DevOps & Engagement > Crashlytics der Firebase-Konsole 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 Auswirkungen auf die Leistung Ihrer App zu minimieren. 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, der zu einem Absturz führte, abrufen. Sie können Ihren Absturzberichten beliebige Schlüssel/Wert-Paare zuordnen und dann die benutzerdefinierten Schlüssel verwenden, um Absturzberichte im Dashboard DevOps & Engagement > Crashlytics der Firebase-Konsole zu suchen und zu filtern.

  • Im Dashboard können Sie nach Problemen suchen, die mit einem benutzerdefinierten Schlüssel übereinstimmen.

  • Wenn Sie sich ein bestimmtes Problem im Dashboard ansehen, können Sie die zugehörigen benutzerdefinierten Schlüssel für jedes Ereignis aufrufen (Untertab Schlüssel) 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 Logeinträge hinzufügen

Wenn Sie mehr Kontext zu den Ereignissen vor einem Absturz benötigen, können Sie Ihrer App benutzerdefinierte Crashlytics-Logs hinzufügen. Crashlytics verknüpft die Logs mit Ihren Absturzdaten und zeigt sie auf dem Tab Logs an, wenn Sie die Details eines Problems aufrufen. Alle Probleme finden Sie in der Firebase Console im Dashboard DevOps & Engagement > Crashlytics.

Verwenden Sie log, um Probleme zu lokalisieren. Beispiel:

FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");

Nutzer-IDs festlegen

Um ein Problem zu diagnostizieren, ist es oft hilfreich zu wissen, bei welchen Nutzern ein bestimmter Absturz aufgetreten ist. Crashlytics bietet eine Möglichkeit, Nutzer in Ihren Absturzberichten anonym zu identifizieren.

Wenn Sie Ihren Berichten Nutzer-IDs hinzufügen möchten, weisen Sie jedem Nutzer eine eindeutige Kennung in Form einer ID-Nummer, eines Tokens oder eines Hash-Werts zu:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

Wenn Sie eine Nutzer-ID nach dem Festlegen löschen möchten, setzen Sie den Wert auf einen leeren String zurück. Durch das Löschen einer Nutzer-ID werden vorhandene Crashlytics-Einträge 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

Mit Navigationspfad-Logs können Sie die Interaktionen eines Nutzers mit Ihrer App vor einem Absturz, einem nicht schwerwiegenden Ereignis oder einem ANR-Ereignis besser nachvollziehen. Diese Logs können hilfreich sein, wenn Sie versuchen, ein Problem zu reproduzieren und zu beheben.

Navigationspfad-Logs werden von Google Analytics unterstützt. Wenn Sie Navigationspfad-Logs erhalten möchten, müssen Sie Google Analytics für Ihr Firebase-Projekt aktivieren und das Firebase SDK für Google Analytics zu Ihrer App hinzufügen. Sobald diese Anforderungen erfüllt sind, werden Navigationspfad-Logs automatisch in die Daten eines Ereignisses auf dem Tab Logs aufgenommen, wenn Sie die Details eines Problems aufrufen. Alle Probleme finden Sie im Dashboard DevOps & Engagement > Crashlytics der Firebase-Konsole.

Das Analytics SDK protokolliert automatisch das Ereignis screen_view, sodass in den Navigationspfadlogs eine Liste der Bildschirme angezeigt werden kann, die vor dem Absturz‑, nicht schwerwiegenden oder ANR-Ereignis aufgerufen wurden. Ein screen_view-Navigationspfad-Log enthält einen firebase_screen_class-Parameter.

Navigationspfad-Logs enthalten auch alle benutzerdefinierten Ereignisse, 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, einem nicht schwerwiegenden Ereignis oder einem ANR-Ereignis geführt haben.

Sie können die Erhebung und Verwendung von Google Analytics-Daten steuern, einschließlich der Daten, die in Navigationspfad-Logs eingetragen werden.

Opt-in-Berichterstellung aktivieren

Standardmäßig erfasst Crashlytics automatisch Absturzberichte für alle Nutzer Ihrer App. Wenn Sie Nutzern mehr Kontrolle über die von ihnen gesendeten Daten geben möchten, können Sie die Berichterstellung per Opt-in aktivieren. Deaktivieren Sie dazu die automatische Berichterstellung und senden Sie Daten nur dann an Crashlytics, wenn Sie dies in Ihrem Code festlegen.

  1. Automatische Erhebung nativ deaktivieren:

    Apple-Plattformen

    Fügen Sie der Datei Info.plist einen neuen Schlüssel hinzu:

    • Schlüssel: FirebaseCrashlyticsCollectionEnabled
    • Wert: false

    Android

    Fügen Sie im application-Block der Datei AndroidManifest.xml ein meta-data-Tag hinzu, um die automatische Erhebung zu deaktivieren:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Sie können die Datenerhebung für ausgewählte Nutzer aktivieren, indem Sie die Datenerhebung Crashlytics zur Laufzeit überschreiben. 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 ablehnt, 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.

Crash Insights-Daten verwalten

Crash Insights hilft Ihnen, Probleme zu beheben, indem Ihre anonymisierten Stacktraces mit Traces aus anderen Firebase-Apps verglichen werden. So können Sie feststellen, ob Ihr Problem Teil eines größeren Trends ist. Bei vielen Problemen bietet Crash Insights sogar Ressourcen, die Ihnen bei der Fehlerbehebung helfen.

In Crash Insights werden aggregierte Absturzdaten verwendet, um allgemeine Stabilitätstrends zu ermitteln. Wenn Sie die Daten Ihrer App nicht teilen möchten, können Sie Crash Insights im Menü Crash Insights oben in der Problemliste im Dashboard DevOps & Engagement > Crashlytics der Firebase Console deaktivieren.

Nächste Schritte