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

หากต้องการเพิ่ม 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 Tracs" ใหม่เมื่อคลิกรายละเอียดของปัญหาใน หน้าแดชบอร์ด 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);

จัดการข้อมูล Crash Insights

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

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