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 nie masz jeszcze skonfigurowanej i zainicjowanej usługi Firebase w projekcie Flutter, zrób to teraz.

  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 nowsza 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 wyświetlić wstępne dane na Crashlytics panelu Firebase konsoli, 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