ในแดชบอร์ด 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 มีวิธีระบุผู้ใช้ในรายงานข้อขัดข้องแบบไม่ระบุตัวตน
หากต้องการเพิ่ม User-ID ลงในรายงาน ให้กำหนดตัวระบุที่ไม่ซ้ำกันให้กับผู้ใช้แต่ละรายในรูปแบบหมายเลขรหัส โทเค็น หรือค่าที่แฮช ดังนี้
FirebaseCrashlytics.instance.setUserIdentifier("12345");
หากต้องการล้างตัวระบุผู้ใช้หลังจากที่ตั้งค่าแล้ว ให้รีเซ็ตค่าเป็นสตริงว่าง การล้างตัวระบุผู้ใช้จะไม่นำระเบียน Crashlytics ที่มีอยู่ออก หากต้องการลบบันทึกที่เชื่อมโยงกับรหัสผู้ใช้ โปรดติดต่อทีมสนับสนุน Firebase
รับบันทึกเบรดครัมบ์
บันทึกเบรดครัมบ์ช่วยให้คุณเข้าใจการโต้ตอบของผู้ใช้กับแอปได้ดียิ่งขึ้น ซึ่งนำไปสู่เหตุการณ์ข้อขัดข้อง เหตุการณ์ไม่ร้ายแรง หรือ ANR บันทึกเหล่านี้จะมีประโยชน์เมื่อพยายามจำลองปัญหาและแก้ไขข้อบกพร่อง
บันทึกเบรดครัมบ์ขับเคลื่อนโดย Google Analytics ดังนั้นหากต้องการรับบันทึกเบรดครัมบ์ คุณต้องเปิดใช้ Google Analytics สำหรับโปรเจ็กต์ Firebase และเพิ่ม SDK ของ Firebase สำหรับ Google Analytics ลงในแอป เมื่อเป็นไปตามข้อกำหนดเหล่านี้แล้ว บันทึกเบรดครัมบ์จะรวมอยู่ในข้อมูลของเหตุการณ์ภายในแท็บบันทึกโดยอัตโนมัติเมื่อคุณดูรายละเอียดของปัญหา
Analytics SDK จะบันทึกเหตุการณ์ 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);
จัดการข้อมูลข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้อง
Crash Insights ช่วยคุณแก้ไขปัญหาโดยการเปรียบเทียบการติดตามสแต็กที่ไม่ระบุตัวตนกับการติดตามจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบหากปัญหาของคุณเป็นส่วนหนึ่งของเทรนด์ที่ใหญ่กว่า Crash Insights ยังมีแหล่งข้อมูลมากมาย เพื่อช่วยคุณแก้ไขข้อบกพร่องของข้อขัดข้อง
ข้อมูลเชิงลึกเกี่ยวกับข้อขัดข้องใช้ข้อมูลข้อขัดข้องโดยรวมเพื่อระบุแนวโน้มความเสถียรทั่วไป หากไม่ต้องการแชร์ข้อมูลของแอป คุณเลือกไม่ใช้ Crash Insights ได้จากเมนู Crash Insights ที่ด้านบนของรายการปัญหา Crashlytics ในคอนโซล Firebase