คู่มือนี้อธิบายวิธีปรับแต่งรายงานข้อขัดข้องโดยใช้ Firebase Crashlytics SDK ตามค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องสำหรับผู้ใช้แอปทั้งหมดของคุณโดยอัตโนมัติ (คุณสามารถปิดการรายงานข้อขัดข้องอัตโนมัติและ เปิดใช้การรายงานข้อขัดข้อง สำหรับผู้ใช้ของคุณแทน) Crashlytics มีกลไกการบันทึกสี่แบบตั้งแต่แกะกล่อง: คีย์แบบกำหนดเอง บันทึกแบบกำหนดเอง ตัวระบุผู้ใช้ และ ข้อยกเว้นที่ตรวจจับได้
เพิ่มคีย์ที่กำหนดเอง
คีย์ที่กำหนดเองช่วยให้คุณทราบสถานะเฉพาะของแอปที่นำไปสู่การหยุดทำงาน คุณสามารถเชื่อมโยงคู่คีย์/ค่าตามอำเภอใจกับรายงานข้อขัดข้อง จากนั้นใช้คีย์ที่กำหนดเองเพื่อค้นหาและกรองรายงานข้อขัดข้องในคอนโซล Firebase
ใน แดชบอร์ด Crashlytics คุณสามารถค้นหาปัญหาที่ตรงกับคีย์ที่กำหนดเองได้
เมื่อคุณตรวจสอบปัญหาเฉพาะในคอนโซล คุณสามารถดูคีย์แบบกำหนดเองที่เกี่ยวข้องสำหรับแต่ละเหตุการณ์ (แท็บย่อย คีย์ ) และแม้แต่กรองเหตุการณ์ด้วยคีย์แบบกำหนดเอง (เมนู ตัวกรอง ที่ด้านบนของหน้า)
ใช้เมธอดอินสแตนซ์ setCustomKey
เพื่อตั้งค่าคู่คีย์/ค่า โปรดทราบว่า setCustomKey
โอเวอร์โหลดสำหรับพารามิเตอร์ value
ที่จะยอมรับอาร์กิวเมนต์ดั้งเดิมหรือ String
นี่คือตัวอย่างบางส่วน:
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 }
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("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");
เพิ่มคู่คีย์/ค่าเป็นกลุ่มโดยส่งอินสแตนซ์ของ CustomKeysAndValues
ไปยังเมธอดอินสแตนซ์ setCustomKeys
:
Kotlin+KTX
สำหรับ Kotlin ฟังก์ชันที่มีอยู่นั้นง่ายกว่าการใช้ CustomKeysAndValues
builder
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);
เพิ่มข้อความบันทึกที่กำหนดเอง
หากต้องการให้บริบทเพิ่มเติมเกี่ยวกับเหตุการณ์ที่นำไปสู่การหยุดทำงาน คุณสามารถเพิ่มบันทึก Crashlytics ที่กำหนดเองลงในแอปของคุณได้ Crashlytics เชื่อมโยงบันทึกกับข้อมูลข้อขัดข้องของคุณและแสดงในหน้า Crashlytics ของ คอนโซล Firebase ใต้แท็บ บันทึก
ใช้ log
เพื่อช่วยระบุปัญหา ตัวอย่างเช่น:
Kotlin+KTX
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
ตั้งค่าตัวระบุผู้ใช้
ในการวินิจฉัยปัญหา การทราบว่าผู้ใช้รายใดของคุณประสบกับข้อขัดข้องดังกล่าวมักจะเป็นประโยชน์ Crashlytics มีวิธีระบุผู้ใช้โดยไม่ระบุตัวตนในรายงานข้อขัดข้องของคุณ
หากต้องการเพิ่ม ID ผู้ใช้ในรายงานของคุณ ให้กำหนดตัวระบุเฉพาะให้กับผู้ใช้แต่ละคนในรูปแบบของหมายเลข ID โทเค็น หรือค่าแฮช:
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
หากคุณจำเป็นต้องล้างตัวระบุผู้ใช้หลังจากตั้งค่าแล้ว ให้รีเซ็ตค่าเป็นสตริงว่าง การล้างตัวระบุผู้ใช้ไม่ได้เป็นการลบระเบียน Crashlytics ที่มีอยู่ หากคุณต้องการลบบันทึกที่เกี่ยวข้องกับ ID ผู้ใช้ โปรด ติดต่อฝ่ายสนับสนุนของ Firebase
(Android NDK เท่านั้น) เพิ่มข้อมูลเมตาในรายงานข้อขัดข้องของ NDK
คุณสามารถเลือกรวมส่วนหัว crashlytics.h
ในโค้ด C++ เพื่อเพิ่มข้อมูลเมตาในรายงานข้อขัดข้องของ NDK เช่น คีย์ที่กำหนดเอง บันทึกที่กำหนดเอง ตัวระบุผู้ใช้ ตัวเลือกทั้งหมดเหล่านี้อธิบายไว้ในหน้านี้ด้านบน
crashlytics.h
พร้อมใช้งานเป็นไลบรารี C++ เฉพาะส่วนหัวใน Firebase Android SDK GitHub Repository
อ่านความคิดเห็นในไฟล์ส่วนหัวเพื่อดูคำแนะนำเกี่ยวกับการใช้ NDK C++ API
รวมรายงาน GWP-ASan เพื่อแก้ปัญหาความเสียหายของหน่วยความจำ
Crashlytics สามารถช่วยคุณแก้ปัญหาข้อขัดข้องที่เกิดจากข้อผิดพลาดของหน่วยความจำภายในโดยการรวบรวมรายงาน GWP-ASan ข้อผิดพลาดเกี่ยวกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับความเสียหายของหน่วยความจำภายในแอปของคุณ ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป
คุณสามารถดูข้อมูลนี้ได้ในแท็บ "Memory Stack traces" ใหม่ เมื่อคุณคลิกดูรายละเอียดของปัญหาใน แดชบอร์ด Crashlytics
คุณยังสามารถใช้สัญญาณและตัวกรอง "รายงาน GWP-ASan" ใหม่เพื่อดูปัญหาทั้งหมดเกี่ยวกับข้อมูลนี้ได้อย่างรวดเร็ว
คุณจะได้รับรายงานหน่วยความจำ GWP-ASan หากคุณ เปิดใช้ GWP-ASan อย่างชัดแจ้ง ในแอปและใช้ Crashlytics SDK สำหรับ NDK v18.3.6+ (Firebase BoM v31.3.0+) คุณสามารถทดสอบการตั้งค่า GWP-ASan ของคุณโดยใช้ โค้ดเนทีฟตัวอย่างในเอกสารประกอบของ Android
รายงานข้อยกเว้นที่ไม่ร้ายแรง
นอกจากจะรายงานข้อขัดข้องของแอปโดยอัตโนมัติแล้ว Crashlytics ยังให้คุณบันทึกข้อยกเว้นที่ไม่ร้ายแรงและส่งให้คุณในครั้งต่อไปที่แอปของคุณเปิดตัว
ใช้เมธอด recordException
เพื่อบันทึกข้อยกเว้นที่ไม่ร้ายแรงใน catch
block ของแอป ตัวอย่างเช่น:
Kotlin+KTX
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 }
ข้อยกเว้นที่บันทึกไว้ทั้งหมดปรากฏเป็นปัญหาที่ไม่ร้ายแรงในคอนโซล Firebase สรุปปัญหาประกอบด้วยข้อมูลสถานะทั้งหมดที่คุณได้รับตามปกติจากการหยุดทำงาน พร้อมด้วยรายละเอียดตามเวอร์ชัน Android และอุปกรณ์ฮาร์ดแวร์
Crashlytics ประมวลผลข้อยกเว้นในเธรดพื้นหลังเฉพาะเพื่อลดผลกระทบด้านประสิทธิภาพต่อแอปของคุณ เพื่อลดทราฟฟิกเครือข่ายของผู้ใช้ Crashlytics จะรวมข้อยกเว้นที่บันทึกไว้เข้าด้วยกันและส่งในครั้งถัดไปที่เปิดตัวแอป
เปิดใช้งานการรายงานการเลือกรับ
ตามค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องสำหรับผู้ใช้แอปทั้งหมดของคุณโดยอัตโนมัติ เพื่อให้ผู้ใช้สามารถควบคุมข้อมูลที่ส่งได้มากขึ้น คุณสามารถเปิดใช้งานการเลือกรับการรายงานโดยปิดใช้งานการรายงานอัตโนมัติ และส่งข้อมูลไปยัง Crashlytics เมื่อคุณเลือกในโค้ดของคุณเท่านั้น:
ในบล็อก
application
ของไฟล์AndroidManifest.xml
ให้เพิ่มแท็กmeta-data
เพื่อปิดการรวบรวมอัตโนมัติ:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
เปิดใช้งานการรวบรวมสำหรับผู้ใช้ที่เลือกโดยเรียกใช้การแทนที่การรวบรวมข้อมูล Crashlytics ที่รันไทม์ ค่าการลบล้างจะคงอยู่ตลอดการเปิดตัวแอปของคุณ ดังนั้น Crashlytics จึงสามารถรวบรวมรายงานได้โดยอัตโนมัติ หากต้องการยกเลิกการรายงานข้อขัดข้องโดยอัตโนมัติ ให้ส่ง
false
เป็นค่าแทนที่ เมื่อตั้งค่าเป็นfalse
ค่าใหม่จะไม่มีผลจนกว่าจะเรียกใช้แอปครั้งถัดไปKotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
จัดการข้อมูลเชิงลึกข้อขัดข้อง
Crash Insights ช่วยคุณแก้ไขปัญหาโดยการเปรียบเทียบสแต็กเทรซที่ไม่ระบุชื่อกับการติดตามจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบว่าปัญหาของคุณเป็นส่วนหนึ่งของแนวโน้มที่ใหญ่กว่าหรือไม่ สำหรับหลายๆ ปัญหา Crash Insights ยังมีแหล่งข้อมูลเพื่อช่วยคุณแก้ปัญหาข้อขัดข้อง
ข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้องใช้ข้อมูลข้อขัดข้องแบบรวมเพื่อระบุแนวโน้มความเสถียรทั่วไป หากคุณไม่ต้องการแชร์ข้อมูลของแอป คุณสามารถเลือกไม่ใช้ Crash Insights ได้จากเมนู Crash Insights ที่ด้านบนของรายการปัญหา Crashlytics ใน คอนโซล Firebase