| Wybierz platformę: | iOS+ Android Flutter Unity |
Na panelu Crashlytics możesz kliknąć problem i uzyskać szczegółowy raport o zdarzeniu. Możesz dostosowywać te raporty, aby lepiej rozumieć, co się dzieje w Twojej aplikacji, oraz okoliczności zdarzeń zgłaszanych do Crashlytics.
Zgłaszaj do Crashlytics niewykryte wyjątki i wykryte wyjątki.
Zinstrumentuj aplikację, aby rejestrować klucze niestandardowe, niestandardowe komunikaty logu i identyfikatory użytkowników.
Automatyczne uzyskiwanie logów ścieżki, jeśli aplikacja korzysta z pakietu SDK Firebase na potrzeby Google Analytics. Logi te zapewniają wgląd w 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 za zgodą użytkowników. Pamiętaj, że domyślnie Crashlytics automatycznie zbiera raporty o awariach pochodzące z platformyCrashlytics 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 Fluttera, 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);
Raportowanie przechwyconych 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ć w blokach catch aplikacji wyjątki niekrytyczne. 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 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ą. Możesz powiązać dowolne pary klucz-wartość z raportami o awariach, a następnie używać kluczy niestandardowych do wyszukiwania i filtrowania raportów o awariach w Firebasekonsoli.
W Crashlyticspanelu możesz wyszukiwać problemy pasujące do niestandardowego klucza.
Podczas sprawdzania konkretnego problemu w konsoli 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).
Do ustawiania par klucz-wartość używaj 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 logu
Aby uzyskać więcej informacji o zdarzeniach, które doprowadziły do awarii, możesz dodać do aplikacji niestandardowe Crashlyticslogi. Crashlytics kojarzy logi z danymi o awarii i wyświetla je w Firebasekonsoli na karcie Crashlytics Logi.
Użyj log, aby zidentyfikować 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ł dany błąd. 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 wartości skrótu:
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
Dzięki dziennikom ścieżki możesz 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 uzyskać dzienniki ścieżki, musisz włączyć Google Analytics w projekcie w 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.
Pakiet SDK Analyticsautomatycznie rejestruje screen_view zdarzenie, dzięki czemu logi ścieżki mogą wyświetlać listę ekranów wyświetlonych przed awarią, zdarzeniem niekrytycznym lub zdarzeniem ANR. Log ś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. W tym celu wyłącz automatyczne raportowanie i wysyłaj dane do Crashlytics tylko wtedy, gdy zdecydujesz się na to w kodzie.
Wyłączanie automatycznego zbierania danych w aplikacji:
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 zbierania danych Crashlytics. Wartość zastąpienia 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
Analiza awarii pomaga 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 zawierają nawet zasoby, które pomagają w debugowaniu awarii.
Crash Insights korzysta z zagregowanych danych o awariach, aby identyfikować typowe trendy dotyczące stabilności. Jeśli nie chcesz udostępniać danych aplikacji, możesz zrezygnować z Crash Insights w menu Crash Insights u góry Crashlytics listy problemów w Firebase konsoli.
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.