| Wybierz platformę: | iOS+ Android Flutter Unity |
Możesz kliknąć problem i uzyskać szczegółowy raport o zdarzeniu w sekcji DevOps i zaangażowanie > Crashlytics panel w konsoli Firebase. Możesz dostosowywać te raporty, aby lepiej rozumieć, co się dzieje w Twojej aplikacji, i okoliczności zdarzeń zgłaszanych do Crashlytics.
Zgłaszaj do Crashlytics niewykryte wyjątki i wykryte wyjątki.
Zintegruj aplikację, aby rejestrować klucze niestandardowe, niestandardowe komunikaty logu i identyfikatory użytkowników.
Automatycznie otrzymuj logi ścieżki, jeśli Twoja aplikacja korzysta z pakietu SDK Firebase na potrzeby Google Analytics. Te logi zapewniają wgląd w działania użytkowników prowadzące do zdarzenia zebranego przez Crashlytics w aplikacji.
Wyłącz automatyczne raportowanie awarii i włącz raportowanie za zgodą użytkowników. Pamiętaj, że domyślnie Crashlytics automatycznie zbiera raporty o awariach na platformieCrashlytics dla wszystkich użytkowników Twojej aplikacji.
Raportowanie wyjątków
Zgłaszanie niewykrytych wyjątków
Możesz automatycznie przechwytywać wszystkie „krytyczne” błędy zgłaszane w ramach Fluttera, zastępując FlutterError.onError funkcją FirebaseCrashlytics.instance.recordFlutterFatalError. Możesz też przechwytywać wyjątki „niekrytyczne”. W tym celu 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 platformę Flutter:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
Aby wykrywać 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 wychwytywać błędy występujące poza kontekstem Flutera, zainstaluj w bieżącym Isolate detektor błędów:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
Zgłaszanie wykrytych wyjątków
Oprócz automatycznego zgłaszania awarii aplikacji Crashlytics umożliwia rejestrowanie niekrytycznych wyjątków i przesyłanie ich do Ciebie przy następnym zgłoszeniu krytycznego zdarzenia lub po ponownym uruchomieniu aplikacji.
Użyj metody recordError, aby rejestrować wyjątki niekrytyczne w blokach catch w 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'],
);
Wyjątki te są wyświetlane jako niekrytyczne problemy w sekcji DevOps i zaangażowanie > Crashlytics panel 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 dedykowanym wątku w tle, aby zminimalizować wpływ na wydajność aplikacji. Aby zmniejszyć ruch sieciowy użytkowników, Crashlytics w razie potrzeby ogranicza liczbę raportów wysyłanych z urządzenia.
Dodawanie kluczy niestandardowych
Klucze niestandardowe pomagają uzyskać konkretny stan aplikacji przed awarią. Z raportami o awariach możesz powiązać dowolne pary klucz-wartość, a potem używać kluczy niestandardowych do wyszukiwania i filtrowania raportów o awariach na panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase.
W panelu możesz wyszukiwać problemy pasujące do niestandardowego klucza.
Podczas sprawdzania konkretnego problemu w panelu możesz wyświetlić powiązane klucze niestandardowe dla każdego zdarzenia (karta Klucze), a nawet 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 wiadomości w dzienniku
Aby uzyskać więcej informacji o zdarzeniach, które doprowadziły do awarii, możesz dodać do aplikacji niestandardowe Crashlytics dzienniki. Crashlytics powiąże dzienniki z danymi o awarii i wyświetli je na karcie Dzienniki, gdy będziesz przeglądać szczegóły problemu (wszystkie problemy znajdziesz na panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase).
Użyj log, aby określić problemy. Przykład:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Ustawianie identyfikatorów użytkowników
Aby zdiagnozować problem, często przydatne jest sprawdzenie, u których użytkowników wystąpiło dane awaryjne zamknięcie aplikacji. Crashlytics umożliwia anonimową identyfikację użytkowników w raportach o awariach.
Aby dodać do raportów identyfikatory użytkowników, przypisz każdemu użytkownikowi unikalny identyfikator w postaci numeru identyfikacyjnego, tokena lub zaszyfrowanej wartości:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Jeśli po ustawieniu identyfikatora użytkownika chcesz go wyczyścić, zresetuj wartość do pustego ciągu znaków. 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 zespołem pomocy Firebase.
Pobieranie dzienników elementów menu nawigacyjnego
Dzienniki ścieżki pozwalają lepiej poznać interakcje użytkownika z aplikacją, które doprowadziły do awarii, błędu niekrytycznego lub błędu ANR. Te dzienniki mogą być przydatne podczas odtwarzania 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 na platformę Google Analytics. Gdy spełnisz te wymagania, dzienniki ścieżki będą automatycznie dołączane do danych zdarzenia na karcie Dzienniki, gdy wyświetlasz szczegóły problemu (wszystkie problemy znajdziesz na panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase).
Pakiet Analytics SDKautomatycznie rejestruje screen_view zdarzenie, co umożliwia wyświetlanie w logach ścieżki listy ekranów wyświetlonych 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 zdarzeniami niestandardowymi, które rejestrujesz ręcznie w sesji użytkownika, w tym danymi parametrów zdarzenia. Te dane mogą pokazywać serię działań użytkownika, które doprowadziły do awarii, błędu niekrytycznego lub błędu ANR.
Pamiętaj, że możesz kontrolować zbieranie i wykorzystywanie danych Google Analytics, w tym danych, które wypełniają logi ścieżki.
Włącz raportowanie na podstawie zgody użytkowników
Domyślnie Crashlytics automatycznie zbiera raporty o awariach wszystkich użytkowników Twojej aplikacji. Aby dać użytkownikom większą kontrolę nad wysyłanymi danymi, możesz włączyć raportowanie z możliwością rezygnacji, wyłączając automatyczne raportowanie i wysyłając dane do Crashlytics tylko wtedy, gdy zdecydujesz się na to w kodzie.
Wyłączanie automatycznego zbierania danych w usłudze:
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 w przypadku wybranych użytkowników, wywołując w czasie działania programu zastąpienie Crashlytics data collection. Wartość zastępowania jest zachowywana we wszystkich kolejnych uruchomieniach aplikacji, dzięki czemu Crashlytics może automatycznie zbierać raporty dotyczące tego użytkownika.
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);Jeśli użytkownik później zrezygnuje ze zbierania danych, możesz przekazać wartość zastępczą
false. Zostanie ona zastosowana przy następnym uruchomieniu aplikacji przez użytkownika i będzie obowiązywać przy wszystkich kolejnych uruchomieniach.
Zarządzanie danymi Crash Insights
Statystyki awarii pomagają rozwiązywać problemy, porównując anonimowe ślady stosu z innymi aplikacjami Firebase i informując, czy problem jest częścią większego trendu. W przypadku wielu problemów statystyki awarii udostępniają nawet zasoby, które pomagają w debugowaniu awarii.
Statystyki dotyczące awarii wykorzystują zagregowane dane o awariach do identyfikowania typowych trendów związanych ze stabilnością. Jeśli nie chcesz udostępniać danych aplikacji, możesz zrezygnować ze statystyk dotyczących awarii w menu Statystyki dotyczące awarii u góry listy problemów na panelu DevOps i zaangażowanie > Crashlytics w konsoli Firebase.
Dalsze kroki
- Eksportuj dane do BigQuery lub Cloud Logging, aby korzystać z zaawansowanych analiz i funkcji, takich jak wysyłanie zapytań dotyczących danych, tworzenie niestandardowych paneli i konfigurowanie niestandardowych alertów.