Firebase Crashlytics — คืออะไร การขัดข้องและการวินิจฉัยข้อบกพร่อง

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-27 เวลาอ่าน: 10 นาที

Firebase Crashlytics เป็นบริการของ Google สำหรับรวบรวม จัดกลุ่ม และวิเคราะห์การขัดข้องของแอปพลิเคชันมือถือแบบเรียลไทม์ SDK จะสกัดกั้นข้อยกเว้นที่ไม่ได้รับการจัดการ การขัดข้องของโค้ดเนทีฟ และสัญญาณ ANR โดยอัตโนมัติ สร้างรายงานโดยละเอียดพร้อมร่องรอยสแต็ก สถานะอุปกรณ์ และบันทึก ตามข้อมูลของ Google, 2026 Crashlytics ถูกใช้ในแอปพลิเคชันมากกว่า 4 ล้านรายการทั่วโลก บริการนี้ให้บริการฟรีโดยมีขีดจำกัด 500,000 เซสชันต่อวันต่อโปรเจกต์

ประเด็นสำคัญ

  • Firebase Crashlytics — ตัวรวบรวมการขัดข้องอัตโนมัติพร้อมอัตราค่าบริการฟรีสูงสุด 500,000 เซสชันต่อวัน
  • SDK สกัดกั้น ข้อยกเว้น Kotlin, Java, Swift, Objective-C, native C/C++ และ ANR บน Android
  • แต่ละรายงานประกอบด้วย ร่องรอย สแต็ก เวอร์ชันแอป รุ่นอุปกรณ์ และบันทึกที่กำหนดเอง
  • Crashlytics จัดกลุ่ม การขัดข้อง ที่เหมือนกันตามสแต็กและความถี่ แสดงจำนวนผู้ใช้ที่ได้รับผลกระทบ
  • บริการนี้รวมเข้ากับ Analytics — สามารถเห็นเส้นทางของผู้ใช้จนถึงจุดที่ขัดข้องในอินเทอร์เฟซเดียวกัน

Firebase Crashlytics คืออะไร

Firebase Crashlytics เป็นบริการฟรีของ Google สำหรับตรวจสอบความเสถียรของแอปพลิเคชันมือถือ ซึ่ง Google ซื้อกิจการในปี 2017 พร้อมกับบริษัท Fabric Crashlytics จะรวบรวมข้อมูลเกี่ยวกับการขัดข้องของแอปพลิเคชันทุกครั้งโดยอัตโนมัติ จัดกลุ่มการขัดข้องที่เหมือนกันตามลายเซ็นสแต็ก และแสดงในคอนโซล Firebase โดยจัดลำดับความสำคัญตามจำนวนผู้ใช้ที่ได้รับผลกระทบ

ประวัติและวิวัฒนาการ

Crashlytics เปิดตัวในปี 2011 โดยเป็นส่วนหนึ่งของแพลตฟอร์ม Fabric และกลายเป็นมาตรฐานโดยพฤตินัยสำหรับการรายงานการขัดข้องบน iOS อย่างรวดเร็ว หลังจากที่ Google ซื้อกิจการในปี 2017 ด้วยมูลค่าประมาณ 2 พันล้านดอลลาร์ (ทั้ง Fabric) Crashlytics ถูกรวมเข้ากับ Firebase SDK เวอร์ชัน 18.0.0 (2021) เพิ่มการรองรับ Kotlin Multiplatform และเวอร์ชัน 19.0.0 (2024) เพิ่มการรวบรวม ANR อัตโนมัติบน Android โดยไม่ต้องกำหนดค่าเพิ่มเติม ตามข้อมูลของ Google (2026) Crashlytics ประมวลผลการขัดข้องมากกว่า 10 พันล้านครั้งต่อเดือน

ขีดจำกัดฟรีของ Crashlytics

Crashlytics ให้บริการฟรีโดยมีขีดจำกัด 500,000 เซสชันต่อวันต่อโปรเจกต์ Firebase สำหรับแอปพลิเคชันส่วนใหญ่ นี่เพียงพอแล้ว — ตามข้อมูลของ Google (2026) 95% ของโปรเจกต์ไม่เกินขีดจำกัด เมื่อเกินขีดจำกัด การรวบรวมข้อมูลจะไม่หยุด แต่รายงานจะหยุดอัปเดตจนถึงวันถัดไป สำหรับโปรเจกต์ที่มีโหลดสูง มีแผน Spark และ Blaze ของ Firebase ให้เลือก — Crashlytics ยังคงฟรีในทั้งสองแผน และขีดจำกัดเซสชันจะนับแยกต่างหาก

Crashlytics ตรวจจับและรวบรวมการขัดข้องอย่างไร

กลไกการรวบรวม ของ Crashlytics อาศัยการสกัดกั้นข้อยกเว้นในระดับแพลตฟอร์มและรันไทม์ บน Android SDK จะติดตั้ง UncaughtExceptionHandler ซึ่งสกัดกั้นข้อยกเว้นที่ไม่ได้ถูกจับทั้งหมดของ Kotlin และ Java บน iOS Crashlytics ใช้ NSSetUncaughtExceptionHandler สำหรับ Objective-C/Swift และตัวจัดการข้อยกเว้น Mach ของตัวเองสำหรับการขัดข้องของโค้ดเนทีฟ

ประเภทของการขัดข้องที่ถูกสกัดกั้น

Crashlytics แยกแยะ ห้าประเภท ของการขัดข้อง: fatal (การขัดข้องร้ายแรง), non-fatal (ข้อยกเว้นไม่ร้ายแรงที่ส่งด้วยตนเอง), ANR (Android — แอปไม่ตอบสนอง), signal (สัญญาณ OS — SIGSEGV, SIGABRT) และ OOM (หน่วยความจำไม่เพียงพอบน iOS) แต่ละประเภทจะถูกจัดการโดยกลไกแยกต่างหากและแสดงในคอนโซลพร้อมป้ายกำกับที่เกี่ยวข้อง

ประเภทการขัดข้องแพลตฟอร์มตัวกระตุ้น
FatalAndroid, iOSข้อยกเว้นที่ไม่ได้ถูกจับ
Non-fatalAndroid, iOSการเรียก Crashlytics.logException() ด้วยตนเอง
ANRAndroidไม่ตอบสนองนานกว่า 5 วินาที
SignalAndroid, iOSสัญญาณ OS (SEGV, ABRT, BUS)
OOMiOSหน่วยความจำไม่เพียงพอ

รูปแบบรายงานการขัดข้อง

แต่ละ รายงาน Crashlytics ประกอบด้วยข้อมูลที่ครบถ้วน: ร่องรอยสแต็กที่สมบูรณ์พร้อมชื่อคลาสและหมายเลขบรรทัด เวอร์ชันแอปพลิเคชัน (versionName + versionCode) รุ่นอุปกรณ์ เวอร์ชัน OS ปริมาณหน่วยความจำว่าง การวางแนวหน้าจอ และเวลาตั้งแต่เริ่มต้น หากเชื่อมต่อ Firebase Analytics รายงานจะรวมเส้นทางของ 50 เหตุการณ์ผู้ใช้ล่าสุดก่อนการขัดข้องด้วย — ซึ่งสำคัญอย่างยิ่งสำหรับการจำลองการขัดข้องซ้ำ

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

การรวม Crashlytics เข้ากับโปรเจกต์ Android

การเชื่อมต่อ Crashlytics กับแอปพลิเคชัน Android ต้องเพิ่ม dependencies สองรายการใน build.gradle และกำหนดค่า Google Services Plugin SDK จะเชื่อมต่อการรายงานการขัดข้องโดยอัตโนมัติเมื่อเริ่มต้น Firebase โดยไม่ต้องใช้โค้ดเพิ่มเติม สำหรับการทำงานที่ถูกต้อง จำเป็นต้องมี google-services plugin และไฟล์ google-services.json จากคอนโซล Firebase

groovy
// build.gradle (ระดับโปรเจกต์)
plugins {
    id "com.google.gms.google-services" version "4.4.0"
}

// build.gradle (ระดับแอป)
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")
}

การกำหนดค่า Crashlytics Plugin

Plugin com.google.firebase.crashlytics ทำสองภารกิจ: สร้างรหัสประจำตัวบิลด์ที่ไม่ซ้ำกัน (build ID) สำหรับการแมปสแต็กที่ถูกทำให้สับสน และสร้างทรัพยากรสำหรับ Crashlytics SDK โดยอัตโนมัติ หากไม่มี plugin การขัดข้องจะถูกทำเครื่องหมายเป็น "ไม่ได้แมป" — คุณจะเห็นเฉพาะชื่อคลาสที่ถูกทำให้สับสน (a.b.c) โดยไม่สามารถค้นหาโค้ดต้นฉบับได้ Plugin จะถูกเพิ่มใน build.gradle ระดับรากและ build.gradle ของโมดูลแอปพลิเคชัน

การตรวจสอบการรวมระบบ

สำหรับ การทดสอบ การรวม Crashlytics ใช้ method พิเศษ forceCrash() ซึ่งสร้างข้อยกเว้นสำหรับทดสอบ ในบิลด์โปรดักชัน method นี้จะไม่พร้อมใช้งาน หลังจากเรียกใช้การขัดข้องทดสอบ รายงานจะปรากฏในคอนโซล Firebase ภายใน 1-5 นาที หากรายงานไม่แสดง ให้ตรวจสอบว่า google-services.json ตรงกับแพ็กเกจของแอปพลิเคชัน และ AndroidManifest ไม่มีแฟลกที่ปิดการรวบรวมข้อมูล

การวิเคราะห์การขัดข้องและการจัดกลุ่มรายงาน

คอนโซล Crashlytics ให้มุมมองสองระดับ: รายการการขัดข้องทั้งหมด (Issues) ที่จัดกลุ่มตามประเภทการขัดข้อง และรายงานโดยละเอียดสำหรับแต่ละ Issue พร้อมร่องรอย สถิติ และข้อมูลที่กำหนดเอง แต่ละ Issue จะรวมการขัดข้องทั้งหมดที่มีลายเซ็นเดียวกัน — ข้อยกเว้นประเภทเดียวกันและร่องรอยสแต็กที่ตรงกัน

Issues และการจัดกลุ่ม

การจัดกลุ่มการขัดข้อง เป็นคุณสมบัติหลักของ Crashlytics แทนที่จะแสดงการขัดข้องนับพันรายการ บริการจะรวมเข้าด้วยกันเป็น Issues ตามลายนิ้วมือ (fingerprint) — ผลรวมตรวจสอบของร่องรอยสแต็ก หนึ่ง Issue สามารถมีการขัดข้องตั้งแต่ 1 ถึงหลายล้านครั้ง สำหรับแต่ละ Issue จะแสดง: จำนวนครั้งที่ร้ายแรง จำนวนผู้ใช้ที่ไม่ซ้ำกัน เวอร์ชันแอปพลิเคชันที่พบการขัดข้อง และเปอร์เซ็นต์ของผู้ใช้ที่พบปัญหา

ตามข้อมูลของ Google (2026) โดยเฉลี่ย 20% ของ Issues คิดเป็น 80% ของการขัดข้องร้ายแรงทั้งหมดของแอปพลิเคชัน (หลักการพาเรโต) Crashlytics จะจัดเรียง Issues ตามความรุนแรงโดยอัตโนมัติ — ยิ่งมีผู้ใช้ได้รับผลกระทบมากเท่าใด ลำดับความสำคัญก็จะยิ่งสูงขึ้นเท่านั้น ช่วยให้นักพัฒนาสามารถแก้ไขปัญหาที่พบบ่อยที่สุดได้เป็นอันดับแรก

สถิติตามเวอร์ชัน

Crashlytics ติดตามความเสถียรของแต่ละเวอร์ชันแอปพลิเคชันแยกกัน กราฟ crash-free users แสดงเปอร์เซ็นต์ของผู้ใช้ที่ไม่พบการขัดข้องร้ายแรงในแต่ละเวอร์ชัน หากเมื่ออัปเดต เปอร์เซ็นต์ลดลงต่ำกว่าเกณฑ์ (ค่าเริ่มต้น 99%) Crashlytics จะส่งการแจ้งเตือนทางอีเมลและใน Firebase Console ซึ่งช่วยให้สามารถย้อนกลับเวอร์ชันที่มีปัญหาหรือเผยแพร่ hotfix ได้อย่างรวดเร็ว

คีย์ที่กำหนดเอง บันทึก และ Breadcrumbs

Crashlytics มีกลไกสามอย่างสำหรับเพิ่มบริบทให้กับรายงาน: คีย์ที่กำหนดเอง (keys) สำหรับข้อมูลที่มีโครงสร้าง บันทึก (logs) สำหรับร่องรอยข้อความ และ Breadcrumbs จาก Analytics สำหรับเส้นทางผู้ใช้ ข้อมูลทั้งสามประเภทจะถูกแนบไปกับรายงานการขัดข้องและแสดงในการ์ดรายละเอียด

คีย์ที่กำหนดเอง

Custom Keys คือคู่ "คีย์-ค่า" ที่ส่งไปพร้อมกับการขัดข้องแต่ละครั้ง สูงสุด 64 คีย์ต่อแอปพลิเคชัน แต่ละคีย์เป็นสตริงยาวสูงสุด 1,024 ตัวอักษร คีย์มีประโยชน์สำหรับการทำเครื่องหมายสถานะของแอปพลิเคชัน: ระดับการสมัครสมาชิก สถานะการยืนยันตัวตน หน้าจอล่าสุด เปิด VPN หรือไม่ ค่าจะถูกเขียนทับ — คีย์ใหม่ที่มีชื่อเดียวกันจะแทนที่คีย์เก่า

การบันทึกเหตุการณ์

Custom Logs คือข้อความที่ Crashlytics เก็บไว้ในบัฟเฟอร์วงกลมขนาด 64 KB บันทึกจะถูกแนบไปกับการขัดข้องครั้งถัดไปโดยอัตโนมัติ หากไม่เกิดการขัดข้อง บันทึกจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ (ไม่ใช้แบนด์วิดท์) การบันทึกใช้สำหรับบันทึกขั้นตอนของผู้ใช้ก่อนการขัดข้อง: "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 จาก Analytics

หากเชื่อมต่อ Firebase Analytics ในโปรเจกต์ Crashlytics จะได้รับ Breadcrumbs โดยอัตโนมัติ — 50 เหตุการณ์การวิเคราะห์ล่าสุดก่อนการขัดข้อง แต่ละ breadcrumb ประกอบด้วยชื่อเหตุการณ์และพารามิเตอร์ ซึ่งช่วยให้สามารถสร้างลำดับการกระทำที่นำไปสู่การขัดข้องได้อย่างแม่นยำ: ผู้ใช้เปิดหน้าจอ → เพิ่มสินค้า → ไปที่การชำระเงิน → เกิดการขัดข้อง Breadcrumbs จะแสดงในการ์ด Issue ในแท็บ "บันทึก" แยกต่างหาก

แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการการขัดข้อง

Crashlytics มีประสิทธิภาพสูงสุดเมื่อกำหนดค่าบริบทและกระบวนการจัดการ Issues อย่างถูกต้อง การปฏิบัติแสดงให้เห็นว่าทีมที่นำระเบียบการจัดการการขัดข้องมาใช้ช่วยลดเวลาในการแก้ไขบั๊กวิกฤตลง 60% (ข้อมูล Google, 2026)

การจัดลำดับความสำคัญของ Issues

ไม่ใช่ทุกการขัดข้องที่สำคัญเท่ากัน การจัดลำดับความสำคัญ ตามจำนวนผู้ใช้และความถี่ช่วยให้มุ่งเน้นไปที่ปัญหาที่สำคัญที่สุด กฎ: แก้ไข Issues ที่ส่งผลกระทบต่อผู้ใช้มากกว่า 0.1% ภายใน 24 ชั่วโมง Issues ที่เกิดขึ้นเพียงครั้งเดียว (< 0.01%) สามารถเลื่อนออกไปจนกว่ารุ่นที่วางแผนไว้ถัดไป Crashlytics จะทำเครื่องหมายการถดถอยโดยอัตโนมัติ — Issues ที่ได้รับการแก้ไขแล้วแต่ปรากฏขึ้นอีกครั้งในเวอร์ชันใหม่

การรวมเข้ากับ CI/CD

Crashlytics API ช่วยให้สามารถรวมรายงานการขัดข้องเข้ากับไปป์ไลน์ CI/CD ผ่าน REST API หรือ Firebase CLI ในการเผยแพร่แต่ละครั้ง คุณสามารถตรวจสอบโดยอัตโนมัติว่าเปอร์เซ็นต์ผู้ใช้ที่ไม่พบการขัดข้องเกินเกณฑ์หรือไม่ หากเกินเกณฑ์ CI/CD จะบล็อกการปรับใช้และส่งการแจ้งเตือนไปยังทีม Firebase CLI รองรับคำสั่ง firebase crashlytics:builds:upload สำหรับอัปโหลดไฟล์แมป ProGuard/R8 — หากไม่มีไฟล์เหล่านี้ สแต็กจะไม่สามารถอ่านได้

ตามข้อมูลของ Google (2026) แอปพลิเคชันที่ใช้การตรวจสอบเกณฑ์ crash-free อัตโนมัติใน CI/CD เผยแพร่การถดถอยน้อยลง 40% ในโปรดักชัน เกณฑ์ที่แนะนำ: crash-free users >= 99.5% สำหรับรุ่นที่สำคัญ และ >= 99.0% สำหรับรุ่นปกติ

คำถามที่พบบ่อย

ขีดจำกัดเซสชันฟรีใน Crashlytics คือเท่าไร

Crashlytics ฟรีสูงสุด 500,000 เซสชันต่อวันต่อโปรเจกต์ Firebase เมื่อเกินขีดจำกัด รายงานจะหยุดอัปเดตจนถึงวันถัดไป แต่การรวบรวมข้อมูลไม่หยุด

จำเป็นต้องใช้ Firebase Analytics สำหรับ Crashlytics หรือไม่

Crashlytics ทำงานได้โดยไม่ต้องใช้ Analytics แต่เมื่อใช้ Analytics รายงานจะประกอบด้วย Breadcrumbs — 50 เหตุการณ์ผู้ใช้ล่าสุดก่อนการขัดข้อง แนะนำให้เชื่อมต่อทั้งสองโมดูล

Crashlytics จัดกลุ่มการขัดข้องที่เหมือนกันอย่างไร

การจัดกลุ่ม ดำเนินการตามลายนิ้วมือ (fingerprint) — ผลรวมตรวจสอบของร่องรอยสแต็ก รวมถึงประเภทข้อยกเว้นและหมายเลขบรรทัด การขัดข้องที่มีลายนิ้วมือเดียวกันจะถูกรวมเข้าใน Issue เดียวกัน

ทำไมการขัดข้องไม่แสดงในคอนโซล

ตรวจสอบ การตั้งค่า: ไฟล์ google-services.json, การมีอยู่ของ plugin crashlytics ใน build.gradle, ไม่มีการกรองตามเวอร์ชันในคอนโซล และการมีบิลด์ที่ยอมรับข้อตกลงใบอนุญาต การดีบักทำงานเฉพาะในบิลด์รีลีสเท่านั้น

สามารถส่งข้อผิดพลาดที่ไม่ร้ายแรงไปยัง Crashlytics ได้หรือไม่

ได้ ใช้ recordException() สำหรับข้อยกเว้นที่ไม่ร้ายแรง รายงานเหล่านี้ไม่ขัดจังหวะการทำงานของแอปพลิเคชัน แต่แสดงในคอนโซลพร้อมตัวนับจำนวนครั้งที่เกิดและร่องรอยสแต็กที่สมบูรณ์

สรุป

  • Firebase Crashlytics — บริการรวบรวมและวิเคราะห์การขัดข้องฟรี โดยมีขีดจำกัด 500,000 เซสชันต่อวันต่อโปรเจกต์
  • SDK สกัดกั้น ทุกประเภท ของการขัดข้อง: ข้อยกเว้นร้ายแรง ANR สัญญาณ OS และ OOM บนทั้งสองแพลตฟอร์มมือถือ
  • แต่ละรายงานประกอบด้วย ร่องรอย สแต็ก สถานะอุปกรณ์ เวอร์ชันแอป และเหตุการณ์การวิเคราะห์สูงสุด 50 รายการก่อนการขัดข้อง
  • การรวมต้องใช้ plugin google-services และ crashlytics ใน Gradle เพื่อการดีออบฟัสเคชันสแต็กที่ถูกต้อง
  • Issues จัดกลุ่มการขัดข้องที่เหมือนกันตามลายเซ็นสแต็ก โดยจัดลำดับความสำคัญตามจำนวนผู้ใช้ที่ได้รับผลกระทบ
  • คีย์และบันทึก ที่กำหนดเองช่วยเพิ่มบริบทให้กับรายงาน — สถานะการสมัครสมาชิก หน้าจอล่าสุด ขั้นตอนก่อนการขัดข้อง
  • การรวมกับ CI/CD ผ่าน Crashlytics API ช่วยให้สามารถบล็อกการปรับใช้เมื่อเปอร์เซ็นต์ crash-free ต่ำกว่าเกณฑ์

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม