Pierwsze kroki z Crashlytics w Flutterze

Wybierz platformę: iOS+ Android Android NDK Flutter Unity


Z tego przewodnika dowiesz się, jak zacząć korzystać z Firebase Crashlytics w aplikacji Flutter.

Po skonfigurowaniu w aplikacji wtyczki Flutter Crashlytics możesz otrzymywać szczegółowe raporty o awariach w konsoli Firebase.

Konfigurowanie Crashlytics wymaga użycia zarówno narzędzia wiersza poleceń, jak i IDE. Aby dokończyć konfigurację, musisz wymusić zgłoszenie wyjątku testowego, aby wysłać do Firebase pierwszy raport o awarii.

Zanim zaczniesz

  1. Jeśli jeszcze nie korzystasz z Firebase, skonfiguruj i zainicjuj tę usługę w projekcie Flutter.

  2. Zalecane: aby automatycznie otrzymywać logi działań użytkownika, które pomogą Ci zrozumieć działania użytkownika prowadzące do awarii, błędu niekrytycznego lub błędu ANR, musisz włączyć Google Analytics w projekcie w Firebase.

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

    • Jeśli używasz dotychczasowego projektu w Firebase bez włączonej usługi Google Analytics, możesz ją włączyć na stronie Ustawienia > Integracje w konsoli Firebase.

    Pamiętaj, że logi działań użytkownika są dostępne na wszystkich platformach Androida i Apple obsługiwanych przez Crashlytics (z wyjątkiem watchOS).

Krok 1. Dodaj Crashlytics do projektu Flutter

  1. Aby zainstalować wtyczkę Flutter dla Crashlytics, uruchom to polecenie w katalogu głównym projektu Flutter.

    Aby korzystać z logów działań użytkownika, dodaj też do aplikacji wtyczkę Flutter dla Google Analytics. Upewnij się, że w projekcie w 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 zapewnia, że konfiguracja Firebase aplikacji Flutter jest aktualna, a w przypadku Androida dodaje do aplikacji wymaganą wtyczkę Gradle Crashlytics.

  3. Gdy to zrobisz, ponownie skompiluj projekt Flutter:

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

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

    • Android: użyj interfejsu wiersza poleceń Firebase (w wersji 11.9.0 lub nowszej), aby przesłać symbole debugowania Flutter. Symbole debugowania musisz przesłać przed zgłoszeniem awarii z kompilacji kodu zaciemnionego.

      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 wychwytywać wszystkie błędy, które występują w środowisku Flutter, zastępując FlutterError.onError przez 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 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 obsługi innych typów błędów znajdziesz w artykule o dostosowywaniu raportów o awariach.

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

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

  1. Dodaj do aplikacji kod, którego możesz użyć do wymuszenia zgłoszenia wyjątku testowego.

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

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

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

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

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

  4. W konsoli Firebase otwórz panel DevOps i zaangażowanie > Crashlytics, aby sprawdzić, czy jest tam raport o awarii testowej.

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


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

Dalsze kroki