คู่มือนี้จะอธิบายวิธีปรับแต่งรายงานข้อขัดข้องโดยใช้ Crashlytics API ตามค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องดั้งเดิมของแพลตฟอร์มสำหรับผู้ใช้แอปของคุณทั้งหมดโดยอัตโนมัติ (คุณยังสามารถปิดการรายงานข้อขัดข้องอัตโนมัติและเปิดใช้งาน การรายงานการเลือกรับ สำหรับผู้ใช้ของคุณแทน) Crashlytics มีกลไกการบันทึก 5 กลไกให้เลือกใช้ ได้แก่ คีย์ที่กำหนดเอง บันทึกที่กำหนดเอง ตัวระบุผู้ใช้ ข้อยกเว้น ที่ตรวจพบ และ ไม่ถูกตรวจ จับ
สำหรับแอป Flutter รายงานร้ายแรงจะถูกส่งไปยัง 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 block ของแอป ตัวอย่างเช่น:
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 Logs
ใช้ log
เพื่อช่วยระบุปัญหา ตัวอย่างเช่น:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
ตั้งค่าตัวระบุผู้ใช้
ในการวินิจฉัยปัญหา การทราบว่าผู้ใช้รายใดของคุณประสบปัญหาดังกล่าวมักจะเป็นประโยชน์ Crashlytics มีวิธีระบุผู้ใช้โดยไม่ระบุตัวตนในรายงานข้อขัดข้องของคุณ
หากต้องการเพิ่ม ID ผู้ใช้ลงในรายงานของคุณ ให้กำหนดตัวระบุที่ไม่ซ้ำกันให้กับผู้ใช้แต่ละรายในรูปแบบของหมายเลข ID โทเค็น หรือค่าแฮช:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
หากคุณจำเป็นต้องล้างตัวระบุผู้ใช้หลังจากตั้งค่าแล้ว ให้รีเซ็ตค่าเป็นสตริงว่าง การล้างตัวระบุผู้ใช้จะไม่ลบบันทึก Crashlytics ที่มีอยู่ หากคุณต้องการลบบันทึกที่เกี่ยวข้องกับ ID ผู้ใช้ โปรด ติดต่อฝ่ายสนับสนุนของ Firebase
เปิดใช้งานการรายงานการเลือกรับ
ตามค่าเริ่มต้น Crashlytics จะรวบรวมรายงานข้อขัดข้องสำหรับผู้ใช้แอปทั้งหมดของคุณโดยอัตโนมัติ เพื่อให้ผู้ใช้ควบคุมข้อมูลที่ส่งได้มากขึ้น คุณสามารถเปิดใช้การรายงานแบบเลือกรับได้โดยปิดใช้การรายงานอัตโนมัติ และส่งข้อมูลไปยัง Crashlytics เมื่อคุณเลือกในโค้ดของคุณเท่านั้น:
ปิดการรวบรวมอัตโนมัติโดยกำเนิด:
แพลตฟอร์มของ Apple
เพิ่มคีย์ใหม่ให้กับไฟล์
Info.plist
ของคุณ:- คีย์:
FirebaseCrashlyticsCollectionEnabled
- ค่า:
false
หุ่นยนต์
ในบล็อก
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
Crash Insights ช่วยคุณแก้ไขปัญหาโดยการเปรียบเทียบสแต็กเทรซที่ไม่ระบุตัวตนกับการติดตามจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบว่าปัญหาของคุณเป็นส่วนหนึ่งของเทรนด์ที่ใหญ่กว่าหรือไม่ สำหรับปัญหาต่างๆ มากมาย Crash Insights ยังมีทรัพยากรเพื่อช่วยคุณแก้ไขจุดบกพร่องอีกด้วย
Crash Insights ใช้ข้อมูลข้อขัดข้องที่รวบรวมไว้เพื่อระบุแนวโน้มความเสถียรทั่วไป หากคุณไม่ต้องการแชร์ข้อมูลแอป คุณสามารถเลือกไม่รับ Crash Insights ได้จากเมนู Crash Insights ที่ด้านบนของรายการปัญหา Crashlytics ใน คอนโซล Firebase