يصف هذا الدليل كيفية تخصيص تقارير الأعطال باستخدام Firebase Crashlytics SDK. افتراضيًا، يقوم Crashlytics تلقائيًا بجمع تقارير الأعطال لجميع مستخدمي تطبيقك (يمكنك إيقاف تشغيل تقارير الأعطال التلقائية وتمكين تقارير الاشتراك للمستخدمين بدلاً من ذلك). يوفر Crashlytics أربع آليات تسجيل مبتكرة: المفاتيح المخصصة ، والسجلات المخصصة ، ومعرفات المستخدم ، والاستثناءات التي تم اكتشافها .
إضافة مفاتيح مخصصة
تساعدك المفاتيح المخصصة في الحصول على الحالة المحددة لتطبيقك والتي تؤدي إلى حدوث عطل. يمكنك ربط أزواج مفاتيح/قيم عشوائية بتقارير الأعطال، ثم استخدام المفاتيح المخصصة للبحث في تقارير الأعطال وتصفيتها في وحدة تحكم Firebase.
في لوحة معلومات Crashlytics ، يمكنك البحث عن المشكلات التي تطابق مفتاحًا مخصصًا.
عندما تقوم بمراجعة مشكلة معينة في وحدة التحكم، يمكنك عرض المفاتيح المخصصة المرتبطة بكل حدث (علامة التبويب الفرعية المفاتيح) وحتى تصفية الأحداث حسب المفاتيح المخصصة (قائمة التصفية في أعلى الصفحة).
استخدم طريقة مثيل setCustomKey
لتعيين أزواج المفتاح/القيمة. لاحظ أن setCustomKey
محمّل بشكل زائد لمعلمة value
لقبول أي وسيطة بدائية أو String
. وهنا بعض الأمثلة:
Kotlin+KTX
val crashlytics = Firebase.crashlytics crashlytics.setCustomKeys { key("my_string_key", "foo") // String value key("my_bool_key", true) // boolean value key("my_double_key", 1.0) // double value key("my_float_key", 1.0f) // float value key("my_int_key", 1) // int value }
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.setCustomKey("my_string_key", "foo" /* string value */); crashlytics.setCustomKey("my_bool_key", true /* boolean value */); crashlytics.setCustomKey("my_double_key", 1.0 /* double value */); crashlytics.setCustomKey("my_float_key", 1.0f /* float value */); crashlytics.setCustomKey("my_int_key", 1 /* int value */);
يمكنك أيضًا تعديل قيمة مفتاح موجود عن طريق استدعاء المفتاح وتعيينه على قيمة مختلفة. على سبيل المثال:
Kotlin+KTX
val crashlytics = Firebase.crashlytics crashlytics.setCustomKeys { key("current_level", 3) key("last_UI_action", "logged_in") }
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.setCustomKey("current_level", 3); crashlytics.setCustomKey("last_UI_action", "logged_in");
قم بإضافة أزواج المفاتيح/القيم بشكل مجمّع عن طريق تمرير مثيل CustomKeysAndValues
إلى أسلوب مثيل setCustomKeys
:
Kotlin+KTX
بالنسبة إلى Kotlin، تعد الوظيفة الحالية أبسط من استخدام منشئ CustomKeysAndValues
.
crashlytics.setCustomKeys { key("str_key", "hello") key("bool_key", true) key("int_key", 1) key("long_key", 1L) key("float_key", 1.0f) key("double_key", 1.0) }
Java
CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder() .putString("string key", "string value") .putString("string key 2", "string value 2") .putBoolean("boolean key", True) .putBoolean("boolean key 2", False) .putFloat("float key", 1.01) .putFloat("float key 2", 2.02) .build(); FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);
إضافة رسائل السجل المخصصة
لمنح نفسك المزيد من السياق للأحداث التي سبقت حدوث العطل، يمكنك إضافة سجلات Crashlytics مخصصة إلى تطبيقك. يقوم Crashlytics بربط السجلات ببيانات الأعطال الخاصة بك ويعرضها في صفحة Crashlytics بوحدة تحكم Firebase ، ضمن علامة التبويب "السجلات" .
استخدم log
للمساعدة في تحديد المشكلات. على سبيل المثال:
Kotlin+KTX
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
تعيين معرفات المستخدم
لتشخيص مشكلة ما، من المفيد غالبًا معرفة المستخدمين الذين تعرضوا لعطل معين. يتضمن Crashlytics طريقة للتعرف على المستخدمين بشكل مجهول في تقارير الأعطال الخاصة بك.
لإضافة معرفات مستخدمين إلى تقاريرك، قم بتعيين معرف فريد لكل مستخدم في شكل رقم معرف أو رمز مميز أو قيمة مجزأة:
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
إذا احتجت في أي وقت إلى مسح معرف المستخدم بعد تعيينه، فأعد تعيين القيمة إلى سلسلة فارغة. لا يؤدي مسح معرف المستخدم إلى إزالة سجلات Crashlytics الموجودة. إذا كنت بحاجة إلى حذف السجلات المرتبطة بمعرف المستخدم، فاتصل بدعم Firebase .
(Android NDK فقط) أضف بيانات التعريف إلى تقارير أعطال NDK
يمكنك اختياريًا تضمين رأس crashlytics.h
في كود C++ الخاص بك لإضافة بيانات التعريف إلى تقارير أعطال NDK، مثل المفاتيح المخصصة والسجلات المخصصة ومعرفات المستخدم . تم وصف كل هذه الخيارات في هذه الصفحة أعلاه.
يتوفر crashlytics.h
كمكتبة C++ للرأس فقط في Firebase Android SDK GitHub Repository .
اقرأ التعليقات الموجودة في ملف الرأس للحصول على إرشادات حول استخدام واجهات برمجة تطبيقات NDK C++.
قم بتضمين تقارير GWP-ASan لتصحيح مشكلات تلف الذاكرة
يمكن أن تساعدك Crashlytics في تصحيح الأعطال الناجمة عن أخطاء الذاكرة الأصلية من خلال جمع تقارير GWP-ASan. يمكن أن ترتبط هذه الأخطاء المتعلقة بالذاكرة بتلف الذاكرة داخل تطبيقك، وهو السبب الرئيسي للثغرات الأمنية في التطبيق.
يمكنك عرض هذه البيانات في علامة التبويب الجديدة "تتبعات مكدس الذاكرة" عند النقر فوق تفاصيل المشكلة في لوحة معلومات Crashlytics .
يمكنك أيضًا استخدام الإشارة والتصفية الجديدة "تقرير GWP-ASan" لعرض جميع المشكلات المتعلقة بهذه البيانات بسرعة.
يمكنك الحصول على تقارير ذاكرة GWP-ASan إذا قمت بتمكين GWP-ASan بشكل صريح في تطبيقك واستخدمت Crashlytics SDK لـ NDK v18.3.6+ (Firebase BoM v31.3.0+). يمكنك اختبار إعداد GWP-ASan الخاص بك باستخدام مثال التعليمات البرمجية الأصلية في وثائق Android .
الإبلاغ عن الاستثناءات غير المميتة
بالإضافة إلى الإبلاغ تلقائيًا عن أعطال تطبيقك، يتيح لك Crashlytics تسجيل الاستثناءات غير القاتلة وإرسالها إليك في المرة التالية التي يتم فيها تشغيل تطبيقك.
استخدم التابع recordException
لتسجيل الاستثناءات غير القاتلة في كتل catch
الخاصة بتطبيقك. على سبيل المثال:
Kotlin+KTX
try { methodThatThrows() } catch (e: Exception) { Firebase.crashlytics.recordException(e) // handle your exception here }
Java
try { methodThatThrows(); } catch (Exception e) { FirebaseCrashlytics.getInstance().recordException(e); // handle your exception here }
تظهر جميع الاستثناءات المسجلة كمشكلات غير مميتة في وحدة تحكم Firebase. يحتوي ملخص المشكلة على جميع معلومات الحالة التي تحصل عليها عادةً من الأعطال، بالإضافة إلى التفاصيل حسب إصدار Android والأجهزة.
تقوم Crashlytics بمعالجة الاستثناءات في سلسلة محادثات خلفية مخصصة لتقليل تأثير الأداء على تطبيقك. لتقليل حركة مرور الشبكة للمستخدمين، قامت مجموعات Crashlytics بتسجيل الاستثناءات معًا وإرسالها في المرة التالية التي يتم فيها تشغيل التطبيق.
تمكين الاشتراك في التقارير
افتراضيًا، يقوم Crashlytics تلقائيًا بجمع تقارير الأعطال لجميع مستخدمي تطبيقك. لمنح المستخدمين المزيد من التحكم في البيانات التي يرسلونها، يمكنك تمكين إعداد التقارير عن طريق تعطيل التقارير التلقائية وإرسال البيانات إلى Crashlytics فقط عندما تختار ذلك في التعليمات البرمجية الخاصة بك:
في كتلة
application
الخاصة بملفAndroidManifest.xml
، أضف علامةmeta-data
لإيقاف التجميع التلقائي:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
قم بتمكين التجميع لمستخدمين محددين عن طريق استدعاء تجاوز مجموعة بيانات Crashlytics في وقت التشغيل. تستمر قيمة التجاوز عبر عمليات تشغيل تطبيقك حتى يتمكن Crashlytics من جمع التقارير تلقائيًا. لإلغاء الاشتراك في إعداد تقارير الأعطال التلقائية، قم بتمرير
false
كقيمة التجاوز. عند التعيين علىfalse
، لا يتم تطبيق القيمة الجديدة حتى التشغيل التالي للتطبيق.Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
إدارة بيانات Crash Insights
تساعدك Crash Insights على حل المشكلات عن طريق مقارنة تتبعات المكدس المجهولة الهوية بالتتبعات من تطبيقات Firebase الأخرى وإعلامك بما إذا كانت مشكلتك جزءًا من اتجاه أكبر. بالنسبة للعديد من المشكلات، توفر Crash Insights أيضًا موارد لمساعدتك في تصحيح أخطاء العطل.
يستخدم Crash Insights بيانات الأعطال المجمعة لتحديد اتجاهات الاستقرار الشائعة. إذا كنت تفضل عدم مشاركة بيانات تطبيقك، فيمكنك إلغاء الاشتراك في Crash Insights من قائمة Crash Insights الموجودة أعلى قائمة مشكلات Crashlytics في وحدة تحكم Firebase .