Halaman ini memberikan bantuan pemecahan masalah dan jawaban atas pertanyaan umum (FAQ) tentang penggunaan Crashlytics. Jika tidak dapat menemukan hal yang Anda cari atau membutuhkan bantuan lainnya, hubungi dukungan Firebase.
FAQ/pemecahan masalah umum
Melihat format yang berbeda (dan terkadang "varian") untuk beberapa masalah dalam tabel Masalah
Anda mungkin melihat dua format berbeda untuk masalah yang tercantum dalam tabel Issues di Firebase console. Anda mungkin juga melihat fitur yang disebut "varian" dalam beberapa masalah. Berikut adalah alasannya.
Pada awal 2023, kami meluncurkan mesin analisis yang telah ditingkatkan untuk mengelompokkan peristiwa serta desain yang diperbarui dan beberapa fitur lanjutan untuk masalah baru (seperti varian). Lihat postingan blog terbaru kami untuk semua detailnya, tetapi Anda dapat membaca penjelasannya di bawah.
Crashlytics menganalisis semua peristiwa dari aplikasi Anda (seperti error, non-fatal, dan ANR) dan membuat kelompok peristiwa yang disebut masalah — semua peristiwa dalam masalah memiliki titik kegagalan yang sama.
Untuk mengelompokkan peristiwa ke dalam masalah ini, mesin analisis yang telah ditingkatkan kini melihat banyak aspek peristiwa, termasuk frame dalam stack trace, pesan pengecualian, kode error, dan karakteristik platform atau jenis error lainnya{101 }.
Namun, dalam kelompok peristiwa ini, stack trace yang mengarah ke kegagalan mungkin berbeda. Stack trace yang berbeda dapat berarti penyebab utama yang berbeda.
Untuk merepresentasikan kemungkinan perbedaan ini dalam masalah, kami sekarang membuat varian dalam masalah - setiap varian adalah subgrup peristiwa dalam masalah yang memiliki titik kegagalan yang sama dan stack trace yang serupa. Dengan varian, Anda dapat men-debug stack trace yang paling umum dalam suatu masalah dan menentukan apakah penyebab utama yang berbeda menyebabkan kegagalan tersebut.
Berikut adalah hal yang akan Anda temukan dengan peningkatan ini:
Metadata yang diperbarui ditampilkan dalam baris Issue Kini lebih mudah untuk memahami dan menanggulangi masalah di aplikasi Anda.
Lebih sedikit masalah duplikat Perubahan nomor baris tidak menyebabkan masalah baru.
Proses debug yang lebih mudah untuk masalah yang kompleks dengan penyebab utama berbeda Gunakan varian untuk men-debug stack trace yang paling umum dalam suatu masalah.
Peringatan dan sinyal yang lebih bermakna Masalah baru benar-benar mewakili bug baru.
Penelusuran yang lebih canggih Setiap masalah berisi metadata yang lebih mudah ditelusuri, seperti jenis pengecualian dan nama paket.
Berikut adalah peningkatan yang diluncurkan:
Saat mendapatkan peristiwa baru dari aplikasi Anda, kami akan memeriksa apakah peristiwa tersebut cocok dengan masalah yang ada.
Jika tidak ada kecocokan, kami akan otomatis menerapkan algoritme pengelompokan peristiwa yang lebih cerdas ke peristiwa tersebut dan membuat masalah baru dengan desain metadata yang diubah.
Ini adalah update besar pertama yang kami buat pada pengelompokan peristiwa. Jika Anda memiliki masukan atau mengalami masalah, beri tahu kami dengan
mengirimkan laporan.
Tidak melihat metrik bebas error dan/atau pemberitahuan kecepatan
Jika Anda tidak melihat metrik bebas error (seperti pengguna dan sesi bebas error)
dan/atau pemberitahuan kecepatan, pastikan Anda menggunakan
Crashlytics SDK 11.7.0+.
Tidak melihat log breadcrumb
Jika Anda tidak melihat
log breadcrumb,
sebaiknya periksa konfigurasi aplikasi Anda untuk Google Analytics.
Pastikan Anda memenuhi persyaratan berikut:
Melihat stack trace yang tidak disimbolkan untuk aplikasi Android di dasbor Crashlytics
Jika Anda menggunakan IL2CPP Unity dan melihat stack trace yang tidak tersimbolisasi, coba lakukan hal berikut:
Pastikan Anda menggunakan Crashlytics Unity SDK v8.6.1 atau versi yang lebih tinggi.
Pastikan Anda sudah siap dan menjalankan perintah crashlytics:symbols:uploadFirebase CLI untuk membuat dan mengupload file simbol.
Anda harus menjalankan perintah CLI ini setiap kali membuat build rilis atau build apa pun yang ingin Anda lihat pelacakan tumpukan tersimbolisasinya di Firebase console. Pelajari lebih lanjut di halaman Mendapatkan laporan error yang dapat dibaca.
Dapatkah Crashlytics digunakan dengan aplikasi yang menggunakan IL2CPP?
Ya, Crashlytics dapat menampilkan pelacakan tumpukan tersimbolisasi untuk aplikasi Anda yang menggunakan IL2CPP. Kemampuan ini tersedia untuk aplikasi yang dirilis di platform Apple atau Android. Berikut ini hal yang perlu Anda lakukan:
Pastikan Anda menggunakan Crashlytics Unity SDK v8.6.0 atau versi yang lebih tinggi.
Selesaikan tugas yang diperlukan untuk platform Anda:
Untuk aplikasi platform Apple: Anda tidak perlu melakukan tindakan khusus. Untuk aplikasi platform Apple, plugin Firebase Unity Editor otomatis mengonfigurasi project Xcode untuk mengupload simbol.
Untuk aplikasi Android: Pastikan Anda sudah siap dan menjalankan perintah crashlytics:symbols:uploadFirebase CLI untuk membuat dan mengupload file simbol.
Anda harus menjalankan perintah CLI ini setiap kali membuat build rilis atau build apa pun yang ingin Anda lihat pelacakan tumpukan tersimbolisasinya di Firebase console. Pelajari lebih lanjut di halaman Mendapatkan laporan error yang dapat dibaca.
Bagaimana cara penghitungan pengguna bebas error?
Nilai bebas error merepresentasikan persentase pengguna yang berinteraksi dengan aplikasi Anda, tetapi tidak mengalami error selama jangka waktu tertentu.
Berikut adalah rumus untuk menghitung persentase pengguna bebas error. Nilai inputnya
diberikan oleh Google Analytics.
CRASH_FREE_USERS_PERCENTAGE = 1 - (CRASHED_USERS / ALL_USERS) x 100
Saat terjadi error, Google Analytics akan mengirimkan jenis peristiwa app_exception, dan CRASHED_USERS menunjukkan jumlah pengguna yang terkait dengan jenis peristiwa tersebut.
ALL_USERS adalah jumlah total pengguna yang berinteraksi dengan aplikasi Anda selama jangka waktu yang dipilih dari menu drop-down di kanan atas dasbor Crashlytics.
Persentase pengguna bebas error adalah agregasi dari waktu ke waktu, bukan rata-rata.
Misalnya, bayangkan aplikasi Anda memiliki tiga pengguna; sebut saja Pengguna A, Pengguna B, dan Pengguna C. Tabel berikut menunjukkan pengguna yang berinteraksi dengan aplikasi Anda setiap hari dan pengguna yang mengalami error di hari tersebut:
Senin
Selasa
Rabu
Pengguna yang berinteraksi dengan aplikasi Anda
A, B, C
A, B, C
A, B
Pengguna yang mengalami error
C
B
A
Pada hari Rabu, persentase pengguna bebas error Anda adalah 50% (1 dari 2 pengguna tidak mengalami error). Dua pengguna berinteraksi dengan aplikasi Anda pada hari Rabu, tetapi hanya salah satu pengguna (Pengguna B) yang tidak mengalami error.
Selama 2 hari terakhir, persentase pengguna bebas error Anda adalah 33,3% (1 dari 3 pengguna tidak mengalami error). Tiga pengguna berinteraksi dengan aplikasi Anda selama dua hari terakhir, tetapi hanya salah satu dari mereka (Pengguna C) yang tidak mengalami error.
Selama 3 hari terakhir, persentase pengguna bebas error adalah 0% (0 dari 3 pengguna tidak mengalami error). Tiga pengguna berinteraksi dengan aplikasi Anda selama tiga hari terakhir, tetapi tidak satu pun dari mereka yang tidak mengalami error.
Nilai pengguna bebas error sebaiknya tidak dibandingkan selama jangka waktu yang berbeda.
Probabilitas satu pengguna yang mengalami error akan meningkat semakin sering mereka menggunakan aplikasi Anda, sehingga nilai pengguna bebas error cenderung lebih kecil untuk jangka waktu yang lebih lama.
Siapa yang dapat melihat, menulis, dan menghapus catatan tentang masalah?
Catatan memungkinkan anggota project untuk mengomentari masalah tertentu dengan pertanyaan, update status, dll.
Saat anggota project memposting catatan, catatan tersebut akan diberi label dengan email akun Google-nya. Alamat email ini akan terlihat bersama dengan catatan oleh semua anggota project yang memiliki akses untuk melihat catatan tersebut.
Berikut ini akan dijelaskan tentang akses yang diperlukan untuk melihat, menulis, dan menghapus catatan:
Anggota project dengan salah satu peran berikut dapat melihat dan menghapus catatan yang ada dan menulis catatan baru tentang suatu masalah.
Anggota project dengan salah satu peran berikut dapat melihat catatan yang diposting tentang masalah, tetapi mereka tidak dapat menghapus atau menulis catatan.
Siapa yang dapat melihat, menulis, dan menghapus catatan tentang masalah?
Catatan memungkinkan anggota project untuk mengomentari masalah tertentu dengan pertanyaan, update status, dll.
Saat anggota project memposting catatan, catatan tersebut akan diberi label dengan email akun Google-nya. Alamat email ini akan terlihat bersama dengan catatan oleh semua anggota project yang memiliki akses untuk melihat catatan tersebut.
Berikut ini akan dijelaskan tentang akses yang diperlukan untuk melihat, menulis, dan menghapus catatan:
Anggota project dengan salah satu peran berikut dapat melihat dan menghapus catatan yang ada dan menulis catatan baru tentang suatu masalah.
Anggota project dengan salah satu peran berikut dapat melihat catatan yang diposting tentang masalah, tetapi mereka tidak dapat menghapus atau menulis catatan.
Aplikasi juga menggunakan
Google Mobile Ads SDK, tetapi tidak mengalami error
Jika project Anda menggunakan Crashlytics bersama dengan Google Mobile Ads SDK, mungkin terjadi gangguan dari pelapor error saat pengendali pengecualian didaftarkan. Untuk memperbaiki masalah ini, nonaktifkan pelaporan error di Mobile Ads SDK dengan memanggil disableSDKCrashReporting.
Di mana lokasi set data BigQuery saya?
Setelah Anda menautkan Crashlytics ke BigQuery, set data baru yang Anda buat secara otomatis berada di Amerika Serikat, terlepas dari lokasi project Firebase Anda.
Masalah yang mengalami regresi
Apa yang dimaksud dengan masalah yang mengalami regresi?
Sebuah masalah mengalami regresi saat sebelumnya Anda telah menutupnya, tetapi Crashlytics mendapatkan laporan baru bahwa masalah tersebut muncul kembali.
Crashlytics otomatis akan membuka kembali masalah yang mengalami regresi ini agar Anda dapat mengatasinya sebagaimana mestinya untuk aplikasi Anda.
Berikut contoh skenario yang menjelaskan cara Crashlytics mengategorikan masalah sebagai regresi:
Untuk pertama kalinya, Crashlytics mendapatkan laporan error terkait Error "A". Crashlytics akan membuka masalah terkait untuk error tersebut (Masalah "A").
Anda dapat memperbaiki bug ini dengan cepat, menutup Masalah "A", lalu merilis versi baru aplikasi.
Crashlytics akan menerima laporan lain tentang Masalah "A" setelah Anda menutup masalah.
Jika laporan berasal dari versi aplikasi yang diketahuiCrashlytics saat Anda menutup masalah (artinya versi tersebut telah mengirimkan laporan error untuk error apa pun), Crashlytics tidak akan menganggap masalah tersebut sebagai regresi. Masalah akan tetap ditutup.
Jika laporan berasal dari versi aplikasi yang tidak diketahui Crashlytics saat Anda menutup masalah (artinya versi sama sekali tidak pernah mengirim laporan error untuk error apa pun), Crashlytics akan menganggap masalah mengalami regresi dan akan membuka kembali masalah tersebut.
Saat masalah mengalami regresi, kami mengirimkan pemberitahuan deteksi regresi dan menambahkan sinyal regresi ke masalah tersebut untuk memberi tahu Anda bahwa Crashlytics telah membuka kembali masalah ini. Jika Anda tidak ingin masalah dibuka kembali karena algoritma regresi kami, "nonaktifkan" masalah, bukan menutupnya.
Mengapa saya melihat masalah yang mengalami regresi untuk versi aplikasi yang lebih lama?
Jika laporan berasal dari versi aplikasi lama yang belum pernah mengirim laporan error apa pun saat Anda menutup masalah, maka Crashlytics akan mempertimbangkan masalah yang mengalami regresi dan membuka kembali masalah tersebut.
Situasi ini dapat terjadi dalam situasi berikut: Anda telah memperbaiki bug dan merilis versi baru aplikasi, tetapi Anda masih memiliki pengguna di versi lama tanpa perbaikan bug. Jika, kebetulan, salah satu versi lama tersebut tidak pernah mengirim laporan error sama sekali saat Anda menutup masalah, dan pengguna tersebut mulai menemukan bug, maka laporan error tersebut akan memicu masalah yang mengalami regresi.
Jika Anda tidak ingin masalah dibuka kembali karena algoritma regresi kami, "nonaktifkan" masalah, bukan menutupnya.
Melaporkan pengecualian yang tidak tertangkap sebagai fatal
Crashlytics dapat melaporkan pengecualian yang tidak tertangkap sebagai fatal (mulai dari Unity SDK v10.4.0). FAQ berikut membantu menjelaskan alasan dan praktik terbaik untuk menggunakan fitur ini.
Mengapa aplikasi harus melaporkan pengecualian yang tidak tertangkap sebagai fatal?
Dengan melaporkan pengecualian yang tidak tertangkap sebagai fatal, Anda mendapatkan indikasi yang lebih realistis tentang pengecualian yang dapat menyebabkan game tidak dapat dimainkan, meskipun aplikasi terus berjalan.
Perhatikan bahwa jika Anda mulai melaporkan fatal, persentase pengguna bebas error (CFU) kemungkinan akan menurun, tetapi metrik CFU akan lebih mewakili pengalaman pengguna akhir dengan aplikasi Anda.
Pengecualian mana yang akan dilaporkan sebagai fatal?
Agar Crashlytics dapat melaporkan pengecualian yang tidak tertangkap sebagai fatal, kedua kondisi berikut harus terpenuhi:
Aplikasi Anda (atau library yang disertakan) menampilkan pengecualian yang tidak tertangkap. Pengecualian yang dibuat, tetapi tidak ditampilkan, tidak dianggap tidak tertangkap.
Setelah mengaktifkan pelaporan pengecualian yang tidak tertangkap sebagai fatal, sekarang saya memiliki banyak item fatal baru. Bagaimana cara menangani pengecualian ini dengan benar?
Jika Anda mulai mendapatkan laporan pengecualian yang tidak tertangkap sebagai fatal, berikut adalah beberapa opsi untuk menangani pengecualian yang tidak tertangkap ini:
Menangkap dan menangani pengecualian yang ditampilkan
Pengecualian dibuat dan ditampilkan untuk mencerminkan status yang tidak terduga atau luar biasa.
Menyelesaikan masalah yang ditampilkan dari pengecualian yang ditampilkan melibatkan pengembalian program ke status yang diketahui (proses yang disebut dengan penanganan pengecualian).
Praktik terbaiknya adalah menangkap dan menangani semua pengecualian yang diperkirakan kecuali jika program tidak dapat dikembalikan ke status yang diketahui.
Mencatat pengecualian ke dalam log di Unity atau Crashlytics
Ada beberapa cara untuk mencatat pengecualian ke dalam log di Unity atau Crashlytics untuk membantu men-debug masalah.
Saat menggunakan Crashlytics, berikut ini adalah dua opsi yang paling umum dan direkomendasikan:
Opsi 1: Cetak di konsol Unity, tetapi jangan laporkan ke Crashlytics, selama pengembangan atau pemecahan masalah
Cetak di konsol Unity menggunakan Debug.Log(exception), Debug.LogWarning(exception), dan Debug.LogError(exception) yang mencetak konten pengecualian di konsol Unity dan tidak menampilkan ulang pengecualian.
Opsi 2: Upload ke Crashlytics untuk pelaporan gabungan di dasbor Crashlytics untuk situasi berikut:
Jika ada pengecualian yang patut dicatat ke dalam log untuk men-debug kemungkinan peristiwa Crashlytics berikutnya, gunakan Crashlytics.Log(exception.ToString()).
Jika pengecualian tetap harus dilaporkan ke Crashlytics meskipun ditangkap dan ditangani, gunakan Crashlytics.LogException(exception) untuk mencatatnya ke dalam log sebagai peristiwa nonfatal.
Namun, jika ingin melaporkan peristiwa fatal ke Unity Cloud Diagnostik secara manual, Anda dapat menggunakan Debug.LogException. Opsi ini akan mencetak pengecualian di konsol Unity seperti Opsi 1, tetapi juga menampilkan pengecualian (terlepas dari apakah telah ditampilkan atau belum ditangkap). Error ini akan ditampilkan secara nonlokal. Ini berarti bahwa bahkan Debug.LogException(exception) di sekitarnya dengan blok try-catch tetap menghasilkan pengecualian yang tidak tertangkap.
Oleh karena itu, panggil Debug.LogException jika dan hanya jika Anda ingin melakukan semua hal berikut:
Untuk mencetak pengecualian di konsol Unity.
Untuk mengupload pengecualian ke Crashlytics sebagai peristiwa fatal.
Untuk menampilkan pengecualian, biarkan pengecualian tersebut diperlakukan sebagai pengecualian yang tidak tertangkap, dan laporkan ke Diagnostik Unity Cloud.
Perhatikan bahwa jika Anda ingin mencetak pengecualian yang tertangkap di konsol Unity dan mengupload ke Crashlytics sebagai peristiwa nonfatal, lakukan hal berikut:
try{methodThatThrowsMyCustomExceptionType();}catch(MyCustomExceptionTypeexception){// Print the exception to the Unity console at the error level.Debug.LogError(exception);// Upload the exception to Crashlytics as a non-fatal event.Crashlytics.LogException(exception);// not Debug.LogException//// Code that handles the exception//}