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