في لوحة بيانات Crashlytics، يمكنك النقر على مشكلة والحصول على تقرير تفصيلي عن الحدث. يمكنك تخصيص هذه التقارير لمساعدتك في فهم ما يحدث في تطبيقك والظروف المحيطة بالأحداث التي تم الإبلاغ عنها إلى Crashlytics بشكل أفضل.
أبلِغ عن الاستثناءات غير المرصودة و الاستثناءات المرصودة إلى Crashlytics.
فعِّل أدوات في تطبيقك لتسجيل المفاتيح المخصّصة، رسائل السجلّ المخصّصة، ومعرّفات المستخدمين.
الحصول تلقائيًا على سجلّات مسار التنقّل إذا كان تطبيقك يستخدِم حزمة تطوير البرامج (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 يتضمّن طريقة لتحديد هوية المستخدمين بدون الكشف عن هويتهم في تقارير الأعطال.
لإضافة أرقام تعريف المستخدمين إلى تقاريرك، خصِّص لكل مستخدم معرّفًا فريدًا في شكل رقم تعريف أو رمز مميّز أو قيمة مجزّأة:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
إذا أردت محو معرّف مستخدم بعد ضبطه، أعِد ضبط القيمة على سلسلة فارغة. لا يؤدي محو معرّف مستخدم إلى إزالة سجلّات Crashlytics الحالية. إذا كنت بحاجة إلى حذف السجلّات المرتبطة بمعرّف مستخدم، يُرجى التواصل مع فريق دعم Firebase.
الحصول على سجلّات أشرطة التنقّل
تمنحك سجلات "المسار إلى الصفحة" فهمًا أفضل للتفاعلات التي أجراها أحد المستخدِمين مع تطبيقك قبل حدوث تعذُّر أو حدث خطأ غير قاتل أو ANR. يمكن أن تكون هذه السجلّات مفيدة عند محاولة إعادة إظهار مشكلة وتصحيح أخطاءها.
تستند سجلّات "المسار إلى الصفحة" إلى "إحصاءات Google"، لذا للحصول على سجلّات "المسار إلى الصفحة"، عليك أولاً تفعيل "إحصاءات Google" لمشروعك على Firebase وإضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase لنظام التشغيل Google Analytics إلى تطبيقك. وبعد استيفاء هذه المتطلبات، يتم تلقائيًا تضمين سجلّات "المسار إلى الصفحة" مع بيانات الحدث ضمن علامة التبويب السجلّات عند عرض تفاصيل المشكلة.
تسجِّل حزمة تطوير البرامج (SDK) لنظام التشغيل Analytics
حدث 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 data collection override أثناء التشغيل.
تظل قيمة إلغاء الإعدادات محفوظة عند كل عمليات تشغيل تطبيقك حتى تتمكّن Crashlytics من جمع التقارير تلقائيًا. لإيقاف ميزة إعداد تقارير الأعطال تلقائيًا، أدخِل
false
كقيمة إلغاء. عند ضبط القيمة علىfalse
، لن يتم تطبيق القيمة الجديدة إلا عند تشغيل التطبيق في المرة التالية.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
إدارة بيانات "إحصاءات الأعطال"
تساعدك ميزة "إحصاءات الأعطال" في حلّ المشاكل من خلال مقارنة عمليات التتبّع الخاصة بك والتي تم إخفاء هويتها بعمليات التتبّع من تطبيقات Firebase الأخرى وإعلامك إذا كانت مشكلتك جزءًا من مؤشر أكبر. بالنسبة إلى العديد من المشاكل، تقدّم ميزة "إحصاءات الأعطال" أيضًا موارد لمساعدتك في تصحيح أخطاء الأعطال.
تستخدِم ميزة "إحصاءات الأعطال" بيانات الأعطال المجمّعة لتحديد المؤشرات الشائعة للاستقرار. إذا كنت تفضّل عدم مشاركة بيانات تطبيقك، يمكنك إيقاف ميزة "إحصاءات الأعطال" من قائمة إحصاءات الأعطال في أعلى قائمة Crashlytics بالانتقال إلى وحدة تحكّم Firebase.