| เลือกแพลตฟอร์ม: | iOS+ Android Flutter Unity |
คุณสามารถคลิกเข้าไปดูปัญหาและรับรายงานเหตุการณ์โดยละเอียดในแดชบอร์ด DevOps & Engagement > Crashlytics ของ Firebase คอนโซล และปรับแต่งรายงานเหล่านั้นเพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นในแอปและสถานการณ์รอบๆ เหตุการณ์ที่รายงานไปยัง 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 ให้ติดตั้ง Listener ข้อผิดพลาดใน 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'],
);
ข้อยกเว้นเหล่านี้จะปรากฏเป็นปัญหาที่ไม่ร้ายแรงในแดชบอร์ด DevOps & Engagement > Crashlyticsของคอนโซล Firebase สรุปปัญหาจะมีข้อมูลสถานะทั้งหมดที่คุณได้รับจากข้อขัดข้องตามปกติ รวมถึงการแบ่งตามเวอร์ชันและอุปกรณ์ฮาร์ดแวร์
Crashlytics จะประมวลผลข้อยกเว้นในเธรดเบื้องหลังเฉพาะเพื่อ ลดผลกระทบต่อประสิทธิภาพการทำงานของแอป และจะจำกัดอัตราการส่งรายงานออกจากอุปกรณ์ หากจำเป็น เพื่อลดปริมาณการรับส่งข้อมูลเครือข่ายของผู้ใช้ Crashlytics
เพิ่มคีย์ที่กำหนดเอง
คีย์ที่กำหนดเองจะช่วยให้คุณทราบสถานะเฉพาะของแอปที่นำไปสู่ข้อขัดข้อง คุณสามารถเชื่อมโยงคู่คีย์-ค่าที่กำหนดเองกับรายงานข้อขัดข้อง แล้วใช้ คีย์ที่กำหนดเองเพื่อค้นหาและกรองรายงานข้อขัดข้องใน DevOps & Engagement > Crashlytics แดชบอร์ดของคอนโซล Firebase
ในแดชบอร์ด คุณสามารถค้นหาปัญหาที่ตรงกับคีย์ที่กำหนดเองได้
เมื่อตรวจสอบปัญหาที่เฉพาะเจาะจงในแดชบอร์ด คุณจะดูคีย์ที่กำหนดเองที่เชื่อมโยงกับแต่ละเหตุการณ์ได้ (แท็บย่อยคีย์) และยังกรองเหตุการณ์ตามคีย์ที่กำหนดเองได้ด้วย (เมนูตัวกรอง ที่ด้านบนของหน้า)
ใช้เมธอดอินสแตนซ์ 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 จะเชื่อมโยงบันทึก กับข้อมูลข้อขัดข้องและแสดงบันทึกในแท็บ บันทึก เมื่อคุณดู รายละเอียดของปัญหา (ดูปัญหาทั้งหมดในแดชบอร์ด DevOps & Engagement > Crashlytics ของคอนโซล Firebase)
ใช้ log เพื่อช่วยระบุปัญหา เช่น
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
ตั้งค่าตัวระบุผู้ใช้
การทราบว่าผู้ใช้รายใดพบข้อขัดข้องที่เฉพาะเจาะจงมักจะเป็นประโยชน์ในการวินิจฉัยปัญหา Crashlytics มีวิธีระบุผู้ใช้ใน รายงานข้อขัดข้องโดยไม่ระบุตัวตน
หากต้องการเพิ่ม User ID ลงในรายงาน ให้กำหนดตัวระบุที่ไม่ซ้ำให้กับผู้ใช้แต่ละรายในรูปแบบหมายเลขรหัส โทเค็น หรือค่าที่แฮช
FirebaseCrashlytics.instance.setUserIdentifier("12345");
หากต้องการล้างตัวระบุผู้ใช้หลังจากตั้งค่าแล้ว ให้รีเซ็ตค่าเป็นสตริงว่าง การล้างตัวระบุผู้ใช้จะไม่นำบันทึก Crashlytics ที่มีอยู่ออก หากต้องการลบบันทึกที่เชื่อมโยงกับ User ID, โปรดติดต่อทีมสนับสนุนของ Firebase
รับบันทึกเบรดครัมบ์
บันทึกเบรดครัมบ์จะช่วยให้คุณเข้าใจการโต้ตอบที่ผู้ใช้มีกับแอปได้ดียิ่งขึ้น ซึ่งนำไปสู่เหตุการณ์ข้อขัดข้อง เหตุการณ์ที่ไม่ร้ายแรง หรือเหตุการณ์ ANR บันทึกเหล่านี้อาจเป็นประโยชน์เมื่อพยายามจำลองและแก้ไขข้อบกพร่องของปัญหา
บันทึกเบรดครัมบ์ทำงานโดย Google Analytics ดังนั้นหากต้องการรับบันทึกเบรดครัมบ์ คุณ ต้อง เปิดใช้ Google Analytics สำหรับโปรเจ็กต์ Firebase และ เพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอป เมื่อเป็นไปตามข้อกำหนดเหล่านี้แล้ว ระบบจะรวมบันทึกเบรดครัมบ์ไว้กับข้อมูลของเหตุการณ์โดยอัตโนมัติ ภายในแท็บ บันทึก เมื่อคุณดูรายละเอียด ของปัญหา (ดูปัญหาทั้งหมดในแดชบอร์ด DevOps & Engagement > Crashlyticsของ Firebase )
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 รวบรวม รายงานสำหรับผู้ใช้รายนั้นได้โดยอัตโนมัติ
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);หากผู้ใช้เลือกไม่รับการเก็บรวบรวมข้อมูลในภายหลัง คุณสามารถส่ง
falseเป็นค่าการลบล้างได้ ซึ่งจะมีผลในครั้งถัดไปที่ผู้ใช้เปิดแอปและจะยังคงอยู่ในการเปิดใช้แอปครั้งต่อๆ ไปทั้งหมดสำหรับผู้ใช้รายนั้น
จัดการข้อมูล Crash Insights
Crash Insights ช่วยคุณแก้ไขปัญหาโดยการเปรียบเทียบสแต็กเทรซที่ไม่ระบุตัวตนกับเทรซจากแอป Firebase อื่นๆ และแจ้งให้คุณทราบว่าปัญหาของคุณเป็นส่วนหนึ่งของเทรนด์ที่ใหญ่ขึ้นหรือไม่ สำหรับปัญหาหลายอย่าง Crash Insights ยังมีแหล่งข้อมูลที่จะช่วยคุณแก้ไขข้อบกพร่องของข้อขัดข้องด้วย
Crash Insights ใช้ข้อมูลข้อขัดข้องที่รวบรวมเพื่อระบุเทรนด์เสถียรภาพทั่วไป หากไม่ต้องการแชร์ข้อมูลของแอป คุณสามารถเลือกไม่ใช้ Crash Insights ได้จากเมนู Crash Insights ที่ด้านบนของรายการปัญหาในแดชบอร์ด DevOps & Engagement > Crashlytics ของ Firebase
ขั้นตอนถัดไป
- ส่งออกข้อมูลไปยัง BigQuery หรือ Cloud Logging เพื่อการวิเคราะห์ขั้นสูงและฟีเจอร์ต่างๆ เช่น การค้นหาข้อมูล การสร้างแดชบอร์ดที่กำหนดเอง และการตั้งค่าการแจ้งเตือนที่กำหนดเอง