Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Dostosuj raporty o awariach Firebase Crashlytics

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W tym przewodniku opisano, jak dostosować raporty o awariach za pomocą interfejsów API Crashlytics. Domyślnie Crashlytics automatycznie gromadzi raporty o awariach natywne dla platformy dla wszystkich użytkowników Twojej aplikacji (możesz też wyłączyć automatyczne raportowanie o awariach i zamiast tego włączyć raportowanie zgody dla użytkowników). Crashlytics udostępnia pięć gotowych mechanizmów rejestrowania: klucze niestandardowe , dzienniki niestandardowe , identyfikatory użytkowników , przechwycone i nieprzechwycone wyjątki.

W przypadku aplikacji Flutter raporty krytyczne są wysyłane do Crashlytics w czasie rzeczywistym bez konieczności ponownego uruchamiania aplikacji przez użytkownika. Raporty niekrytyczne są zapisywane na dysku w celu wysłania wraz z następnym raportem krytycznym lub po ponownym uruchomieniu aplikacji.

Zgłoś nieprzechwycone wyjątki

Możesz automatycznie przechwycić wszystkie „krytyczne” błędy, które są zgłaszane w środowisku Flutter, zastępując FlutterError.onError przez FirebaseCrashlytics.instance.recordFlutterFatalError . Alternatywnie, aby wychwycić wyjątki „niekrytyczne”, zastąp FlutterError.onError za pomocą FirebaseCrashlytics.instance.recordFlutterError :

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());
}

Błędy asynchroniczne

Błędy asynchroniczne nie są przechwytywane przez platformę Flutter:

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

Aby wychwycić takie błędy, możesz użyć procedury obsługi PlatformDispatcher.instance.onError :

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());

}

Błędy poza Flutterem

Aby wychwycić błędy, które występują poza kontekstem Fluttera, zainstaluj detektor błędów na bieżącym Isolate :

Isolate.current.addErrorListener(RawReceivePort((pair) async {
  final List<dynamic> errorAndStacktrace = pair;
  await FirebaseCrashlytics.instance.recordError(
    errorAndStacktrace.first,
    errorAndStacktrace.last,
    fatal: true,
  );
}).sendPort);

Zgłoś przechwycone wyjątki

Oprócz automatycznego zgłaszania awarii aplikacji, Crashlytics umożliwia rejestrowanie wyjątków niekrytycznych i wysyłanie ich do Ciebie przy następnym zgłoszeniu zdarzenia krytycznego lub po ponownym uruchomieniu aplikacji.

Użyj metody recordError , aby rejestrować niekrytyczne wyjątki w blokach catch aplikacji. Na przykład:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error'
);

// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);

Możesz również chcieć zarejestrować dalsze informacje o błędzie, co jest możliwe przy użyciu właściwości information :

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error',
  information: ['further diagnostic information about the error', 'version 2.0'],
);

Te wyjątki pojawiają się jako problemy niekrytyczne w konsoli Firebase. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle uzyskujesz w przypadku awarii, wraz z podziałem według wersji i urządzenia sprzętowego.

Crashlytics przetwarza wyjątki w dedykowanym wątku działającym w tle, aby zminimalizować wpływ na wydajność Twojej aplikacji. Aby zmniejszyć ruch sieciowy użytkowników, Crashlytics w razie potrzeby ograniczy liczbę raportów wysyłanych z urządzenia.

Dodaj niestandardowe klucze

Klucze niestandardowe pomagają uzyskać określony stan aplikacji prowadzący do awarii. Możesz powiązać dowolne pary klucz/wartość z raportami o awariach, a następnie użyć niestandardowych kluczy do wyszukiwania i filtrowania raportów o awariach w konsoli Firebase.

  • W panelu Crashlytics możesz wyszukiwać problemy pasujące do klucza niestandardowego.

  • Przeglądając konkretny problem w konsoli, możesz wyświetlić powiązane klucze niestandardowe dla każdego zdarzenia (karta podrzędna Klucze ), a nawet filtrować zdarzenia według kluczy niestandardowych (menu Filtruj u góry strony).

Użyj metody instancji setCustomKey , aby ustawić pary klucz/wartość. Oto kilka przykładów:

// 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);

Dodaj niestandardowe komunikaty dziennika

Aby zapewnić sobie lepszy kontekst dla zdarzeń prowadzących do awarii, możesz dodać do swojej aplikacji niestandardowe dzienniki Crashlytics. Crashlytics łączy dzienniki z danymi o awariach i wyświetla je w konsoli Firebase na karcie Dzienniki Crashlytics.

Użyj log , aby zidentyfikować problemy. Na przykład:

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

Ustaw identyfikatory użytkowników

Aby zdiagnozować problem, często warto wiedzieć, który z użytkowników doświadczył danej awarii. Crashlytics umożliwia anonimową identyfikację użytkowników w raportach o awariach.

Aby dodać identyfikatory użytkowników do raportów, przypisz każdemu użytkownikowi unikalny identyfikator w postaci numeru identyfikacyjnego, tokena lub wartości zahaszowanej:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

Jeśli kiedykolwiek będziesz musiał wyczyścić identyfikator użytkownika po jego ustawieniu, zresetuj wartość do pustego ciągu. Wyczyszczenie identyfikatora użytkownika nie powoduje usunięcia istniejących rekordów Crashlytics. Jeśli chcesz usunąć rekordy powiązane z identyfikatorem użytkownika, skontaktuj się z pomocą techniczną Firebase .

Włącz raportowanie zgody

Domyślnie Crashlytics automatycznie zbiera raporty o awariach dla wszystkich użytkowników Twojej aplikacji. Aby zapewnić użytkownikom większą kontrolę nad wysyłanymi przez nich danymi, możesz włączyć raportowanie zgody, wyłączając automatyczne raportowanie i wysyłając dane do Crashlytics tylko wtedy, gdy tak zdecydujesz w swoim kodzie:

  1. Wyłącz natywnie automatyczne zbieranie:

    Platformy Apple'a

    Dodaj nowy klucz do pliku Info.plist :

    • Klucz: FirebaseCrashlyticsCollectionEnabled
    • Wartość: false

    Android

    W bloku application w pliku AndroidManifest.xml dodaj tag meta-data aby wyłączyć automatyczne zbieranie:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Włącz zbieranie danych dla wybranych użytkowników, wywołując funkcję zastępowania zbierania danych Crashlytics w czasie wykonywania.

    Wartość zastąpienia pozostaje niezmieniona po uruchomieniu Twojej aplikacji, dzięki czemu Crashlytics może automatycznie zbierać raporty. Aby zrezygnować z automatycznego zgłaszania awarii, podaj false jako wartość zastępującą. Gdy jest ustawiona na false , nowa wartość nie ma zastosowania do następnego uruchomienia aplikacji.

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

Zarządzaj danymi Crash Insights

Crash Insights pomaga rozwiązywać problemy, porównując anonimowe ślady stosu ze śladami z innych aplikacji Firebase i informując, czy problem jest częścią większego trendu. W przypadku wielu problemów usługa Crash Insights zapewnia nawet zasoby ułatwiające debugowanie awarii.

Crash Insights wykorzystuje zagregowane dane o awariach do identyfikowania typowych trendów stabilności. Jeśli nie chcesz udostępniać danych swojej aplikacji, możesz zrezygnować z Crash Insights w menu Crash Insights u góry listy problemów Crashlytics w konsoli Firebase .