ปรับแต่งรายงานข้อขัดข้องสำหรับ Android

เลือกแพลตฟอร์ม: iOS+ Android Flutter Unity


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

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

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

  • คุณสามารถค้นหาปัญหาที่ตรงกับคีย์ที่กำหนดเอง

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

ใช้เมธอดอินสแตนซ์ setCustomKey เพื่อตั้งค่าคู่คีย์-ค่า โปรดทราบว่า setCustomKey มีการโอเวอร์โหลดสำหรับพารามิเตอร์ value เพื่อยอมรับอาร์กิวเมนต์ดั้งเดิมหรืออาร์กิวเมนต์ String ตัวอย่างเช่น

Kotlin

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

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

สำหรับ 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จะเชื่อมโยงบันทึก กับข้อมูลข้อขัดข้องและแสดงบันทึกในแท็บบันทึก เมื่อคุณดู รายละเอียดของปัญหา (ดูปัญหาทั้งหมดในแดชบอร์ดDevOps และการมีส่วนร่วม > CrashlyticsของFirebaseคอนโซล)

ใช้ log เพื่อช่วยระบุปัญหา เช่น

Kotlin

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

ตั้งค่าตัวระบุผู้ใช้

การทราบว่าผู้ใช้รายใดพบข้อขัดข้องที่เฉพาะเจาะจงมักจะเป็นประโยชน์ในการวินิจฉัยปัญหา Crashlytics มีวิธีระบุตัวตนของผู้ใช้ใน รายงานข้อขัดข้องโดยไม่ระบุชื่อ

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

Kotlin

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 ข้อผิดพลาดที่เกี่ยวข้องกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับการเสียหายของหน่วยความจำภายในแอป ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป

ในแดชบอร์ด DevOps และการมีส่วนร่วม > Crashlytics ของคอนโซล Firebase คุณ สามารถทำสิ่งต่อไปนี้กับข้อมูลนี้ได้

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

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

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

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

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

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

Kotlin

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
}

นอกจากนี้ คุณยังแนบคีย์ที่กำหนดเองกับข้อยกเว้นที่ไม่ร้ายแรงที่เฉพาะเจาะจงได้ด้วย เช่น

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}

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

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

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

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

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

SDK Analytics จะบันทึกเหตุการณ์ 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 รวบรวมรายงานสำหรับผู้ใช้รายนั้นได้โดยอัตโนมัติ

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

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

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

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

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

ขั้นตอนถัดไป

  • ส่งออกข้อมูลไปยัง BigQuery หรือ Cloud Logging เพื่อการวิเคราะห์ขั้นสูงและฟีเจอร์ต่างๆ เช่น การค้นหาข้อมูล การสร้างแดชบอร์ดที่กำหนดเอง และการตั้งค่าการแจ้งเตือนที่กำหนดเอง