| Wybierz platformę: | iOS+ Android Flutter Unity |
Możesz kliknąć problem i uzyskać szczegółowy raport o zdarzeniu w panelu DevOps i zaangażowanie > Crashlytics w Firebase konsoli. Możesz dostosować te raporty, aby lepiej zrozumieć, co dzieje się w Twojej aplikacji, i okoliczności zdarzeń zgłaszanych do Crashlytics.
Zgłaszaj do Crashlytics nieobsłużone wyjątki i obsłużone wyjątki.
Zinstrumentuj aplikację, aby rejestrować klucze niestandardowe, niestandardowe komunikaty logu, i identyfikatory użytkowników.
Jeśli Twoja aplikacja korzysta z pakietu SDK Firebase dla Google Analytics, automatycznie otrzymasz dzienniki ścieżki. Dzięki tym dziennikom możesz zobaczyć działania użytkowników, które doprowadziły do zdarzenia zebranego przez Crashlytics w Twojej aplikacji.
Wyłącz automatyczne raportowanie awarii i włącz raportowanie, na które użytkownicy muszą wyrazić zgodę. Pamiętaj, że domyślnie Crashlytics automatycznie zbiera raporty o awariach natywnych dla platformy wszystkich użytkowników Twojej aplikacji.
Zgłaszanie wyjątków
Zgłaszanie nieobsłużonych wyjątków
Możesz automatycznie przechwytywać wszystkie błędy „krytyczne” zgłaszane w ramach platformy Flutter, zastępując FlutterError.onError wartością FirebaseCrashlytics.instance.recordFlutterFatalError. Jeśli chcesz też przechwytywać wyjątki „niekrytyczne”, zastąp FlutterError.onError wartością 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ą przechwytywane przez Fluttera:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
Aby przechwytywać takie błędy, możesz użyć modułu 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 przechwytywać błędy występujące poza kontekstem Fluttera, zainstaluj detektor 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łaszanie obsłużonych wyjątków
Oprócz automatycznego zgłaszania awarii aplikacji Crashlytics umożliwia rejestrowanie wyjątków niekrytycznych i wysyłanie ich przy następnym zgłoszeniu poważnego błędu lub po ponownym uruchomieniu aplikacji.
Użyj metody recordError, aby rejestrować wyjątki niekrytyczne w blokach catch aplikacji. Przykład:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
Możesz też rejestrować dodatkowe informacje o błędzie za pomocą 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 są wyświetlane jako problemy niekrytyczne w panelu DevOps i zaangażowanie > Crashlytics dashboard w konsoli Firebase. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle otrzymujesz w przypadku awarii, a także podział według wersji i urządzenia.
Crashlytics przetwarza wyjątki w osobnym wątku w tle, aby zminimalizować wpływ na wydajność aplikacji. Aby zmniejszyć ruch sieciowy użytkowników, Crashlytics może w razie potrzeby ograniczyć liczbę raportów wysyłanych z urządzenia.
Dodawanie kluczy niestandardowych
Klucze niestandardowe pomagają uzyskać informacje o stanie aplikacji przed awarią. 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 DevOps i zaangażowanie > Crashlytics panelu Firebase konsoli.
W panelu możesz wyszukiwać problemy pasujące do klucza niestandardowego.
Gdy przeglądasz konkretny problem w panelu, możesz wyświetlić powiązane klucze niestandardowe dla każdego zdarzenia (podzakładka Klucze) i filtrować zdarzenia według kluczy niestandardowych (menu Filtr u góry strony).
Aby ustawić pary klucz-wartość, użyj metody instancji setCustomKey. 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);
Dodawanie niestandardowych komunikatów dziennika
Aby uzyskać więcej informacji o zdarzeniach prowadzących do awarii, możesz dodać niestandardowe dzienniki Crashlytics do aplikacji. Crashlytics powiąże dzienniki z danymi o awariach i wyświetli je na karcie Dzienniki po wyświetleniu szczegółów problemu (wszystkie problemy znajdziesz w panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase).
Użyj log, aby pomóc w identyfikowaniu problemów. Przykład:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Ustawianie identyfikatorów użytkowników
Aby zdiagnozować problem, często przydatne jest sprawdzenie, który z użytkowników doświadczył danej awarii. Crashlytics zawiera sposób na anonimowe identyfikowanie użytkowników w raportach o awariach.
Aby dodać identyfikatory użytkowników do 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 znaków. Wyczyszczenie identyfikatora użytkownika nie powoduje usunięcia istniejących Crashlytics rekordów. Jeśli musisz usunąć rekordy powiązane z identyfikatorem użytkownika, skontaktuj się z zespołem pomocy Firebase.
Pobieranie dzienników ścieżki
Dzienniki ścieżki pozwalają lepiej zrozumieć interakcje użytkownika z aplikacją, które doprowadziły do awarii, błędu niekrytycznego lub zdarzenia ANR. Te dzienniki mogą być przydatne podczas próby odtworzenia i debugowania problemu.
Dzienniki ścieżki są obsługiwane przez Google Analytics, więc aby je uzyskać, musisz włączyć Google Analytics w projekcie Firebase i dodać do aplikacji pakiet SDK Firebase dla Google Analytics. Gdy te wymagania zostaną spełnione, dzienniki ścieżki będą automatycznie dołączane do danych zdarzenia na karcie Dzienniki po wyświetleniu szczegółów problemu (wszystkie problemy znajdziesz w panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase).
Pakiet SDK Analytics
automatycznie rejestruje zdarzenie screen_view
co umożliwia wyświetlanie w dziennikach ścieżki listy ekranów wyświetlanych przed
awarią, błędem niekrytycznym lub zdarzeniem ANR. Dziennik ścieżki screen_view zawiera parametr firebase_screen_class.
Dzienniki ścieżki są też wypełniane wszystkimi zdarzeniami niestandardowymi, które ręcznie rejestrujesz w sesji użytkownika , w tym danymi parametrów zdarzenia. Te dane mogą pomóc w pokazaniu serii działań użytkownika, które doprowadziły do awarii, błędu niekrytycznego lub zdarzenia ANR.
Pamiętaj, że możesz kontrolować zbieranie i wykorzystywanie danychGoogle Analytics, w tym danych, które wypełniają dzienniki ścieżki.
Włączanie raportowania, na które użytkownicy muszą wyrazić zgodę
Domyślnie Crashlytics automatycznie zbiera raporty o awariach wszystkich użytkowników Twojej aplikacji. Aby zapewnić użytkownikom większą kontrolę nad wysyłanymi przez nich danymi, możesz włączyć raportowanie, na które użytkownicy muszą wyrazić zgodę, wyłączając automatyczne raportowanie i wysyłając dane do Crashlytics tylko wtedy, gdy zdecydujesz się na to w kodzie.
Wyłącz automatyczne zbieranie danych natywnie:
Platformy Apple
Dodaj nowy klucz do pliku
Info.plist:- Klucz:
FirebaseCrashlyticsCollectionEnabled - Wartość:
false
Android
W bloku
applicationplikuAndroidManifest.xmldodaj tagmeta-data, aby wyłączyć automatyczne zbieranie danych:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />- Klucz:
Włącz zbieranie danych dla wybranych użytkowników, wywołując w czasie działania aplikacji Crashlytics zastąpienie zbierania danych. Wartość zastąpienia jest zachowywana we wszystkich kolejnych uruchomieniach aplikacji, dzięki czemu Crashlytics może automatycznie zbierać raporty dla tego użytkownika.
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);Jeśli użytkownik później zrezygnuje ze zbierania danych, możesz przekazać wartość
falsejako wartość zastąpienia. Zostanie ona zastosowana przy następnym uruchomieniu aplikacji przez użytkownika i będzie zachowywana we wszystkich kolejnych uruchomieniach.
Zarządzanie danymi statystyk awarii
Statystyki awarii pomagają rozwiązywać problemy, porównując zanonimizowane zrzuty stosu z zrzutami z innych aplikacji Firebase i informując, czy problem jest częścią większego trendu. W przypadku wielu problemów statystyki awarii udostępniają też zasoby, które pomagają w debugowaniu awarii.
Statystyki awarii używają zagregowanych danych o awariach do identyfikowania typowych trendów stabilności. Jeśli nie chcesz udostępniać danych aplikacji, możesz zrezygnować ze statystyk awarii w menu Statystyki awarii u góry listy problemów w panelu DevOps i zaangażowanie > Crashlytics konsoli Firebase.
Dalsze kroki
- Eksportuj dane do BigQuery lub Cloud Logging aby korzystać z zaawansowanych analiz i funkcji, takich jak wysyłanie zapytań do danych, tworzenie niestandardowych paneli i konfigurowanie niestandardowych alertów.