Pierwsze kroki z Firebase Crashlytics

Z tego krótkiego wprowadzenia dowiesz się, jak skonfigurować Firebase Crashlytics w swojej aplikacji, korzystając z wtyczki Crashlytics Flutter, aby otrzymywać kompleksowe raporty o awariach w konsoli Firebase.

Aby skonfigurować Crashlytics, musisz użyć narzędzia wiersza poleceń i IDE. Aby dokończyć konfigurację, musisz wymusić wysłanie wyjątku testowego do Firebase.

Zanim zaczniesz

  1. Skonfiguruj i zainicjuj Firebase w projekcie Flutter, jeśli jeszcze go nie masz.

  2. Zalecane: aby automatycznie pobierać dzienniki menu nawigacyjnego, które pozwalają analizować działania użytkowników, które prowadzą do awarii, błędów niekrytycznych lub błędów ANR, musisz włączyć Google Analytics w swoim projekcie Firebase.

    • Jeśli w istniejącym projekcie Firebase nie masz włączonej usługi Google Analytics, możesz włączyć Google Analytics na karcie Integracje w konsoli Firebase na stronie > Ustawienia projektu.

    • Jeśli tworzysz nowy projekt Firebase, włącz Google Analytics w trakcie procesu tworzenia projektu.

    Pamiętaj, że logi menu nawigacyjnego są dostępne na wszystkich platformach Android i Apple obsługiwanych przez Crashlytics (z wyjątkiem watchOS).

Krok 1. Dodaj Crashlytics do projektu Flutter

  1. Aby zainstalować wtyczkę Flutter na potrzeby Crashlytics, uruchom w katalogu głównym projektu Flutter polecenie wymienione poniżej.

    Aby korzystać z dzienników menu nawigacyjnego, dodaj do swojej aplikacji wtyczkę Flutter do Google Analytics. Upewnij się, że w projekcie Firebase masz włączoną usługę Google Analytics.

    flutter pub add firebase_crashlytics && flutter pub add firebase_analytics
    
  2. W katalogu głównym projektu Flutter uruchom to polecenie:

    flutterfire configure
    

    Uruchomienie tego polecenia sprawi, że konfiguracja Firebase Twojej aplikacji Flutter będzie aktualna, a w przypadku Androida doda do aplikacji wymaganą wtyczkę Crashlytics Gradle.

  3. Gdy skończysz, ponownie utwórz projekt Flutter:

    flutter run
    
  4. (Opcjonalnie) Jeśli Twój projekt Flutter używa flagi --split-debug-info (i opcjonalnie również flagi --obfuscate), musisz wykonać dodatkowe czynności, aby wyświetlić czytelne zrzuty stosu swoich aplikacji.

    • Platformy Apple: sprawdź, czy Twój projekt używa zalecanej konfiguracji wersji (Flutter 3.12.0+ i wtyczka Crashlytics Flutter 3.3.4 lub nowsze), aby projekt mógł automatycznie generować symbole Flutter (pliki dSYM) i przesyłać je do Crashlytics.

    • Android: użyj interfejsu wiersza poleceń Firebase (wersja 11.9.0 lub nowsza), aby przesłać symbole debugowania Flutter. Symbole do debugowania musisz przesłać przed zgłoszeniem awarii przez kompilację z zaciemnionym kodem.

      W katalogu głównym projektu Flutter uruchom to polecenie:

      firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
      • FIREBASE_APP_ID: identyfikator aplikacji Firebase na Androida (nie nazwa pakietu)
        Przykładowy identyfikator Firebase na Androida: 1:567383003300:android:17104a2ced0c9b9b

      • PATH/TO/symbols: ten sam katalog, który przekazujesz do flagi --split-debug-info podczas tworzenia aplikacji

Krok 2. Skonfiguruj moduły obsługi awarii

Aby automatycznie wychwytywać wszystkie błędy zgłaszane w ramce Flutter, zastąp FlutterError.onError za pomocą parametru FirebaseCrashlytics.instance.recordFlutterFatalError:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();

  // Pass all uncaught "fatal" errors from the framework to Crashlytics
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

  runApp(MyApp());
}

Aby wychwycić błędy asynchroniczne, które nie są obsługiwane przez platformę Flutter, użyj kodu 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());

}

Przykłady postępowania w przypadku innych typów błędów znajdziesz w artykule Dostosowywanie raportów o awariach.

Krok 3. Wymuś awarię testową, aby dokończyć konfigurację

Aby dokończyć konfigurowanie Crashlytics i wyświetlić dane początkowe w panelu Crashlytics w konsoli Firebase, musisz wymusić wysłanie wyjątku testowego.

  1. Dodaj do aplikacji kod, za pomocą którego możesz wymuszać wywołanie wyjątku testowego.

    Jeśli dodasz moduł obsługi błędów, który wywołuje FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) do Zone najwyższego poziomu, możesz dodać do aplikacji przycisk, który po jego naciśnięciu wywołuje wyjątek testowy:

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. Stwórz i uruchom aplikację.

  3. Wymuś zgłoszenie wyjątku testowego, aby wysłać pierwszy raport dotyczący aplikacji:

    1. Otwórz aplikację z urządzenia testowego lub emulatora.

    2. W aplikacji naciśnij przycisk testowania wyjątku dodany za pomocą powyższego kodu.

  4. Otwórz panel Crashlytics w konsoli Firebase, aby zobaczyć awarię testową.

    Jeśli po odświeżeniu konsoli nadal nie widzisz awarii testowej, po 5 minutach włącz rejestrowanie debugowania, aby sprawdzić, czy Twoja aplikacja wysyła raporty o awariach.


To wszystko. Crashlytics monitoruje teraz Twoją aplikację pod kątem awarii, a na Androidzie – błędów niekrytycznych i błędów ANR. Otwórz panel Crashlytics, aby wyświetlić i przeanalizować wszystkie raporty i statystyki.

Dalsze kroki