Catch up on highlights from Firebase at Google I/O 2023. Learn more

تخصيص تقارير أعطال Firebase Crashlytics

يصف هذا الدليل كيفية تخصيص تقارير الأعطال باستخدام Firebase Crashlytics SDK. بشكل افتراضي ، تجمع Crashlytics تقارير الأعطال تلقائيًا لجميع مستخدمي تطبيقك (يمكنك إيقاف تشغيل إعداد تقارير الأعطال التلقائية وتمكين إعداد التقارير للمستخدمين بدلاً من ذلك). يوفر Crashlytics أربع آليات تسجيل خارج الصندوق: المفاتيح المخصصة والسجلات المخصصة ومعرفات المستخدم والاستثناءات التي تم التقاطها .

أضف مفاتيح مخصصة

تساعدك المفاتيح المخصصة في الحصول على الحالة المحددة لتطبيقك مما يؤدي إلى حدوث عطل. يمكنك ربط أزواج المفاتيح / القيم العشوائية بتقارير الأعطال ، ثم استخدام المفاتيح المخصصة للبحث عن تقارير الأعطال وتصفيتها في وحدة تحكم Firebase.

  • في لوحة معلومات Crashlytics ، يمكنك البحث عن المشكلات التي تطابق مفتاحًا مخصصًا.

  • عندما تقوم بمراجعة مشكلة معينة في وحدة التحكم ، يمكنك عرض المفاتيح المخصصة المرتبطة لكل حدث (علامة التبويب الفرعية Keys ) وحتى تصفية الأحداث حسب المفاتيح المخصصة (قائمة التصفية في الجزء العلوي من الصفحة).

استخدم طريقة المثيل 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 .

اقرأ التعليقات في ملف الرأس للحصول على إرشادات حول استخدام واجهات برمجة تطبيقات 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 عندما تختار ذلك في التعليمات البرمجية الخاصة بك:

  1. في كتلة application لملف AndroidManifest.xml ، أضف علامة meta-data لإيقاف التجميع التلقائي:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. قم بتمكين التجميع لمستخدمين محددين عن طريق استدعاء تجاوز جمع بيانات 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 .