Catch up on everthing we announced at this year's Firebase Summit. Learn more

Menyesuaikan laporan error Firebase Crashlytics

Panduan ini berisi penjelasan cara menyesuaikan laporan error menggunakan Firebase Crashlytics SDK. Secara default, Crashlytics mengumpulkan laporan error secara otomatis untuk semua pengguna aplikasi Anda (Anda dapat menonaktifkan pelaporan error otomatis dan mengaktifkan pilihan keikutsertaan pelaporan untuk pengguna Anda). Crashlytics menyediakan empat mekanisme logging siap pakai: kunci kustom, log kustom, ID pengguna, dan pengecualian yang tertangkap.

Menambahkan kunci kustom

Kunci kustom membantu Anda mendapatkan status tertentu aplikasi menjelang error. Anda dapat mengaitkan key-value pair apa pun dengan laporan error, lalu menggunakan kunci kustom untuk menelusuri dan memfilter laporan error di Firebase console.

  • Di dasbor Crashlytics, Anda dapat mencari masalah yang cocok dengan kunci kustom.

  • Saat meninjau masalah tertentu di console, Anda dapat melihat kunci kustom yang dikaitkan dengan setiap peristiwa (subtab Keys) dan bahkan memfilter peristiwa berdasarkan kunci kustom (menu Filter di bagian atas halaman).

Gunakan metode instance setCustomKey untuk menetapkan key-value pair. Perhatikan bahwa setCustomKey kelebihan beban pada parameter value untuk menerima primitif atau argumen String. Berikut beberapa contohnya:

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 */);

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
}

Anda juga dapat mengubah nilai kunci yang ada dengan memanggil kunci tersebut dan menetapkannya ke nilai yang berbeda. Contoh:

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

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

Kotlin+KTX

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

Tambahkan beberapa key-value pair sekaligus dengan meneruskan instance CustomKeysAndValues ke metode instance setCustomKeys:

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

Kotlin+KTX

Untuk Kotlin, fungsionalitas yang ada lebih sederhana daripada menggunakan builder 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)
}

Menambahkan pesan log kustom

Untuk memberikan lebih banyak konteks mengenai peristiwa menjelang error, Anda dapat menambahkan log Crashlytics kustom ke aplikasi. Crashlytics mengaitkan log dengan data error dan menampilkannya di halaman Crashlytics di Firebase console, pada tab Logs.

Gunakan log untuk membantu menentukan masalah. Contoh:

Java

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

Kotlin+KTX

Firebase.crashlytics.log("message")

Menetapkan ID pengguna

Untuk mendiagnosis masalah, mengetahui pengguna mana yang mengalami error akan sangat membantu. Crashlytics menyertakan cara mengidentifikasi pengguna secara anonim dalam laporan error Anda.

Untuk menambahkan ID pengguna ke laporan, tetapkan ID unik untuk setiap pengguna dalam bentuk nomor ID, token, atau nilai hash:

Java

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

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Jika perlu menghapus ID pengguna setelah menetapkannya, reset nilainya ke string kosong. Menghapus ID pengguna tidak menghapus catatan Crashlytics yang ada. Jika ingin menghapus catatan yang terkait dengan ID pengguna, hubungi dukungan Firebase.

(Khusus Android NDK) Menambahkan metadata ke laporan error NDK

Secara opsional, Anda dapat menyertakan header crashlytics.h dalam kode C++ untuk menambahkan metadata ke laporan error NDK, seperti kunci kustom, log kustom, ID pengguna. Semua opsi tersebut telah dijelaskan di atas pada halaman ini.

crashlytics.h tersedia sebagai library C++ khusus header di Repositori GitHub Firebase Android SDK.

Baca komentar di file header untuk mendapatkan petunjuk cara menggunakan NDK C++ API.

Melaporkan pengecualian non-fatal

Selain melaporkan error aplikasi secara otomatis, Crashlytics memungkinkan Anda mencatat pengecualian non-fatal dan mengirimkannya kepada Anda saat aplikasi diluncurkan berikutnya.

Gunakan metode recordException untuk mencatat pengecualian non-fatal di blok catch aplikasi Anda. Contoh:

Java

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

Kotlin+KTX

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

Semua pengecualian yang dicatat akan muncul sebagai masalah non-fatal di Firebase console. Ringkasan masalah berisi semua informasi status yang biasanya Anda dapatkan dari laporan error, bersama dengan perincian error berdasarkan versi Android dan perangkat hardware.

Crashlytics memproses pengecualian pada thread latar belakang khusus untuk meminimalkan dampak performa pada aplikasi Anda. Untuk mengurangi traffic jaringan pengguna, Crashlytics mengelompokkan pengecualian yang dicatat ke dalam log dan mengirimkannya saat aplikasi diluncurkan berikutnya.

Mengaktifkan pilihan keikutsertaan pelaporan

Secara default, Crashlytics otomatis mengumpulkan laporan error untuk semua pengguna aplikasi Anda. Untuk memberi pengguna kontrol lebih terhadap data yang mereka kirim, Anda dapat mengaktifkan pilihan keikutsertaan pelaporan dengan menonaktifkan pelaporan otomatis dan hanya mengirim data ke Crashlytics saat Anda ingin melakukannya dalam kode:

  1. Pada blok application file AndroidManifest.xml, tambahkan tag meta-data untuk menonaktifkan pengumpulan otomatis:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Aktifkan pengumpulan untuk pengguna tertentu dengan memanggil penggantian pengumpulan data Crashlytics saat runtime. Nilai penggantian tetap ada setiap kali aplikasi diluncurkan, sehingga Crashlytics dapat otomatis mengumpulkan laporan. Untuk tidak diikutsertakan dalam pelaporan error otomatis, teruskan false sebagai nilai penggantian. Jika ditetapkan ke false, nilai baru tidak berlaku hingga kali berikutnya aplikasi dijalankan.

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

Mengelola data Crash Insights

Crash Insights membantu Anda mengatasi masalah dengan membandingkan pelacakan tumpukan anonim dengan trace dari aplikasi Firebase lain, serta memberitahukan apakah masalah Anda adalah bagian dari tren yang lebih besar. Untuk sebagian besar masalah, Crash Insights bahkan menyediakan resource untuk membantu Anda mendebug error.

Crash Insights menggunakan data error gabungan untuk mengidentifikasi tren stabilitas umum. Jika tidak ingin membagikan data aplikasi, Anda dapat menonaktifkan Crash Insights dari menu Crash Insights di bagian atas daftar masalah Crashlytics pada Firebase console.