Firebase Crashlytics — apa itu, crash dan diagnosis kegagalan

Penulis: IT Sectr Diterbitkan: 2026-04-27 Waktu membaca: 10 mnt

Firebase Crashlytics adalah layanan Google untuk mengumpulkan, mengelompokkan, dan menganalisis kegagalan aplikasi mobile secara real-time. SDK secara otomatis menangkap pengecualian yang tidak tertangani, crash kode native, dan sinyal ANR, menghasilkan laporan terperinci dengan pelacakan stack, status perangkat, dan log. Menurut data Google, 2026, Crashlytics digunakan di lebih dari 4 juta aplikasi di seluruh dunia. Layanan ini diberikan gratis dengan batas 500 ribu sesi per hari per proyek.

Poin utama

  • Firebase Crashlytics — pengumpul crash otomatis dengan tarif gratis hingga 500 ribu sesi per hari.
  • SDK menangkap pengecualian Kotlin, Java, Swift, Objective-C, native C/C++ dan ANR di Android.
  • Setiap laporan berisi pelacakan stack, versi aplikasi, model perangkat, dan log pengguna.
  • Crashlytics mengelompokkan crash yang identik berdasarkan stack dan frekuensi, menunjukkan jumlah pengguna yang terkena dampak.
  • Layanan terintegrasi dengan Analytics — Anda dapat melihat jalur pengguna hingga kegagalan di antarmuka yang sama.

Apa itu Firebase Crashlytics

Firebase Crashlytics adalah layanan gratis Google untuk memantau stabilitas aplikasi mobile, diakuisisi oleh Google pada tahun 2017 bersama dengan perusahaan Fabric. Crashlytics secara otomatis mengumpulkan informasi tentang setiap kegagalan aplikasi, mengelompokkan crash identik berdasarkan tanda tangan stack, dan menampilkannya di konsol Firebase dengan prioritas berdasarkan jumlah pengguna yang terkena dampak.

Sejarah dan evolusi

Crashlytics diluncurkan pada tahun 2011 sebagai bagian dari platform Fabric dan dengan cepat menjadi standar de facto untuk pelaporan crash di iOS. Setelah diakuisisi oleh Google pada tahun 2017 senilai perkiraan 2 miliar dolar (seluruh Fabric), Crashlytics diintegrasikan ke dalam Firebase SDK. Versi 18.0.0 (2021) menambahkan dukungan untuk Kotlin Multiplatform, dan versi 19.0.0 (2024) — pengumpulan ANR otomatis di Android tanpa konfigurasi tambahan. Menurut data Google (2026), Crashlytics memproses lebih dari 10 miliar crash setiap bulan.

Batas gratis Crashlytics

Crashlytics diberikan gratis dengan batas 500 ribu sesi per hari per proyek Firebase. Untuk sebagian besar aplikasi ini sudah cukup — menurut data Google (2026), 95% proyek tidak melebihi batas. Saat melebihi batas, pengumpulan data tidak berhenti, tetapi laporan berhenti diperbarui hingga hari berikutnya. Untuk proyek dengan beban tinggi, tersedia tarif Spark dan Blaze Firebase — Crashlytics tetap gratis di kedua tarif, dan batas sesi dihitung secara terpisah.

Bagaimana Crashlytics mendeteksi dan mengumpulkan kegagalan

Mekanisme pengumpulan Crashlytics didasarkan pada intersepsi pengecualian di tingkat platform dan runtime. Di Android, SDK mengimplementasikan UncaughtExceptionHandler yang menangkap semua pengecualian Kotlin dan Java yang tidak tertangani. Di iOS, Crashlytics menggunakan NSSetUncaughtExceptionHandler untuk Objective-C/Swift dan penangan pengecualian Mach sendiri untuk crash kode native.

Jenis kegagalan yang ditangkap

Crashlytics membedakan lima jenis kegagalan: fatal (crash fatal), non-fatal (pengecualian non-fatal yang dikirimkan secara manual), ANR (Android — aplikasi tidak merespons), signal (sinyal OS — SIGSEGV, SIGABRT) dan OOM (kehabisan memori di iOS). Setiap jenis diproses oleh mekanisme terpisah dan ditampilkan di konsol dengan label yang sesuai.

Jenis kegagalanPlatformPemicu
FatalAndroid, iOSPengecualian tidak tertangani
Non-fatalAndroid, iOSPanggilan manual Crashlytics.logException()
ANRAndroidTidak ada respons > 5 detik
SignalAndroid, iOSSinyal OS (SEGV, ABRT, BUS)
OOMiOSKehabisan memori

Format laporan kegagalan

Setiap laporan Crashlytics berisi informasi lengkap: pelacakan stack penuh dengan nama kelas dan nomor baris, versi aplikasi (versionName + versionCode), model perangkat, versi OS, jumlah memori bebas, orientasi layar, dan waktu sejak startup. Jika Firebase Analytics terhubung, laporan juga menyertakan jalur dari 50 peristiwa terakhir pengguna sebelum kegagalan — ini sangat penting untuk mereproduksi crash.

kotlin
class CrashlyticsHelper {
    fun logNonFatal(error: Throwable) {
        FirebaseCrashlytics.getInstance()
            .log("Non-fatal: user action = payment_failed")
        FirebaseCrashlytics.getInstance()
            .recordException(error)
    }

    fun setUserContext(userId: String) {
        FirebaseCrashlytics.getInstance()
            .setUserId(userId)
        FirebaseCrashlytics.getInstance()
            .setCustomKey("subscription", "premium")
    }
}

Integrasi Crashlytics ke proyek Android

Menghubungkan Crashlytics ke aplikasi Android memerlukan penambahan dua dependensi di build.gradle dan konfigurasi plugin Google Services. SDK secara otomatis mengaktifkan pelaporan crash saat inisialisasi Firebase tanpa kode tambahan. Untuk pengoperasian yang benar, plugin google-services dan file google-services.json dari konsol Firebase juga diperlukan.

groovy
// build.gradle (project-level)
plugins {
    id "com.google.gms.google-services" version "4.4.0"
}

// build.gradle (app-level)
plugins {
    id "com.google.firebase.crashlytics"
}

dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-crashlytics-ktx")
    implementation("com.google.firebase:firebase-analytics-ktx")
}

Konfigurasi plugin Crashlytics

Plugin com.google.firebase.crashlytics melakukan dua tugas: menghasilkan pengidentifikasi build unik (build ID) untuk pemetaan stack yang diobfusikasi dan secara otomatis membuat sumber daya untuk Crashlytics SDK. Tanpa plugin, crash akan ditandai sebagai "unmapped" — Anda hanya akan melihat nama kelas yang diobfusikasi (a.b.c) tanpa kemampuan menemukan kode sumber. Plugin ditambahkan ke build.gradle root dan ke build.gradle modul aplikasi.

Memeriksa integrasi

Untuk menguji integrasi Crashlytics, gunakan metode khusus forceCrash() yang menghasilkan pengecualian uji. Dalam build produksi, metode ini tidak tersedia. Setelah menjalankan crash uji, laporan muncul di konsol Firebase dalam 1-5 menit. Jika laporan tidak ditampilkan — periksa apakah google-services.json sesuai dengan paket aplikasi dan tidak ada flag di AndroidManifest yang menonaktifkan pengumpulan data.

Analisis crash dan pengelompokan laporan

Konsol Crashlytics menyediakan dua tingkat tampilan: daftar semua crash (Issues) yang dikelompokkan berdasarkan jenis kegagalan, dan laporan terperinci untuk setiap Issue dengan pelacakan, statistik, dan data pengguna. Setiap Issue menggabungkan semua crash dengan tanda tangan yang sama — jenis pengecualian yang sama dan pelacakan stack yang cocok.

Issues dan pengelompokan

Pengelompokan crash — fitur utama Crashlytics. Alih-alih menampilkan ribuan crash individual, layanan menggabungkannya ke dalam Issues berdasarkan fingerprint — checksum dari pelacakan stack. Satu Issue dapat berisi 1 hingga beberapa juta crash. Untuk setiap Issue ditampilkan: jumlah kasus fatal, jumlah pengguna unik, versi aplikasi tempat crash muncul, dan persentase pengguna yang mengalami masalah.

Menurut data Google (2026), rata-rata 20% Issues menyebabkan 80% dari semua crash fatal aplikasi (prinsip Pareto). Crashlytics secara otomatis mengurutkan Issues berdasarkan tingkat keparahan — semakin banyak pengguna yang terkena dampak, semakin tinggi prioritasnya. Ini memungkinkan pengembang untuk memperbaiki masalah paling masif terlebih dahulu.

Statistik per versi

Crashlytics melacak stabilitas setiap versi aplikasi secara terpisah. Grafik crash-free users menunjukkan persentase pengguna yang tidak mengalami crash fatal di setiap versi. Jika saat pembaruan persentase turun di bawah ambang batas (default 99%), Crashlytics mengirimkan notifikasi melalui email dan di Firebase Console. Ini memungkinkan penarikan cepat versi bermasalah atau merilis hotfix.

Kunci khusus, log, dan Breadcrumbs

Crashlytics menyediakan tiga mekanisme untuk memperkaya laporan dengan konteks: kunci khusus (keys) untuk data terstruktur, log (logs) untuk pelacakan teks, dan Breadcrumbs dari Analytics untuk jalur pengguna. Ketiga jenis data dilampirkan ke laporan crash dan terlihat di kartu detailnya.

Kunci khusus

Custom Keys — adalah pasangan "kunci-nilai" yang dikirim bersama setiap crash. Maksimum 64 kunci per aplikasi, setiap kunci — string dengan panjang hingga 1024 karakter. Kunci berguna untuk menandai status aplikasi: tingkat langganan, status otorisasi, layar terakhir, apakah VPN diaktifkan. Nilai ditimpa — kunci baru dengan nama yang sama menggantikan yang lama.

Logging peristiwa

Custom Logs — adalah pesan teks yang disimpan Crashlytics dalam buffer melingkar berukuran 64 KB. Log secara otomatis dilampirkan ke crash berikutnya. Jika tidak ada crash yang terjadi — log tidak dikirim ke server (tidak menghabiskan lalu lintas). Logging digunakan untuk mencatat langkah-langkah pengguna sebelum kegagalan: "payment_processing_started", "api_call_initiated", "response_received_200".

kotlin
class PaymentViewModel {
    fun processPayment(amount: Double) {
        FirebaseCrashlytics.getInstance().log("Payment started: amount=$amount")

        FirebaseCrashlytics.getInstance().setCustomKey("last_screen", "payment_screen")
        FirebaseCrashlytics.getInstance().setCustomKey("subscription_tier", "basic")

        try {
            paymentGateway.charge(amount)
        } catch (e: NetworkException) {
            FirebaseCrashlytics.getInstance().recordException(e)
        }
    }
}

Breadcrumbs dari Analytics

Jika Firebase Analytics terhubung di proyek, Crashlytics secara otomatis menerima Breadcrumbs — 50 peristiwa analitik terakhir sebelum crash. Setiap breadcrumb berisi nama peristiwa dan parameternya. Ini memungkinkan rekonstruksi urutan tindakan yang tepat yang menyebabkan kegagalan: pengguna membuka layar → menambahkan produk → melanjutkan ke pembayaran → terjadi crash. Breadcrumbs ditampilkan di kartu Issue pada tab terpisah "Logs".

Praktik terbaik bekerja dengan kegagalan

Crashlytics paling efektif dengan konfigurasi konteks yang tepat dan proses penanganan Issues. Praktik menunjukkan bahwa tim yang menerapkan aturan kerja dengan crash mengurangi waktu perbaikan bug kritis sebesar 60% (data Google, 2026).

Prioritisasi Issues

Tidak semua crash sama pentingnya. Prioritisasi berdasarkan jumlah pengguna dan frekuensi kemunculan membantu fokus pada masalah paling kritis. Aturan: perbaiki Issues yang memengaruhi lebih dari 0.1% pengguna dalam waktu 24 jam. Issues dengan kemunculan tunggal (< 0.01%) dapat ditunda hingga rilis terjadwal berikutnya. Crashlytics secara otomatis menandai regresi — Issues yang telah diperbaiki tetapi muncul kembali di versi baru.

Integrasi dengan CI/CD

Crashlytics API memungkinkan integrasi laporan kegagalan ke dalam pipeline CI/CD melalui REST API atau Firebase CLI. Pada setiap rilis baru, Anda dapat secara otomatis memeriksa apakah persentase crash-free users tidak melebihi ambang batas. Jika ambang batas terlampaui — CI/CD memblokir penyebaran dan mengirim notifikasi ke tim. Firebase CLI mendukung perintah firebase crashlytics:builds:upload untuk mengunggah file pemetaan ProGuard/R8 — tanpanya, stack tidak akan terbaca.

Menurut data Google (2026), aplikasi yang menggunakan pemeriksaan otomatis ambang batas crash-free di CI/CD menghasilkan 40% lebih sedikit regresi ke produksi. Ambang batas yang direkomendasikan: crash-free users >= 99.5% untuk rilis kritis dan >= 99.0% untuk rilis biasa.

Pertanyaan yang sering diajukan

Berapa batas sesi gratis di Crashlytics?

Crashlytics gratis hingga 500 ribu sesi per hari per proyek Firebase. Saat melebihi batas, laporan berhenti diperbarui hingga hari berikutnya, tetapi pengumpulan data tidak berhenti.

Apakah Firebase Analytics diperlukan untuk Crashlytics?

Crashlytics bekerja tanpa Analytics, tetapi dengannya laporan berisi Breadcrumbs — 50 peristiwa terakhir pengguna sebelum crash. Disarankan untuk menghubungkan kedua modul.

Bagaimana Crashlytics mengelompokkan crash yang identik?

Pengelompokan dilakukan berdasarkan fingerprint — checksum pelacakan stack termasuk jenis pengecualian dan nomor baris. Crash dengan fingerprint yang sama masuk ke satu Issue.

Mengapa crash tidak ditampilkan di konsol?

Periksa pengaturan: file google-services.json, keberadaan plugin crashlytics di build.gradle, tidak adanya pemfilteran berdasarkan versi di konsol, dan keberadaan build yang telah menerima perjanjian lisensi. Debug hanya berfungsi di build release.

Bisakah error non-fatal dikirim ke Crashlytics?

Ya, gunakan recordException() untuk pengecualian non-fatal. Laporan semacam itu tidak mengganggu operasi aplikasi, tetapi ditampilkan di konsol dengan penghitung kemunculan dan pelacakan stack lengkap.

Ringkasan

  • Firebase Crashlytics — layanan gratis untuk mengumpulkan dan menganalisis crash dengan batas 500 ribu sesi per hari per proyek.
  • SDK menangkap semua jenis kegagalan: pengecualian fatal, ANR, sinyal OS, dan OOM di kedua platform mobile.
  • Setiap laporan berisi pelacakan stack, status perangkat, versi aplikasi, dan hingga 50 peristiwa analitik sebelum crash.
  • Integrasi memerlukan plugin google-services dan crashlytics di Gradle untuk deobfuskasi stack yang benar.
  • Issues mengelompokkan crash identik berdasarkan tanda tangan stack dengan prioritas berdasarkan jumlah pengguna yang terkena dampak.
  • Kunci dan log khusus memungkinkan memperkaya laporan dengan konteks — status langganan, layar terakhir, langkah sebelum kegagalan.
  • Integrasi dengan CI/CD melalui Crashlytics API memungkinkan pemblokiran penyebaran saat persentase crash-free turun di bawah ambang batas.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga