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