W panelu kontrolnym Crashlytics możesz kliknąć problem i uzyskać szczegółowy raport o zdarzeniu. Możesz dostosować te raporty, aby lepiej zrozumieć, co dzieje się w Twojej aplikacji i okoliczności związane ze zdarzeniami zgłaszanymi do Crashlytics.
Zgłaszaj nieprzechwycone wyjątki i przechwycone wyjątki do Crashlytics.
Instrumentuj swoją aplikację do rejestrowania niestandardowych kluczy , niestandardowych komunikatów dziennika i identyfikatorów użytkowników .
Automatycznie pobieraj dzienniki nawigacji , jeśli Twoja aplikacja korzysta z pakietu SDK Firebase dla Google Analytics. Dzienniki te zapewniają wgląd w działania użytkownika prowadzące do zdarzenia zebranego przez Crashlytics w Twojej aplikacji.
Wyłącz automatyczne raportowanie o awariach i włącz raportowanie dobrowolne dla swoich użytkowników. Pamiętaj, że domyślnie Crashlytics automatycznie zbiera raporty o awariach natywne dla platformy dla wszystkich użytkowników Twojej aplikacji.
Zgłoś nieprzechwycone wyjątki
Możesz automatycznie wychwycić wszystkie „krytyczne” błędy zgłaszane w ramach Flutter, zastępując FlutterError.onError
za pomocą FirebaseCrashlytics.instance.recordFlutterFatalError
. Alternatywnie, aby wychwycić także wyjątki „niekrytyczne”, zastąp FlutterError.onError
za pomocą FirebaseCrashlytics.instance.recordFlutterError
:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
Błędy asynchroniczne
Błędy asynchroniczne nie są wychwytywane przez platformę Flutter:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
Aby wyłapać takie błędy, możesz skorzystać z procedury obsługi 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());
}
Błędy poza Flutterem
Aby wychwycić błędy występujące poza kontekstem Flutter, zainstaluj moduł nasłuchujący błędów w bieżącym Isolate
:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
Zgłoś złapane wyjątki
Oprócz automatycznego raportowania awarii aplikacji Crashlytics umożliwia rejestrowanie wyjątków niekrytycznych i wysyła je do Ciebie przy następnym zgłoszeniu zdarzenia krytycznego lub po ponownym uruchomieniu aplikacji.
Użyj metody recordError
, aby zarejestrować wyjątki niekrytyczne w blokach catch aplikacji. Na przykład:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
Możesz także zapisać dalsze informacje o błędzie, co jest możliwe przy użyciu właściwości information
:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
Te wyjątki pojawiają się jako problemy niekrytyczne w konsoli Firebase. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle otrzymujesz w przypadku awarii, wraz z podziałem według wersji i urządzenia.
Crashlytics przetwarza wyjątki w dedykowanym wątku w tle, aby zminimalizować wpływ na wydajność aplikacji. Aby zmniejszyć ruch sieciowy użytkowników, Crashlytics w razie potrzeby ograniczy liczbę raportów wysyłanych z urządzenia.
Dodaj niestandardowe klucze
Klucze niestandardowe pomagają uzyskać określony stan aplikacji prowadzący do awarii. Możesz powiązać dowolne pary klucz/wartość z raportami o awariach, a następnie użyć kluczy niestandardowych do wyszukiwania i filtrowania raportów o awariach w konsoli Firebase.
W panelu Crashlytics możesz wyszukiwać problemy pasujące do klucza niestandardowego.
Przeglądając konkretny problem w konsoli, możesz wyświetlić powiązane klucze niestandardowe dla każdego zdarzenia (podkarta Klucze ), a nawet filtrować zdarzenia według kluczy niestandardowych (menu Filtruj u góry strony).
Użyj metody instancji setCustomKey
, aby ustawić pary klucz/wartość. Oto kilka przykładów:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
Dodaj niestandardowe komunikaty dziennika
Aby zapewnić sobie lepszy kontekst dla zdarzeń prowadzących do awarii, możesz dodać do swojej aplikacji niestandardowe dzienniki Crashlytics. Crashlytics kojarzy dzienniki z danymi o awariach i wyświetla je w konsoli Firebase na karcie Dzienniki Crashlytics.
Użyj log
, aby zidentyfikować problemy. Na przykład:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Ustaw identyfikatory użytkowników
Aby zdiagnozować problem, często warto wiedzieć, który z użytkowników doświadczył danej awarii. Crashlytics umożliwia anonimową identyfikację użytkowników w raportach o awariach.
Aby dodać identyfikatory użytkowników do swoich raportów, przypisz każdemu użytkownikowi unikalny identyfikator w postaci numeru identyfikacyjnego, tokena lub wartości skrótu:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Jeśli kiedykolwiek będziesz musiał wyczyścić identyfikator użytkownika po jego ustawieniu, zresetuj wartość do pustego ciągu. Wyczyszczenie identyfikatora użytkownika nie powoduje usunięcia istniejących rekordów Crashlytics. Jeśli chcesz usunąć rekordy powiązane z identyfikatorem użytkownika, skontaktuj się z pomocą techniczną Firebase .
Pobierz dzienniki bułki tartej
Dzienniki nawigacyjne pozwalają lepiej zrozumieć interakcje użytkownika z Twoją aplikacją, które doprowadziły do awarii, zdarzenia niekrytycznego lub zdarzenia ANR. Te dzienniki mogą być pomocne przy próbie odtworzenia i debugowania problemu.
Dzienniki nawigacyjne są obsługiwane przez Google Analytics, więc aby uzyskać dzienniki nawigacyjne, musisz włączyć Google Analytics dla swojego projektu Firebase i dodać do swojej aplikacji pakiet SDK Firebase dla Google Analytics . Po spełnieniu tych wymagań dzienniki nawigacyjne są automatycznie dołączane do danych zdarzenia na karcie Dzienniki podczas przeglądania szczegółów problemu.
Pakiet Analytics SDK automatycznie rejestruje zdarzenie screen_view
, które umożliwia w dziennikach nawigacyjnych pokazanie listy ekranów wyświetlonych przed awarią, zdarzeniem innym niż krytyczny lub ANR. Dziennik nawigacyjny screen_view
zawiera parametr firebase_screen_class
.
Dzienniki nawigacyjne są również wypełniane wszelkimi niestandardowymi zdarzeniami , które ręcznie rejestrujesz w ramach sesji użytkownika, w tym danymi parametrów zdarzenia. Dane te mogą pomóc w pokazaniu serii działań użytkownika prowadzących do awarii, zdarzenia niekrytycznego lub zdarzenia ANR.
Pamiętaj, że możesz kontrolować gromadzenie i wykorzystywanie danych Google Analytics , które obejmują dane wypełniające dzienniki nawigacyjne.
Włącz raportowanie wyrażające zgodę
Domyślnie Crashlytics automatycznie zbiera raporty o awariach dla wszystkich użytkowników Twojej aplikacji. Aby zapewnić użytkownikom większą kontrolę nad wysyłanymi danymi, możesz włączyć raportowanie, wyłączając automatyczne raportowanie i wysyłając dane do Crashlytics tylko wtedy, gdy tak zdecydujesz w swoim kodzie:
Wyłącz natywnie automatyczne zbieranie:
Platformy Apple
Dodaj nowy klucz do pliku
Info.plist
:- Klucz:
FirebaseCrashlyticsCollectionEnabled
- Wartość:
false
Android
W bloku
application
plikuAndroidManifest.xml
dodaj znacznikmeta-data
, aby wyłączyć automatyczne zbieranie:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Klucz:
Włącz zbieranie dla wybranych użytkowników, wywołując zastąpienie gromadzenia danych Crashlytics w czasie wykonywania.
Wartość zastąpienia będzie obowiązywać po każdym uruchomieniu Twojej aplikacji, więc Crashlytics może automatycznie zbierać raporty. Aby zrezygnować z automatycznego raportowania awarii, jako wartość zastąpienia podaj
false
. W przypadku ustawieniafalse
nowa wartość nie zostanie zastosowana do następnego uruchomienia aplikacji.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Zarządzaj danymi Crash Insights
Crash Insights pomaga rozwiązywać problemy, porównując anonimowe ślady stosu ze śladami z innych aplikacji Firebase i informując, czy problem jest częścią większego trendu. W przypadku wielu problemów Crash Insights udostępnia nawet zasoby ułatwiające debugowanie awarii.
Crash Insights wykorzystuje zagregowane dane o awariach w celu identyfikacji typowych trendów stabilności. Jeśli nie chcesz udostępniać danych swojej aplikacji, możesz zrezygnować z Crash Insights w menu Crash Insights u góry listy problemów Crashlytics w konsoli Firebase .