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 wtyczki Crashlytics Flutter w aplikacji możesz otrzymywać obszerne raporty o awariach w konsoli Firebase.

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

Zanim zaczniesz

  1. Jeśli jeszcze tego nie zrobisz, skonfiguruj i zainicjuj Firebase w projekcie Flutter.

  2. Zalecane: aby automatycznie otrzymywać dzienniki ścieżki nawigacyjnej, które pomogą Ci zrozumieć działania użytkowników prowadzące do awarii, błędu niekrytycznego lub zdarzenia 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 konsoli Firebase.

    Pamiętaj, że logi ścieżki 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 do Crashlytics.

    Aby korzystać z logów ścieżki, dodaj też do aplikacji wtyczkę Flutter do Google Analytics. Upewnij się, że Google Analytics jest włączona w projekcie w Firebase.

    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 spowoduje, że konfiguracja Firebase w aplikacji Flutter będzie aktualna, a w przypadku Androida do aplikacji zostanie dodana wymagana wtyczka Crashlytics Gradle.

  3. Po zakończeniu ponownie skompiluj projekt Flutter:

    flutter run
    
  4. (Opcjonalnie) Jeśli projekt Flutter używa flagi --split-debug-info (i opcjonalnie flagi --obfuscate), aby wyświetlać czytelne ślady stosu w aplikacjach, musisz wykonać dodatkowe czynności.

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

    • Android: użyj Firebase CLI (w wersji 11.9.0 lub nowszej), aby przesłać symbole debugowania Flutter. Symbole debugowania musisz przesłać zanim zgłosisz awarię 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 obsługę awarii

Możesz automatycznie przechwytywać wszystkie błędy zgłaszane w ramach platformy 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 przechwytywać 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 Dostosowywanie raportów o awariach.

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

Aby zakończyć konfigurowanie Crashlytics i zobaczyć wstępne dane na Crashlytics panelu w konsoli Firebase, musisz wymusić zgłoszenie wyjątku testowego.

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

    Jeśli dodasz obsługę błędów, która wywołuje FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) w strefie najwyższego poziomu Zone, możesz użyć tego kodu, aby dodać do aplikacji przycisk , który po naciśnięciu zgłosi 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 emulatorze.

    2. W aplikacji naciśnij przycisk wyjątku testowego, który został dodany za pomocą powyższego kodu.

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

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


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

Dalsze kroki