Pierwsze kroki z Firebase Crashlytics

Z tego krótkiego wprowadzenia dowiesz się, jak skonfigurować Firebase Crashlytics w swojej aplikacji z wtyczką Crashlytics Flutter, by móc generować kompleksowe raporty o awariach w konsoli Firebase.

Aby skonfigurować Crashlytics, musisz użyć narzędzia wiersza poleceń i swojego IDE. Aby zakończyć konfigurację, musisz wymusić zgłoszenie wyjątku testowego, co spowoduje wysłanie pierwszego raportu o awariach do Firebase.

Zanim zaczniesz

  1. Jeśli jeszcze nie masz tego za sobą, skonfiguruj i zainicjuj Firebase w swoim projekcie Flutter.

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

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

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

    Pamiętaj, że dzienniki 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. W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę Flutter dla Crashlytics.

    Aby korzystać z logów menu nawigacyjnego, dodaj też do swojej aplikacji wtyczkę Flutter dla Google Analytics. Upewnij się, że w projekcie Firebase jest włączona usługa 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 pozwoli upewnić się, że konfiguracja Firebase aplikacji Flutter jest aktualna, a w przypadku Androida zostanie dodana wymagana wtyczka Crashlytics Gradle.

  3. Po zakończeniu odbuduj projekt Flutter:

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

    • Platformy Apple: dopilnuj, aby Twój projekt używał zalecanej konfiguracji wersji (Flutter 3.12.0 lub nowszej oraz wtyczki Crashlytics Flutter w wersji 3.3.4 lub nowszej), aby projekt mógł automatycznie generować i przesyłać symbole Flutter (pliki dSYM) do Crashlytics.

    • Android: użyj interfejsu wiersza poleceń Firebase (wersja 11.9.0 lub nowsza), aby przesłać symbole debugowania Flutter. Przed zgłoszeniem awarii z użyciem zaciemnionego kodu musisz przesłać symbole debugowania.

      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 aplikacji 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

Możesz automatycznie wykrywać wszystkie błędy zgłaszane w ramach platformy Flutter, zastępując FlutterError.onError kodem 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 wychwytywać błędy asynchroniczne, które nie są obsługiwane przez platformę Flutter, użyj polecenia 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 z innymi typami błędów znajdziesz w artykule Dostosowywanie raportów o awariach.

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

Aby zakończyć konfigurowanie Crashlytics i zobaczyć początkowe dane w panelu Crashlytics w konsoli Firebase, musisz wymusić odrzucenie wyjątku testowego.

  1. Dodaj do aplikacji kod, który będzie służył do wymuszania wywołania 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 użyć podanego niżej kodu, by dodać do aplikacji przycisk, który po jego naciśnięciu spowoduje zgłoszenie wyjątku testowego:

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. Utworzyć i uruchomić aplikację.

  3. Wymuś zgłoszenie wyjątku testowego, aby móc wysłać pierwszy raport o aplikacji:

    1. Otwórz aplikację na urządzeniu testowym lub w emulatorze.

    2. W aplikacji naciśnij przycisk testowania wyjątku dodany przy użyciu powyższego kodu.

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

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


To wszystko. Crashlytics monitoruje teraz Twoją aplikację pod kątem awarii oraz błędów niekrytycznych i błędów ANR na Androidzie. Otwórz panel Crashlytics, aby przeglądać i analizować wszystkie raporty oraz statystyki.

Dalsze kroki