Dostosowywanie raportów o awariach na Androidzie

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.

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. Zwróć uwagę, że operator setCustomKey jest przeciążony dla parametru value, aby akceptować dowolny argument typu prostego lub String. Oto przykłady:

Kotlin

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 też zmodyfikować wartość istniejącego klucza, wywołując go i ustawiając inną wartość. Przykład:

Kotlin

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");

Pary klucz-wartość możesz dodawać zbiorczo, przekazując instancję CustomKeysAndValues do metody instancji setCustomKeys:

Kotlin

W przypadku języka Kotlin istniejąca funkcja jest prostsza niż używanie CustomKeysAndValueskonstruktora.

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 wiadomości w logu

Aby uzyskać więcej informacji o zdarzeniach, które doprowadziły do awarii, możesz dodać do aplikacji niestandardowe logi Crashlytics. Crashlytics kojarzy logi z danymi o awarii i wyświetla je na stronie CrashlyticsFirebase konsoli na karcie Logi.

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

Kotlin

Firebase.crashlytics.log("message")

Java

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

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:

Kotlin

Firebase.crashlytics.setUserId("user123456789")

Java

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

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.

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

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

crashlytics.h jest dostępna jako biblioteka C++ zawierająca tylko pliki nagłówkowe w repozytorium GitHub pakietu SDK Firebase na Androida.

Instrukcje korzystania z interfejsów NDK C++ API znajdziesz w komentarzach w pliku nagłówkowym.

uwzględniać raporty GWP-ASan do debugowania problemów z uszkodzeniem pamięci;

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

  • Te dane możesz wyświetlić na nowej karcie „Ślady stosu pamięci”, gdy klikniesz szczegóły problemu na Crashlyticspanelu.

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

Raporty pamięci GWP-ASan możesz uzyskać, jeśli wyraźnie włączysz GWP-ASan w aplikacji i użyjesz Crashlytics pakietu SDK dla NDK w wersji 18.3.6 lub nowszej (Firebase BoMw wersji 31.3.0 lub nowszej). Konfigurację GWP-ASan możesz przetestować, korzystając z przykładowego kodu natywnego w dokumentacji Androida.

Zgłaszanie błędów niekrytycznych

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

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

Kotlin

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
}

Możesz też dołączyć niestandardowe klucze do konkretnego wyjątku niekrytycznego. Przykład:

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}
.

Wszystkie zarejestrowane wyjątki są wyświetlane w konsoli Firebase jako problemy niekrytyczne. Podsumowanie problemu zawiera wszystkie informacje o stanie, które zwykle otrzymujesz w przypadku awarii, a także podział według wersji Androida 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 grupuje zarejestrowane wyjątki i wysyła je przy następnym uruchomieniu aplikacji.

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.

  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 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.

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

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