ปรับแต่งรายงานข้อขัดข้องของ Firebase Crashlytics


ในหน้าแดชบอร์ด Crashlytics คุณสามารถคลิกปัญหาเพื่อดูรายงานเหตุการณ์โดยละเอียด คุณสามารถปรับแต่งรายงานดังกล่าวเพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นในแอปและสถานการณ์รอบเหตุการณ์ที่รายงานไปยัง Crashlytics ได้ดีขึ้น

  • รับบันทึกเบรดครัมบ์โดยอัตโนมัติหากแอปใช้ Firebase SDK สําหรับ Google Analytics บันทึกเหล่านี้ช่วยให้คุณเห็นการกระทําของผู้ใช้ที่นําไปสู่เหตุการณ์ที่รวบรวมโดย 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

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 มีวิธีระบุผู้ใช้โดยไม่ระบุตัวตนในรายงานข้อขัดข้อง

หากต้องการเพิ่มรหัสผู้ใช้ลงในรายงาน ให้กําหนดตัวระบุที่ไม่ซ้ำกันให้กับผู้ใช้แต่ละรายในรูปแบบหมายเลขประจําตัว โทเค็น หรือค่าที่ผ่านการแฮช โดยทําดังนี้

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

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

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

(Android NDK เท่านั้น) เพิ่มข้อมูลเมตาลงในรายงานข้อขัดข้องของ NDK

คุณเลือกที่จะใส่ส่วนหัว crashlytics.h ในโค้ด C++ เพื่อเพิ่มข้อมูลเมตาลงในรายงานข้อขัดข้องของ NDK ได้ เช่น คีย์ที่กำหนดเอง บันทึกที่กำหนดเอง และตัวระบุผู้ใช้ ตัวเลือกทั้งหมดนี้อธิบายอยู่ในหน้านี้ด้านบน

crashlytics.h มีให้บริการเป็นไลบรารี C++ ที่มีเฉพาะส่วนส่วนหัวในที่เก็บ GitHub ของ Firebase Android SDK

อ่านความคิดเห็นในไฟล์ส่วนหัวเพื่อดูวิธีการใช้ NDK C++ API

ใส่รายงาน GWP-ASan เพื่อแก้ไขข้อบกพร่องเกี่ยวกับความเสียหายของหน่วยความจำ

Crashlytics ช่วยแก้ไขข้อขัดข้องที่เกิดจากข้อผิดพลาดด้านหน่วยความจําของระบบได้ด้วยการรวบรวมรายงาน GWP-ASan ข้อผิดพลาดที่เกี่ยวข้องกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับการเสียหายของหน่วยความจำภายในแอป ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป

  • คุณดูข้อมูลนี้ได้ในแท็บ "สแต็กเทรซหน่วยความจำ" ใหม่เมื่อคลิกรายละเอียดของปัญหาในแดชบอร์ดCrashlytics

  • นอกจากนี้ คุณยังใช้สัญญาณและตัวกรอง "รายงาน GWP-ASan" ใหม่เพื่อดูปัญหาทั้งหมดเกี่ยวกับข้อมูลนี้อย่างรวดเร็วได้ด้วย

คุณจะได้รับรายงานหน่วยความจำ GWP-ASan หากเปิดใช้ GWP-ASan อย่างชัดแจ้งในแอปและใช้ Crashlytics SDK สำหรับ NDK v18.3.6 ขึ้นไป (Firebase BoM v31.3.0 ขึ้นไป) คุณสามารถทดสอบการตั้งค่า GWP-ASan โดยใช้โค้ดเนทีฟตัวอย่างในเอกสารประกอบของ Android

รายงานข้อยกเว้นที่ไม่ร้ายแรง

นอกจากการรายงานข้อขัดข้องของแอปโดยอัตโนมัติแล้ว Crashlytics ยังให้คุณบันทึกข้อยกเว้นที่ไม่ร้ายแรงและส่งให้คุณเมื่อแอปเปิดขึ้นครั้งถัดไป

ใช้เมธอด recordException เพื่อบันทึกข้อยกเว้นที่ไม่ร้ายแรงในบล็อก catch ของแอป เช่น

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 จะจัดกลุ่มข้อยกเว้นที่บันทึกไว้ไว้ด้วยกันและส่งเมื่อแอปเปิดขึ้นครั้งถัดไปเพื่อลดการรับส่งข้อมูลในเครือข่ายของผู้ใช้

ดูบันทึกเบรดครัมบ์

บันทึกเบรดครัมบ์ช่วยให้คุณเข้าใจการโต้ตอบของผู้ใช้กับแอปที่ทําให้เกิดเหตุการณ์ข้อขัดข้อง เหตุการณ์ที่ไม่ใช่ข้อขัดข้องร้ายแรง หรือ ANR ได้ดียิ่งขึ้น บันทึกเหล่านี้อาจมีประโยชน์เมื่อพยายามจำลองและแก้ไขข้อบกพร่องของปัญหา

บันทึกเบรดครัมบ์มาจาก Google Analytics ดังนั้นหากต้องการดูบันทึกเบรดครัมบ์ คุณจะต้องเปิดใช้ Google Analytics สําหรับโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สําหรับ Google Analytics ลงในแอป เมื่อมีคุณสมบัติตรงตามข้อกําหนดเหล่านี้แล้ว บันทึกเบรดครัมบ์จะรวมอยู่ในข้อมูลของเหตุการณ์ในแท็บบันทึกโดยอัตโนมัติเมื่อคุณดูรายละเอียดของปัญหา

Analytics SDK จะบันทึกเหตุการณ์ screen_view โดยอัตโนมัติ ซึ่งช่วยให้บันทึกเบรดครัมบ์แสดงรายการหน้าจอที่ดูก่อนเกิดเหตุการณ์ข้อขัดข้องร้ายแรง เหตุการณ์ข้อขัดข้องที่ไม่ร้ายแรง หรือ ANR บันทึกเบรดครัมบ์ screen_view มีพารามิเตอร์ firebase_screen_class

บันทึกเบรดครัมบ์จะสร้างขึ้นจากเหตุการณ์ที่กําหนดเองที่คุณบันทึกด้วยตนเองภายในเซสชันของผู้ใช้ รวมถึงข้อมูลพารามิเตอร์ของเหตุการณ์ ข้อมูลนี้ช่วยแสดงชุดการดำเนินการของผู้ใช้ที่นำไปสู่ข้อขัดข้อง เหตุการณ์ที่ไม่ร้ายแรง หรือ ANR

โปรดทราบว่าคุณสามารถควบคุมการเก็บรวบรวมและการใช้ข้อมูล Google Analytics ซึ่งรวมถึงข้อมูลที่แสดงในบันทึกเบรดครัมบ์

เปิดใช้การรายงานการเลือกใช้

โดยค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องสำหรับผู้ใช้แอปทุกคนโดยอัตโนมัติ หากต้องการให้ผู้ใช้ควบคุมข้อมูลที่ส่งได้มากขึ้น คุณสามารถเปิดใช้การรายงานแบบเลือกใช้ได้โดยปิดใช้การรายงานอัตโนมัติและส่งข้อมูลไปยัง Crashlytics เฉพาะเมื่อคุณเลือกในโค้ดเท่านั้น

  1. ในบล็อก application ของไฟล์ AndroidManifest.xml ให้เพิ่มแท็ก meta-data เพื่อปิดการเก็บรวบรวมอัตโนมัติ

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. เปิดใช้การเก็บรวบรวมสําหรับผู้ใช้บางรายโดยการเรียกใช้การลบล้างCrashlyticsการเก็บรวบรวมข้อมูลขณะรันไทม์ ค่าการลบล้างจะยังคงอยู่ตลอดการเริ่มการทำงานของแอปเพื่อให้ Crashlytics รวบรวมรายงานโดยอัตโนมัติได้ หากต้องการเลือกไม่ใช้การรายงานข้อขัดข้องอัตโนมัติ ให้ส่ง false เป็นค่าลบล้าง เมื่อตั้งค่าเป็น false ระบบจะไม่ใช้ค่าใหม่จนกว่าแอปจะทำงานครั้งถัดไป

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

จัดการข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้อง

ข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้องจะช่วยคุณแก้ปัญหาโดยการเปรียบเทียบสแต็กเทรซที่ลบข้อมูลระบุตัวบุคคลแล้วกับเทรซจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบว่าปัญหาของคุณเป็นส่วนหนึ่งของแนวโน้มที่ใหญ่ขึ้นหรือไม่ สําหรับปัญหาหลายอย่าง ข้อมูลวิเคราะห์ข้อขัดข้องยังมีแหล่งข้อมูลเพื่อช่วยแก้ไขข้อขัดข้องด้วย

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