Dostosuj raporty o awariach Firebase Crashlytics

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.

  • 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 dla wszystkich użytkowników Twojej aplikacji.

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ść. Należy zauważyć, że setCustomKey jest przeciążony, aby parametr value akceptował dowolny argument pierwotny lub String . Oto kilka przykładów:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

Możesz także zmodyfikować wartość istniejącego klucza, wywołując klucz i ustawiając mu inną wartość. Na przykład:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Dodaj zbiorczo pary klucz/wartość, przekazując instancję CustomKeysAndValues ​​do metody instancji setCustomKeys :

Kotlin+KTX

W przypadku Kotlina istniejąca funkcjonalność jest prostsza niż użycie konstruktora CustomKeysAndValues .

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

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 na stronie Crashlytics w konsoli Firebase , na karcie Dzienniki .

Użyj log , aby zidentyfikować problemy. Na przykład:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

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:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

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 .

(Tylko Android NDK) Dodaj metadane do raportów o awariach NDK

Opcjonalnie możesz dołączyć nagłówek crashlytics.h do swojego kodu C++, aby dodać metadane do raportów o awariach NDK, takie jak niestandardowe klucze , niestandardowe dzienniki , identyfikatory użytkowników . Wszystkie te opcje zostały opisane na tej stronie powyżej.

crashlytics.h jest dostępny jako biblioteka C++ zawierająca tylko nagłówki w repozytorium GitHub Firebase Android SDK .

Przeczytaj komentarze w pliku nagłówkowym, aby uzyskać instrukcje dotyczące korzystania z interfejsów API NDK C++.

Dołącz raporty GWP-ASan, aby debugować problemy z uszkodzeniem pamięci

Crashlytics może pomóc w debugowaniu awarii spowodowanych błędami pamięci natywnej, zbierając raporty GWP-ASan. Te błędy związane z pamięcią mogą być powiązane z uszkodzeniem pamięci w aplikacji, co jest główną przyczyną luk w zabezpieczeniach aplikacji.

  • Możesz wyświetlić te dane na nowej karcie „Ślady stosu pamięci”, klikając szczegóły problemu w panelu kontrolnym Crashlytics .

  • Możesz także użyć nowego sygnału i filtra „Raport GWP-ASan”, aby szybko wyświetlić wszystkie problemy z tymi danymi.

Możesz uzyskać raporty dotyczące pamięci GWP-ASan, jeśli jawnie włączysz GWP-ASan w swojej aplikacji i użyjesz pakietu Crashlytics SDK dla NDK v18.3.6+ (Firebase BoM v31.3.0+). Możesz przetestować konfigurację GWP-ASan, korzystając z przykładowego kodu natywnego w dokumentacji Androida .

Zgłaszaj wyjątki niekrytyczne

Oprócz automatycznego raportowania awarii aplikacji Crashlytics umożliwia rejestrowanie wyjątków niekrytycznych i wysyłanie ich do Ciebie przy następnym uruchomieniu aplikacji.

Użyj metody recordException , aby zarejestrować wyjątki niekrytyczne w blokach catch aplikacji. Na przykład:

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

Wszystkie zarejestrowane wyjątki pojawiają się w konsoli Firebase jako problemy niekrytyczne. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle otrzymujesz w przypadku awarii, wraz z podziałem na wersję Androida i urządzenie sprzętowe.

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 grupuje zarejestrowane wyjątki i wysyła je przy następnym uruchomieniu aplikacji.

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:

  1. W bloku application pliku AndroidManifest.xml dodaj tag meta-data , aby wyłączyć automatyczne zbieranie:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. 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 ustawienia false nowa wartość nie zostanie zastosowana do następnego uruchomienia aplikacji.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().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 .