ในแดชบอร์ด Crashlytics คุณสามารถคลิกปัญหาและดูรายละเอียด รายงานเหตุการณ์ คุณสามารถปรับแต่งรายงานดังกล่าวเพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นในแอปและสถานการณ์รอบเหตุการณ์ที่รายงานไปยัง Crashlytics ได้ดีขึ้น
รายงานข้อยกเว้นที่ตรวจไม่พบและข้อยกเว้นที่ตรวจพบไปยัง Crashlytics
ใช้เครื่องมือในการบันทึกคีย์ที่กำหนดเองของแอป ข้อความบันทึกที่กำหนดเองและตัวระบุผู้ใช้
รับบันทึกเบรดครัมบ์โดยอัตโนมัติหากแอปใช้ Firebase SDK สําหรับ Google Analytics บันทึกเหล่านี้ช่วยให้คุณเห็นการกระทําของผู้ใช้ที่นําไปสู่เหตุการณ์ที่รวบรวมโดย Crashlytics ในแอป
ปิดการรายงานข้อขัดข้องอัตโนมัติ และ เปิดใช้การรายงานการเลือกใช้สำหรับผู้ใช้ของคุณ โปรดทราบว่าโดยค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องในแพลตฟอร์มโดยอัตโนมัติสำหรับผู้ใช้แอปทุกคน
รายงานข้อยกเว้นที่ตรวจไม่พบ
คุณสามารถจับข้อผิดพลาด "ร้ายแรง" ทั้งหมดที่แสดงภายในเฟรมเวิร์ก Flutter โดยอัตโนมัติได้ด้วยการลบล้าง FlutterError.onError
ด้วย FirebaseCrashlytics.instance.recordFlutterFatalError
หรือหากต้องการจับข้อยกเว้น "ที่ไม่ร้ายแรง" ด้วย ให้ลบล้าง FlutterError.onError
ด้วย FirebaseCrashlytics.instance.recordFlutterError
ดังนี้
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
ข้อผิดพลาดแบบอะซิงโครนัส
เฟรมเวิร์ก Flutter จะไม่ตรวจจับข้อผิดพลาดแบบอะซิงโครนัสในกรณีต่อไปนี้
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
หากต้องการจับข้อผิดพลาดดังกล่าว ให้ใช้ตัวแฮนเดิล PlatformDispatcher.instance.onError
ดังนี้
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
ข้อผิดพลาดภายนอก Flutter
หากต้องการจับข้อผิดพลาดที่เกิดขึ้นนอกบริบท Flutter ให้ติดตั้งโปรแกรมรับฟังข้อผิดพลาดใน Isolate
ปัจจุบัน
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
รายงานข้อยกเว้นที่พบ
นอกจากการรายงานข้อขัดข้องของแอปโดยอัตโนมัติแล้ว Crashlytics ยังให้คุณบันทึกข้อยกเว้นที่ไม่ร้ายแรงและส่งให้คุณได้เมื่อมีการรายงานเหตุการณ์ร้ายแรงครั้งถัดไปหรือเมื่อแอปรีสตาร์ท
ใช้เมธอด recordError
เพื่อบันทึกข้อยกเว้นที่ไม่ร้ายแรงในการตรวจจับของแอป
บล็อก เช่น
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
คุณอาจต้องบันทึกข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด ซึ่งทำได้
โดยใช้พร็อพเพอร์ตี้ information
:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
ข้อยกเว้นเหล่านี้จะปรากฏเป็นปัญหาที่ไม่ร้ายแรงในคอนโซล Firebase ข้อมูลสรุปปัญหาประกอบด้วยข้อมูลสถานะทั้งหมดที่คุณได้รับจากข้อขัดข้องตามปกติ รวมถึงรายละเอียดตามเวอร์ชันและอุปกรณ์ฮาร์ดแวร์
Crashlytics ประมวลผลข้อยกเว้นในเทรดเบื้องหลังโดยเฉพาะเพื่อ ลดผลกระทบด้านประสิทธิภาพที่มีต่อแอปให้เหลือน้อยที่สุด วิธีลดเครือข่ายของผู้ใช้ การเข้าชม Crashlytics จะจำกัดจำนวนรายงานที่ส่งออกจากอุปกรณ์ หากจำเป็น
เพิ่มคีย์ที่กำหนดเอง
คีย์ที่กำหนดเองจะช่วยให้คุณทราบสถานะที่เฉพาะเจาะจงของแอปก่อนที่จะเกิดข้อขัดข้อง คุณสามารถเชื่อมโยงคู่คีย์/ค่าที่กำหนดเองกับรายงานข้อขัดข้อง จากนั้นใช้ คีย์ที่กำหนดเองเพื่อค้นหาและกรองรายงานข้อขัดข้องในคอนโซล Firebase
ในแดชบอร์ด Crashlytics คุณสามารถค้นหาปัญหาที่ตรงกับคีย์ที่กำหนดเองได้
ขณะตรวจสอบปัญหาในคอนโซล คุณสามารถดู คีย์ที่กำหนดเองที่เกี่ยวข้องสำหรับแต่ละเหตุการณ์ (แท็บย่อยคีย์) และแม้แต่กรอง เหตุการณ์ตามคีย์ที่กำหนดเอง (เมนูตัวกรองที่ด้านบนของหน้า)
ใช้เมธอดอินสแตนซ์ setCustomKey
เพื่อตั้งค่าคู่คีย์/ค่า นี่คือบางส่วน
ตัวอย่าง:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
เพิ่มข้อความบันทึกที่กำหนดเอง
คุณสามารถเพิ่มบริบทเพิ่มเติมเกี่ยวกับเหตุการณ์ที่นำไปสู่การชนได้ บันทึก Crashlytics ที่กำหนดเองไปยังแอปของคุณ Crashlytics เชื่อมโยงบันทึก กับข้อมูลข้อขัดข้องของคุณ และแสดงข้อมูลใน คอนโซล Firebase, ใต้แท็บ บันทึก Crashlytics
ใช้ log
เพื่อช่วยระบุปัญหา เช่น
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
กำหนดตัวระบุผู้ใช้
ในการวินิจฉัยปัญหา ข้อมูลว่าผู้ใช้รายใดพบข้อขัดข้องหนึ่งๆ มักจะมีประโยชน์ Crashlytics มีวิธีระบุผู้ใช้โดยไม่ระบุตัวตนในรายงานข้อขัดข้อง
หากต้องการเพิ่มรหัสผู้ใช้ลงในรายงาน ให้กําหนดตัวระบุที่ไม่ซ้ำกันให้กับผู้ใช้แต่ละรายในรูปแบบหมายเลขประจําตัว โทเค็น หรือค่าที่ผ่านการแฮช โดยทําดังนี้
FirebaseCrashlytics.instance.setUserIdentifier("12345");
หากต้องการล้างตัวระบุผู้ใช้หลังจากตั้งค่าแล้ว ให้รีเซ็ตค่าเป็นสตริงว่าง การล้างตัวระบุผู้ใช้จะไม่ลบตัวระบุที่มีอยู่ ระเบียน Crashlytics รายการ หากต้องการลบระเบียนที่เชื่อมโยงกับรหัสผู้ใช้ ให้ติดต่อทีมสนับสนุนของ Firebase
รับบันทึกเบรดครัมบ์
บันทึกเบรดครัมบ์ช่วยให้คุณเข้าใจการโต้ตอบของผู้ใช้กับแอปที่ทําให้เกิดเหตุการณ์ข้อขัดข้อง เหตุการณ์ที่ไม่ใช่ข้อขัดข้องร้ายแรง หรือ ANR ได้ดียิ่งขึ้น บันทึกเหล่านี้อาจ เกิดประโยชน์เมื่อพยายามสร้างข้อผิดพลาดซ้ำและแก้ไขข้อบกพร่อง
บันทึกเบรดครัมบ์ขับเคลื่อนโดย Google Analytics ดังนั้นในการรับบันทึกเบรดครัมบ์ จำเป็นต้อง เปิดใช้ Google Analytics สำหรับโปรเจ็กต์ Firebase และ เพิ่ม Firebase SDK สำหรับ Google Analytics กับแอปของคุณ เมื่อมีคุณสมบัติตามข้อกำหนดเหล่านี้ บันทึกเบรดครัมบ์จะ รวมกับข้อมูลของเหตุการณ์ภายในแท็บบันทึกเมื่อคุณดูรายละเอียด ของปัญหา
SDK Analytics
จะบันทึกเหตุการณ์ screen_view
โดยอัตโนมัติ
ซึ่งจะทำให้บันทึกเบรดครัมบ์แสดงรายการหน้าจอที่มีการดูก่อน
เหตุการณ์ข้อขัดข้อง ไม่ร้ายแรง หรือ ANR บันทึกเบรดครัมบ์ screen_view
ประกอบด้วย
พารามิเตอร์ firebase_screen_class
บันทึกเบรดครัมบ์จะสร้างขึ้นจากเหตุการณ์ที่กําหนดเองที่คุณบันทึกด้วยตนเองภายในเซสชันของผู้ใช้ รวมถึงข้อมูลพารามิเตอร์ของเหตุการณ์ ข้อมูลนี้ช่วยแสดงชุดการดำเนินการของผู้ใช้ที่นำไปสู่ข้อขัดข้อง เหตุการณ์ที่ไม่ร้ายแรง หรือ ANR
โปรดทราบว่าคุณสามารถ ควบคุมการเก็บรวบรวมและการใช้ข้อมูลของ Google Analytics ซึ่งมีข้อมูลที่สร้างบันทึกเบรดครัมบ์
เปิดใช้การรายงานการเลือกใช้
โดยค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องโดยอัตโนมัติสำหรับ ผู้ใช้แอป เพื่อให้ผู้ใช้ควบคุมข้อมูลที่ส่งได้มากขึ้น ให้เปิดใช้ การเลือกใช้การรายงานโดยปิดการใช้งานการรายงานอัตโนมัติและส่งข้อมูลไปที่ Crashlytics เมื่อคุณเลือก "ในรหัส":
วิธีปิดการรวบรวมอัตโนมัติตามค่าเริ่มต้น
แพลตฟอร์ม Apple
เพิ่มคีย์ใหม่ลงในไฟล์
Info.plist
ดังนี้- คีย์:
FirebaseCrashlyticsCollectionEnabled
- ค่า:
false
Android
ในบล็อก
application
ของไฟล์AndroidManifest.xml
ให้เพิ่ม แท็กmeta-data
เพื่อปิดการรวบรวมอัตโนมัติ<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- คีย์:
เปิดใช้การเก็บรวบรวมสําหรับผู้ใช้บางรายโดยการเรียกใช้การลบล้างCrashlyticsการเก็บรวบรวมข้อมูลขณะรันไทม์
ค่าการลบล้างจะยังคงอยู่ตลอดการเปิดตัวแอปเพื่อให้ Crashlytics รวบรวมรายงานได้โดยอัตโนมัติ หากต้องการเลือกไม่ใช้การรายงานข้อขัดข้องอัตโนมัติ ให้ส่ง
false
เป็นค่าลบล้าง เมื่อตั้งค่าเป็นfalse
ระบบจะไม่ใช้ค่าใหม่จนกว่าแอปจะทำงานครั้งถัดไปFirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
จัดการข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้อง
ข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้องจะช่วยคุณแก้ปัญหาโดยการเปรียบเทียบสแต็กเทรซที่ลบข้อมูลระบุตัวบุคคลแล้วกับเทรซจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบว่าปัญหาของคุณเป็นส่วนหนึ่งของแนวโน้มที่ใหญ่ขึ้นหรือไม่ สําหรับปัญหาหลายอย่าง ข้อมูลวิเคราะห์ข้อขัดข้องยังมีแหล่งข้อมูลเพื่อช่วยแก้ไขข้อขัดข้องด้วย
Crash Insights ใช้ข้อมูลข้อขัดข้องที่รวบรวมไว้เพื่อระบุแนวโน้มความเสถียรที่พบบ่อย หากไม่ต้องการแชร์ข้อมูลของแอป คุณสามารถเลือกไม่ใช้ข้อมูลเชิงลึกข้อขัดข้องจากเมนูข้อมูลเชิงลึกข้อขัดข้องที่ด้านบนของรายการปัญหา Crashlytics ในคอนโซล Firebase