Dostosowywanie raportów o awariach Firebase Crashlytics

W panelu Crashlytics możesz kliknąć problem i wyświetlić szczegółowy raport o zdarzeniach. Możesz dostosować te raporty, aby lepiej zrozumieć, co dzieje się w Twojej aplikacji i okoliczności dotyczące zdarzeń zgłoszonych do Crashlytics.

  • automatycznie pobierać dzienniki menu nawigacyjnego, jeśli Twoja aplikacja korzysta z pakietu SDK Firebase dla Google Analytics. Logi te zapewniają wgląd w działania użytkownika prowadzące do zdarzenia w aplikacji zebranego przez Crashlytics.

  • Wyłącz automatyczne raportowanie o awariach i włącz przekazywanie raportów o awariach użytkownikom. Pamiętaj, że domyślnie Crashlytics automatycznie zbiera raporty o awariach wszystkich użytkowników Twojej aplikacji.

Dodaj klucze niestandardowe

Klucze niestandardowe pomagają określić stan aplikacji, który doprowadził do awarii. Do raportów o awariach możesz powiązać wybrane pary klucz-wartość, a następnie za pomocą kluczy niestandardowych wyszukiwać i filtrować raporty o awariach w konsoli Firebase.

  • W panelu Crashlytics możesz wyszukiwać problemy pasujące do klucza niestandardowego.

  • Gdy sprawdzasz konkretny problem w konsoli, możesz wyświetlić klucze niestandardowe powiązane z każdym zdarzeniem (podkarta Klucze), a nawet filtrować zdarzenia według kluczy niestandardowych (w menu Filtr u góry strony).

Do ustawiania par klucz-wartość użyj metody instancji setCustomKey. Pamiętaj, że setCustomKey jest przeciążony dla parametru value, aby umożliwić akceptowanie dowolnego argumentu prostego 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 */);

Wartość istniejącego klucza możesz też zmienić, wywołując go i ustawiając jego inną wartość. 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 pary klucz-wartość zbiorczo, przekazując wystąpienie obiektu CustomKeysAndValues do metody instancji setCustomKeys:

Kotlin+KTX

W przypadku Kotlin istniejąca funkcja jest prostsza niż korzystanie z 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);

Dodawanie niestandardowych komunikatów logu

Aby zapewnić sobie szerszy kontekst dla zdarzeń prowadzących do awarii, możesz dodać do aplikacji niestandardowe logi Crashlytics. Crashlytics powiąże je z danymi awarii i wyświetli je na stronie Crashlytics w konsoli Firebase na karcie Logi.

Użyj narzędzia log, aby łatwiej wskazać problemy. Przykład:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

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

Konfigurowanie identyfikatorów użytkowników

W celu zdiagnozowania problemu często warto wiedzieć, u których użytkowników wystąpiła dana awaria. Crashlytics umożliwia 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 zahaszowanej wartości:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

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

Jeśli w przyszłości musisz usunąć ustawiony identyfikator użytkownika, zresetuj jego wartość do pustego ciągu znaków. Wyczyszczenie identyfikatora użytkownika nie powoduje usunięcia dotychczasowych rekordów Crashlytics. Jeśli chcesz usunąć rekordy powiązane z identyfikatorem User-ID, skontaktuj się z zespołem pomocy Firebase.

(Tylko Android NDK) Dodawanie metadanych do raportów o awariach NDK

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

crashlytics.h jest dostępna jako biblioteka C++ tylko dla nagłówka w repozytorium GitHub SDK Firebase na Androida.

Przeczytaj komentarze w pliku nagłówka, aby dowiedzieć się, jak używać interfejsów API NDK C++.

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

Crashlytics pomaga w debugowaniu awarii spowodowanych przez błędy pamięci natywnej przez zbieranie raportów GWP-ASan. Te błędy związane z pamięcią mogą być związane z uszkodzeniem pamięci aplikacji, co jest główną przyczyną luk w zabezpieczeniach.

  • Możesz wyświetlić te dane na nowej karcie „Zrzuty stosu pamięci”, gdy klikniesz szczegóły problemu w panelu Crashlytics.

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

Aby uzyskać raporty dotyczące pamięci GWP-ASan, włączysz w aplikacji GWP-ASan i użyjesz pakietu SDK Crashlytics SDK dla pakietu NDK w wersji 18.3.6 lub nowszej (Firebase BoM w wersji 31.3.0 lub nowszej). Konfigurację GWP-ASan możesz przetestować, korzystając z przykładowego kodu natywnego dostępnego w dokumentacji Androida.

Zgłoś niekrytyczne wyjątki

Crashlytics nie tylko automatycznie zgłasza awarie aplikacji, ale też umożliwia rejestrowanie niekrytycznych wyjątków i wysyłanie ich przy następnym uruchomieniu aplikacji.

Aby rejestrować niekrytyczne wyjątki w blokach catch aplikacji, użyj metody recordException. 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 są wyświetlane jako problemy niekrytyczne w konsoli Firebase. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle występują w przypadku awarii, wraz z zestawieniami według wersji Androida 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 zbiorczo rejestruje wyjątki i wysyła je przy następnym uruchomieniu aplikacji.

Pobieranie dzienników menu nawigacyjnego

Logi menu nawigacyjnego pozwalają lepiej zrozumieć interakcje użytkownika z aplikacją, które doprowadziły do awarii, błędu niekrytycznego lub błędu ANR. Logi mogą być przydatne podczas próby odtworzenia i debugowania problemu.

Logi menu nawigacyjnego są obsługiwane przez Google Analytics, więc aby je pobierać, musisz włączyć Google Analytics dla swojego projektu Firebase i dodać do aplikacji pakiet SDK Firebase dla Google Analytics. Po spełnieniu tych wymagań logi menu nawigacyjnego są automatycznie dołączane do danych zdarzenia na karcie Logi po wyświetleniu szczegółów problemu.

Pakiet SDK Analytics automatycznie rejestruje zdarzenie screen_view, dzięki czemu w dziennikach menu nawigacyjnego znajduje się lista ekranów wyświetlonych przed zdarzeniem awarii, niekrytycznym lub ANR. Log menu nawigacyjnego screen_view zawiera parametr firebase_screen_class.

Są one też wypełniane wszystkimi zdarzeniami niestandardowymi, które rejestrujesz ręcznie w ramach sesji użytkownika, w tym danymi parametrów zdarzenia. Dane te pomagają pokazywać serię działań użytkowników, 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 wypełniających logi menu nawigacyjnego.

Włącz raportowanie dotyczące wyrażania zgody

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, wyłączając automatyczne raportowanie i wysyłając dane do Crashlytics tylko, jeśli wybierzesz opcję w kodzie:

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

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Włącz zbieranie danych dla wybranych użytkowników, wywołując zastąpienie zbierania danych Crashlytics w czasie działania. Wartość zastąpienia jest utrzymywana po wszystkich wersjach aplikacji, więc Crashlytics może automatycznie zbierać raporty. Aby zrezygnować z automatycznego raportowania o awariach, przekaż false jako wartość zastąpienia. Gdy ustawisz wartość false, nowa wartość będzie stosowana dopiero przy następnym uruchomieniu aplikacji.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

Zarządzanie danymi narzędzia Crash Insights

Statystyki awarii pomagają rozwiązywać problemy, porównując zanonimizowane zrzuty stosu z śladami z innych aplikacji Firebase i informując, czy Twój problem nie należy do większego trendu. W przypadku wielu problemów narzędzie Crash Insights udostępnia nawet zasoby, które pomagają debugować awarię.

Crash Insights używa zbiorczych danych o awariach, aby identyfikować typowe trendy związane ze stabilnością. Jeśli nie chcesz udostępniać danych o aplikacji, możesz zrezygnować z Statystyk awarii, korzystając z menu Statystyki awarii u góry listy problemów Crashlytics w konsoli Firebase.