تصدير بيانات Firebase Crashlytics إلى BigQuery

يمكنك تصدير بيانات Firebase Crashlytics إلى BigQuery لإجراء مزيد من التحليل. تتيح لك BigQuery تحليل البيانات باستخدام BigQuery SQL وتصديرها إلى مقدّم خدمة آخر لخدمات السحابة الإلكترونية واستخدامها في التمثيل البصري ولوحات البيانات المخصّصة باستخدام "مركز البيانات من Google".

تفعيل التصدير إلى BigQuery

  1. في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".

  2. في بطاقة BigQuery، انقر على ربط.

  3. اتّبِع التعليمات الظاهرة على الشاشة لتفعيل التصدير إلى BigQuery.

    إذا أردت الوصول إلى بيانات "Crashlytics" في BigQuery بشكلٍ شبه مباشر، ننصحك بالترقية إلى بث التصدير.

ماذا يحدث عند تفعيل ميزة التصدير؟

  • يمكنك اختيار موقع مجموعة البيانات. بعد إنشاء مجموعة البيانات، لا يمكن تغيير الموقع الجغرافي، ولكن يمكنك نسخ مجموعة البيانات إلى موقع جغرافي مختلف أو نقل مجموعة البيانات يدويًا (إعادة إنشائها) في موقع جغرافي مختلف. للاطّلاع على مزيد من المعلومات، يُرجى الاطّلاع على مقالة تغيير الموقع الجغرافي لعمليات التصدير الحالية.

    لا ينطبق هذا الموقع الجغرافي إلا على البيانات التي يتم تصديرها إلى BigQuery، ولا يؤثّر في الموقع الجغرافي للبيانات المخزّنة لاستخدامها في لوحة بيانات Crashlytics في وحدة تحكّم Firebase أو في Android Studio.

  • يتم تلقائيًا ربط جميع التطبيقات في مشروعك بمنصّة BigQuery، وبالنسبة إلى أي تطبيقات تتم إضافتها إلى المشروع لاحقًا، يتم أيضًا ربطها تلقائيًا بمنصّة BigQuery. يمكنك إدارة اختيار التطبيقات التي ترسل البيانات.

  • يُعدّ Firebase عمليات مزامنة يومية لبياناتك مع BigQuery.

    • بعد ربط مشروعك، عليك عادةً الانتظار إلى أن تتم عملية المزامنة في اليوم التالي لتصدير مجموعة البيانات الأولى إلى BigQuery.

    • تحدث المزامنة اليومية مرة واحدة في اليوم، بغض النظر عن أي عملية تصدير مجدوَلة قد تكون قد أعددتها في BigQuery. يُرجى العِلم أنّ توقيت مهمة المزامنة ومدتها يمكن أن يتغيّرا، لذا لا ننصح بجدولة عمليات أو مهام ما بعد التصدير استنادًا إلى توقيت محدّد للتصدير.

  • تصدِّر Firebase نسخة من بياناتك الحالية إلى BigQuery. قد تستغرق عملية نشر البيانات الأولية للتصدير مدّة تصل إلى 48 ساعة.

    يُرجى العلم أنّه في حال فعّلت تصدير بيانات Crashlytics قبل منتصف تشرين الأول (أكتوبر) 2024، يمكنك أيضًا إضافة بيانات سابقة لمدة 30 يومًا قبل يوم تفعيل التصدير.

  • إذا فعّلت تصدير أحداث البث في Crashlytics إلى BigQuery، سيكون لدى جميع التطبيقات المرتبطة أيضًا جدولاً في الوقت الفعلي يحتوي على data تتغيّر باستمرار.

لإيقاف عملية التصدير إلى BigQuery، أزِل ربط مشروعك في وحدة تحكّم Firebase.

ما هي البيانات التي يتم تصديرها إلى BigQuery؟

يتم تصدير بيانات Firebase Crashlytics إلى مجموعة بيانات BigQuery باسم firebase_crashlytics. سيتم تلقائيًا إنشاء جداول فردية داخل مجموعة بيانات Crashlytics لكل تطبيق في مشروعك. تحدِّد Firebase أسماء الجداول استنادًا إلى معرّف التطبيق، مع تحويل النقاط إلى شرطات سفلية، وإضافة اسم المنصة في نهاية الجدول.

على سبيل المثال، ستكون بيانات تطبيق Android الذي يحمل اسم الحزمة com.google.test في جدول باسم com_google_test_ANDROID. يتم تعديل جدول الحِزم هذا مرّة واحدة في اليوم. في حال تفعيل تصدير بيانات Crashlytics إلى BigQuery، سيتم أيضًا بث بيانات Crashlytics في الوقت الفعلي إلى جدول باسم com_google_test_ANDROID_REALTIME.

يمثّل كل صف في الجدول حدثًا وقع في التطبيق، بما في ذلك تعطُّل التطبيق والأخطاء غير الفادحة وأخطاء ANR.

تصدير Crashlytics إلى BigQuery

يمكنك بث بيانات Crashlytics في الوقت الفعلي باستخدام بث BigQuery. يمكنك استخدامها لأي غرض يتطلّب بيانات مباشرة، مثل عرض المعلومات في لوحة بيانات مباشرة أو مشاهدة عملية طرح مباشرة أو مراقبة مشاكل التطبيق التي تؤدي إلى تشغيل التنبيهات ومسارات العمل المخصّصة.

عند تفعيل ميزة Crashlytics تصدير بيانات البث إلى BigQuery، سيكون لديك أيضًا جدول في الوقت الفعلي بالإضافة إلى جدول الدفعات. في ما يلي الاختلافات التي يجب أن تكون على دراية بها بين الجداول:

جدول الأركان الأساسية جدول "الوقت الفعلي"
  • يتم تصدير البيانات مرة واحدة يوميًا.
  • يتم تخزين الأحداث بشكل دائم قبل الكتابة المجمّعة إلى BigQuery.
  • يمكن إضافة بيانات سابقة تصل إلى 30 يومًا قبل تاريخ الربط*.
  • يتم تصدير البيانات في الوقت الفعلي.
  • لا تتوفّر ميزة إضافة بيانات سابقة.

يُعدّ جدول الدُفعات مثاليًا للتحليل على المدى الطويل وتحديد المؤشرات بمرور الوقت، لأنّنا نخزِّن الأحداث بشكل دائم قبل كتابتها، ويمكن إضافة بيانات سابقة إلى الجدول لمدة تصل إلى 30 يومًا*. عندما نكتب البيانات في جدول الوقت الفعلي، تتم كتابة تلك البيانات على الفور في BigQuery، ما يجعلها مثالية للقوائم المتعلّقة بالوقت الحالي ولوحات البيانات والتنبيهات المخصّصة. يمكن دمج هذين الجدولين مع استعلام تجميع للاستفادة من مزايا كليهما.

بشكلٍ تلقائي، يكون وقت انتهاء صلاحية القسم في جدول الوقت الفعلي هو 30 يومًا. للاطّلاع على كيفية تعديل هذا الإعداد، يُرجى الاطّلاع على ضبط تاريخ انتهاء صلاحية القسم في مستندات BigQuery.

* يمكنك الاطّلاع على تفاصيل حول إتاحة إضافة البيانات السابقة في الترقية إلى البنية الأساسية الجديدة للتصدير.

تفعيل تصدير أحداث البث المباشر على Crashlytics إلى BigQuery

  1. في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".

  2. في بطاقة BigQuery، انقر على إدارة.

  3. ضَع علامة في مربّع الاختيار تضمين البث.

يؤدي هذا الإجراء إلى تفعيل ميزة البث لجميع تطبيقاتك المرتبطة.

ما هي الإجراءات التي يمكنك اتّخاذها بشأن البيانات التي تم تصديرها؟

تحتوي عمليات التصدير إلى BigQuery على بيانات الأعطال الأوّلية، بما في ذلك نوع الجهاز ونظام التشغيل والاستثناءات (تطبيقات Android) أو الأخطاء (تطبيقات Apple) وملفّات log Crashlytics، بالإضافة إلى بيانات أخرى.

راجِع في وقت لاحق من هذه الصفحة البيانات التي يتم تصدير Crashlytics منها وجدول مخطّطها.

استخدام نموذج "مركز البيانات"

لتفعيل البيانات في الوقت الفعلي في نموذج "مركز البيانات"، اتّبِع تعليمات عرض بيانات Crashlytics التي تم تصديرها باستخدام "مركز البيانات".

إنشاء طرق عرض

يمكنك تحويل طلبات البحث إلى عروض باستخدام واجهة مستخدم BigQuery. للحصول على تعليمات مفصّلة، يُرجى الاطّلاع على إنشاء طرق عرض في مستندات BigQuery.

تنفيذ طلبات البحث

توضِّح الأمثلة التالية طلبات البحث التي يمكنك إجراؤها على بيانات Crashlytics لإنشاء تقارير تُجمِّع بيانات أحداث الأعطال في ملف تعريف شخصي ملخّص يسهل فهمه. وبما أنّ هذه الأنواع من التقارير غير متاحة في لوحة بيانات Crashlytics في وحدة تحكّم Firebase، يمكن أن تكمل تحليلك وفهمك لبيانات الأعطال.

المثال 1: الأعطال حسب اليوم

بعد العمل على إصلاح أكبر عدد ممكن من الأخطاء، تعتقد أنّ فريقك أصبح جاهزًا أخيرًا لإطلاق تطبيقك الجديد لمشاركة الصور. قبل الإطلاق، تريد التحقّق من عدد الأعطال يوميًا خلال الشهر الماضي للتأكّد من أنّ عملية إصلاح الأخطاء قد جعلت التطبيق أكثر ثباتًا بمرور الوقت.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

المثال 2: العثور على الأعطال الأكثر انتشارًا

لتحديد أولويات خطط الإصدار بشكلٍ صحيح، عليك العثور على أهم 10 أخطاء تتعلّق بالانهيار في تطبيقك. يمكنك إنشاء طلب بحث يقدّم نقاط البيانات ذات الصلة.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
  DISTINCT issue_id,
  COUNT(DISTINCT event_id) AS number_of_crashes,
  COUNT(DISTINCT installation_uuid) AS number_of_impacted_user,
  blame_frame.file,
  blame_frame.line
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  issue_id,
  blame_frame.file,
  blame_frame.line
ORDER BY
  number_of_crashes DESC
LIMIT 10;

المثال 3: أهم 10 أجهزة تواجه الأعطال

الخريف هو موسم شراء الهواتف الجديدة. تعلم شركتك أنّ هذا يعني أيضًا أنّه موسم جديد لظهور المشاكل المتعلّقة بالأجهزة، خاصةً على أجهزة Android. للاستعداد لمعالجة المشاكل المحتملة في التوافق، يمكنك إعداد طلب بحث يحدِّد الأجهزة العشرة التي سجّلت أكبر عدد من الأعطال خلال الأسبوع الماضي (168 ساعة).

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  device.model
ORDER BY
  number_of_crashes DESC
LIMIT 10;

المثال 4: الفلترة حسب مفتاح مخصّص

أنت مطوّر ألعاب وتريد معرفة مستوى لعبتك الذي يشهد أكبر عدد من الأعطال.

للمساعدة في تتبُّع هذا المقياس، يمكنك ضبط مفتاح Crashlytics مخصّص يُسمى current_level، وتعديله في كل مرة يصل فيها المستخدم إلى مستوى جديد.

Swift

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

جافا

Crashlytics.setInt("current_level", 3);

باستخدام هذا المفتاح في عملية التصدير إلى BigQuery، يمكنك بعد ذلك كتابة طلب بحث لتسجيل توزيع قيم current_level المرتبطة بكل حدث تعطُّل.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

المثال 5: استخراج رقم تعريف المستخدِم

إذا كان لديك تطبيق Android قيد الاستخدام التجريبي يحبّ معظم المستخدمين تطبيقك، ولكن واجه ثلاثة مستخدمين عددًا غير معتاد من الأعطال. للتعرّف على سبب المشكلة، يمكنك كتابة طلب بحث يسحب جميع أحداث الأعطال لهؤلاء المستخدمين، باستخدام أرقام تعريف المستخدمين.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT *
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
  user.id
 

المثال 6: العثور على جميع المستخدمين الذين يواجهون مشكلة تعطُّل معيّنة

أصدر فريقك عن طريق الخطأ خطأً جسيمًا لمجموعة من مختبِري الإصدار التجريبي. تمكّن فريقك من استخدام طلب البحث من المثال التالي: "العثور على الأعطال الأكثر انتشارًا" أعلاه لتحديد رقم تعريف مشكلة الأعطال المحدّدة. يريد فريقك الآن تنفيذ query لإخراج قائمة مستخدمي التطبيق المتأثّرين بهذا العُطل.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT user.id as user_id
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  issue_id = "ISSUE_ID"
  AND application.display_version = "APP_VERSION"
  AND user.id != ""
ORDER BY
  user.id;

المثال 7: عدد المستخدمين المتأثّرين بمشكلة عطل، مقسّمة حسب البلد

رصد فريقك خطأً جسيمًا أثناء طرح إصدار جديد. لقد تمكّنت من استخدام طلب البحث من المثال التالي في "العثور على الأعطال الأكثر انتشارًا" أعلاه لتحديد رقم تعريف مشكلة الأعطال المحدّدة. يريد فريقك الآن معرفة ما إذا كان هذا العُطل قد انتشر إلى مستخدمين في بلدان مختلفة حول العالم.

لكتابة هذا الطلب، على فريقك تنفيذ ما يلي:

  1. فعِّل تصدير بيانات Google Analytics إلى BigQuery. اطّلِع على تصدير بيانات المشروع إلى BigQuery.

  2. عدِّل تطبيقك لإرسال معرّف مستخدم إلى كلّ من حزمة تطوير البرامج (SDK) لنظام التشغيل Google Analytics وحزمة تطوير البرامج (SDK) لنظام التشغيل Crashlytics.

    Swift

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    

    Objective-C

    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    

    جافا

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. اكتب طلب بحث يستخدِم حقل "رقم تعريف المستخدِم" لدمج الأحداث في مجموعة بيانات Google Analytics مع الأعطال في مجموعة بيانات Crashlytics.

    في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c
    INNER JOIN  `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id
    WHERE
      c.issue_id = "ISSUE_ID"
      AND a._TABLE_SUFFIX BETWEEN '20190101'
      AND '20200101'
    GROUP BY
      c.issue_id,
      a.geo.country,
      c.user.id

المثال 8: أهم 5 مشاكل حتى الآن

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

المثال 9: أهم 5 مشاكل منذ التاريخ، بما في ذلك اليوم

يمكنك أيضًا دمج جداول الدفعات والوقت الفعلي من خلال طلب تجميع لإضافة معلومات الوقت الفعلي إلى بيانات الدفعات الموثوقة. بما أنّ event_id هو ملف شخصي أساسي، يمكنك استخدام DISTINCT event_id لإزالة تكرار أي أحداث شائعة من جدولَي المقارنة.

في ما يلي مثال على طلب بحث لتطبيق Android. بالنسبة إلى تطبيق iOS، استخدِم معرّف الحِزمة وIOS (بدلاً من اسم الحزمة وANDROID).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`)
WHERE
  event_timestamp >= "YYYY_MM_DD"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

فهم مخطّط Crashlytics في BigQuery

عند إعداد عملية تصدير بيانات Crashlytics إلى BigQuery، تصدّر Firebase الأحداث الأخيرة (الأعطال والأخطاء غير المميتة وأخطاء ANR)، بما في ذلك الأحداث التي حدثت قبل يومَين كحدّ أقصى من عملية الربط، مع خيار إضافة البيانات السابقة لمدة تصل إلى 30 يومًا.

ومن تلك اللحظة فصاعدًا إلى أن توقف عملية التصدير، تُصدِّر Firebase Crashlytics أحداثًا بشكل يومي. قد يستغرق توفّر البيانات في BigQuery بعد كل عملية تصدير بضع دقائق.

مجموعات البيانات

تنشئ Crashlytics مجموعة بيانات جديدة في BigQuery لـ Crashlytics البيانات. وتغطي مجموعة البيانات مشروعك بالكامل، حتى إذا كان يتضمّن تطبيقات متعددة.

الجداول

Crashlytics تنشئ جدولاً في مجموعة البيانات لكل تطبيق في مشروعك، ما لم تكن قد أوقفت تصدير بيانات هذا التطبيق. تسمي Firebase الجداول استنادًا إلى معرّف التطبيق، مع تحويل النقاط إلى شرطات سفلية، وإضافة اسم النظام الأساسي في النهاية.

على سبيل المثال، ستكون بيانات تطبيق Android الذي يحمل اسم الحزمة com.google.test في جدول باسم com_google_test_ANDROID، وستكون بيانات الوقت الفعلي (إذا كانت مفعّلة) في جدول باسم com_google_test_ANDROID_REALTIME.

تحتوي الجداول على مجموعة عادية من بيانات Crashlytics بالإضافة إلى أي مفاتيح Crashlytics مخصّصة حدّدتها في تطبيقك.

الصفوف

يمثّل كل صف في الجدول خطأ واجهه التطبيق.

الأعمدة

تكون الأعمدة في الجدول متطابقة للأعطال والأخطاء غير الفادحة وأخطاء ANR. إذا كان خيار تصدير بيانات البث إلى BigQuery مفعّلاً، سيحتوي جدول الوقت الفعلي على الأعمدة نفسها التي يحتوي عليها جدول الدُفعات.Crashlytics يُرجى العِلم أنّه قد يكون لديك أعمدة في الصفوف تمثّل أحداثًا لا تتضمّن عمليات تتبُّع تسلسل استدعاء الدوال البرمجية.

يتم إدراج الأعمدة ضمن عملية التصدير في هذا الجدول:

اسم الحقل نوع البيانات الوصف
platform سلسلة منصّة التطبيق المسجَّلة في مشروع Firebase (القيم الصالحة: IOS أو ANDROID)
bundle_identifier سلسلة المعرّف الفريد للتطبيق المسجَّل في مشروع Firebase (على سبيل المثال، com.google.gmail)
بالنسبة إلى تطبيقات منصة Apple، يشير ذلك إلى معرّف حِزمة التطبيق.
بالنسبة إلى تطبيقات Android، يشير ذلك إلى اسم حِزمة التطبيق.
event_id سلسلة المعرّف الفريد للحدث
is_fatal قيمة منطقية ما إذا كان التطبيق قد تعطّل
error_type سلسلة نوع الخطأ في الحدث (على سبيل المثال، FATAL NON_FATAL وANR وما إلى ذلك)
issue_id سلسلة المشكلة المرتبطة بالحدث
variant_id سلسلة نوع المشكلة المرتبط بهذا الحدث
يُرجى العِلم أنّ بعض الأحداث لا تتضمّن نوع مشكلة مرتبطًا بها.
event_timestamp الطابع الزمني وقت وقوع الحدث
device سجلّ الجهاز الذي وقع عليه الحدث
device.manufacturer سلسلة الشركة المصنّعة للجهاز
device.model سلسلة طراز الجهاز
device.architecture سلسلة على سبيل المثال، X86_32 أو X86_64 أو ARMV7 ARM64 أو ARMV7S أو ARMV7K
memory سجلّ حالة ذاكرة الجهاز
memory.used INT64 عدد وحدات البايت المستخدَمة من الذاكرة
memory.free INT64 عدد البايتات المتبقية في الذاكرة
storage سجلّ مساحة التخزين الدائمة للجهاز
storage.used INT64 عدد وحدات البايت لمساحة التخزين المستخدَمة
storage.free INT64 عدد البايتات المتبقية من مساحة التخزين
operating_system سجلّ تفاصيل نظام التشغيل على الجهاز
operating_system.display_version سلسلة إصدار نظام التشغيل على الجهاز
operating_system.name سلسلة اسم نظام التشغيل على الجهاز
operating_system.modification_state سلسلة ما إذا تم تعديل الجهاز (على سبيل المثال، التطبيق الذي تمت إزالة جميع القيود عنه هو MODIFIED والتطبيق المزوَّد بإذن الوصول إلى الجذر هو UNMODIFIED)
operating_system.type سلسلة (تطبيقات Apple فقط) نوع نظام التشغيل الذي يعمل على الجهاز (على سبيل المثال، IOS وMACOS وما إلى ذلك)
operating_system.device_type سلسلة نوع الجهاز (على سبيل المثال، MOBILE أو TABLET أو TV أو غير ذلك)، ويُعرف أيضًا باسم "فئة الجهاز"
application سجلّ التطبيق الذي أنشأ الحدث
application.build_version سلسلة إصدار الإصدار من التطبيق
application.display_version سلسلة
user سجلّ (اختياري) المعلومات التي يتم جمعها عن مستخدم التطبيق
user.name سلسلة (اختياري) اسم المستخدم
user.email سلسلة (اختياري) عنوان البريد الإلكتروني للمستخدم
user.id سلسلة (اختياري) معرّف خاص بالتطبيق مرتبط بالمستخدم
custom_keys سجلّ متكرّر أزواج المفتاح/القيمة التي يحدّدها المطوّر
custom_keys.key سلسلة مفتاح يحدّده المطوّر
custom_keys.value سلسلة قيمة يحدّدها المطوّر
installation_uuid سلسلة رقم تعريف يحدّد عملية تثبيت فريدة للتطبيق والجهاز
crashlytics_sdk_versions سلسلة إصدار حزمة SDK Crashlytics الذي أدى إلى إنشاء الحدث
app_orientation سلسلة على سبيل المثال، PORTRAIT وLANDSCAPE FACE_UP وFACE_DOWN وما إلى ذلك
device_orientation سلسلة على سبيل المثال، PORTRAIT وLANDSCAPE FACE_UP وFACE_DOWN وما إلى ذلك
process_state سلسلة BACKGROUND أو FOREGROUND
logs سجلّ متكرّر رسائل السجلّ المزوّدة بطابع زمني والتي أنشأها أداة تسجيل Crashlytics، في حال تفعيلها
logs.timestamp الطابع الزمني وقت إنشاء السجلّ
logs.message سلسلة الرسالة المسجّلة
breadcrumbs سجلّ متكرّر Google Analytics علامات التنقل التي تتضمّن الطوابع الزمنية، في حال تفعيلها
breadcrumbs.timestamp الطابع الزمني الطابع الزمني المرتبط بمسار التنقّل
breadcrumbs.name سلسلة الاسم المرتبط بمسار التنقّل
breadcrumbs.params سجلّ متكرّر المَعلمات المرتبطة بمسار التنقّل
breadcrumbs.params.key سلسلة مفتاح مَعلمة مرتبط بمسار التنقّل
breadcrumbs.params.value سلسلة قيمة مَعلمة مرتبطة بمسار التنقّل
blame_frame سجلّ الإطار الذي تم تحديده كسبب أساسي للتعطّل أو الخطأ
blame_frame.line INT64 رقم السطر في ملف اللقطة
blame_frame.file سلسلة اسم ملف الإطار
blame_frame.symbol سلسلة رمز المادة المُرطَّبة أو رمز المادة الخام إذا كانت غير قابلة للترطيب
blame_frame.offset INT64 فهرس البايت في الصورة الثنائية التي تحتوي على الرمز
غير محدّد لاستثناءات Java
blame_frame.address INT64 العنوان في الصورة الثنائية الذي يحتوي على الرمز
غير محدّد لإطارات Java
blame_frame.library سلسلة الاسم المعروض للمكتبة التي تتضمّن الإطار
blame_frame.owner سلسلة على سبيل المثال، DEVELOPER أو VENDOR RUNTIME أو PLATFORM أو SYSTEM
blame_frame.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الأعطال أو الأخطاء
exceptions سجلّ متكرّر (نظام التشغيل Android فقط) الاستثناءات التي حدثت خلال هذا الحدث يتم عرض الثناء المُدمجة بترتيب زمني عكسي، ما يعني أنّ السجلّ الأخير هو أول استثناء تم طرحه.
exceptions.type سلسلة نوع الاستثناء (على سبيل المثال، java.lang.IllegalStateException)
exceptions.exception_message سلسلة رسالة مرتبطة بالاستثناء
exceptions.nested قيمة منطقية صحيح لجميع القيم باستثناء الاستثناء الذي تم طرحه مؤخرًا (أي السجلّ الأول)
exceptions.title سلسلة عنوان سلسلة المحادثات
exceptions.subtitle سلسلة العنوان الفرعي لسلسلة المحادثات
exceptions.blamed قيمة منطقية صحيح إذا رصد Crashlytics أنّ الاستثناء هو المسؤول عن الخطأ أو العُطل
exceptions.frames سجلّ متكرّر اللقطات المرتبطة بالإستثناء
exceptions.frames.line INT64 رقم السطر في ملف اللقطة
exceptions.frames.file سلسلة اسم ملف الإطار
exceptions.frames.symbol سلسلة رمز المادة المُرطَّبة أو رمز المادة الخام إذا كانت غير قابلة للترطيب
exceptions.frames.offset INT64 فهرس البايت في الصورة الثنائية التي تحتوي على الرمز
غير محدّد لاستثناءات Java
exceptions.frames.address INT64 العنوان في الصورة الثنائية الذي يحتوي على الرمز
غير محدّد لإطارات Java
exceptions.frames.library سلسلة الاسم المعروض للمكتبة التي تتضمّن الإطار
exceptions.frames.owner سلسلة على سبيل المثال، DEVELOPER أو VENDOR RUNTIME أو PLATFORM أو SYSTEM
exceptions.frames.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الأعطال أو الأخطاء
error سجلّ متكرّر (تطبيقات Apple فقط) الأخطاء غير المميتة
error.queue_name سلسلة قائمة الانتظار التي كان يتم تشغيل سلسلة المحادثات عليها
error.code INT64 رمز الخطأ المرتبط بخطأ NSError المُسجَّل المخصّص للتطبيق
error.title سلسلة عنوان سلسلة المحادثات
error.subtitle سلسلة العنوان الفرعي لسلسلة المحادثات
error.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الخطأ
error.frames سجلّ متكرّر إطارات تتبع تسلسل استدعاء الدوال البرمجية
error.frames.line INT64 رقم السطر في ملف اللقطة
error.frames.file سلسلة اسم ملف الإطار
error.frames.symbol سلسلة رمز المادة المُرطَّبة أو رمز المادة الخام إذا كانت غير قابلة للترطيب
error.frames.offset INT64 إزاحة البايت في الصورة الثنائية التي تحتوي على الرمز
error.frames.address INT64 العنوان في الصورة الثنائية التي تحتوي على الرمز
error.frames.library سلسلة الاسم المعروض للمكتبة التي تتضمّن الإطار
error.frames.owner سلسلة على سبيل المثال، DEVELOPER أو VENDOR RUNTIME أو PLATFORM أو SYSTEM
error.frames.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الخطأ
threads سجلّ متكرّر سلاسل المحادثات المتوفّرة في وقت الحدث
threads.crashed قيمة منطقية ما إذا تعطّلت سلسلة المحادثات
threads.thread_name سلسلة اسم سلسلة المحادثات
threads.queue_name سلسلة (تطبيقات Apple فقط) قائمة الانتظار التي كان يعمل عليها الخيط
threads.signal_name سلسلة اسم الإشارة التي أدّت إلى تعطُّل التطبيق، لا يظهر إلا في سلاسل المهام المضمّنة التي تعطّلت
threads.signal_code سلسلة رمز الإشارة التي أدّت إلى تعطُّل التطبيق، ولا يظهر إلا في سلاسل المهام المبرمَجة التي تعطّلت
threads.crash_address INT64 عنوان الإشارة التي أدّت إلى تعطُّل التطبيق، لا يظهر إلا في سلاسل المهام الأصلية التي تعطّلت
threads.code INT64 (تطبيقات Apple فقط) رمز الخطأ للسجلّ المخصّص للتطبيق NSError
threads.title سلسلة عنوان سلسلة المحادثات
threads.subtitle سلسلة العنوان الفرعي لسلسلة المحادثات
threads.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الأعطال أو الأخطاء
threads.frames سجلّ متكرّر إطارات سلسلة المحادثات
threads.frames.line INT64 رقم السطر في ملف اللقطة
threads.frames.file سلسلة اسم ملف الإطار
threads.frames.symbol سلسلة رمز المياه، أو رمز المواد الخام إذا كانت غير قابلة للترطيب
threads.frames.offset INT64 إزاحة البايت في الصورة الثنائية التي تحتوي على الرمز
threads.frames.address INT64 العنوان في الصورة الثنائية التي تحتوي على الرمز
threads.frames.library سلسلة الاسم المعروض للمكتبة التي تتضمّن الإطار
threads.frames.owner سلسلة على سبيل المثال، DEVELOPER أو VENDOR RUNTIME أو PLATFORM أو SYSTEM
threads.frames.blamed قيمة منطقية ما إذا كان Crashlytics قد رصد أنّ هذا الإطار هو سبب الخطأ
unity_metadata.unity_version سلسلة إصدار Unity المُستخدَم على هذا الجهاز
unity_metadata.debug_build قيمة منطقية إذا كان هذا إصدارًا لتصحيح الأخطاء
unity_metadata.processor_type سلسلة نوع المعالج
unity_metadata.processor_count INT64 عدد المعالجات (النواة)
unity_metadata.processor_frequency_mhz INT64 تردد المعالجات بالميغاهرتز
unity_metadata.system_memory_size_mb INT64 حجم ذاكرة النظام بالميغابايت
unity_metadata.graphics_memory_size_mb INT64 ذاكرة الرسومات بالميغابايت
unity_metadata.graphics_device_id INT64 معرّف جهاز الرسومات
unity_metadata.graphics_device_vendor_id INT64 معرّف مورّد وحدة معالجة الرسومات
unity_metadata.graphics_device_name سلسلة اسم جهاز الرسوميات
unity_metadata.graphics_device_vendor سلسلة مورّد جهاز الرسوميات
unity_metadata.graphics_device_version سلسلة إصدار جهاز الرسوميات
unity_metadata.graphics_device_type سلسلة نوع جهاز الرسوميات
unity_metadata.graphics_shader_level INT64 مستوى تأثيرات التظليل للرسومات
unity_metadata.graphics_render_target_count INT64 عدد أهداف العرض الرسومي
unity_metadata.graphics_copy_texture_support سلسلة إتاحة نسخ نسيج الرسومات على النحو المحدّد في Unity API
unity_metadata.graphics_max_texture_size INT64 الحد الأقصى للحجم المخصّص لعرض النسيج
unity_metadata.screen_size_px سلسلة حجم الشاشة بالبكسل، بتنسيق العرض × الارتفاع
unity_metadata.screen_resolution_dpi سلسلة عدد النقاط لكل بوصة في الشاشة كعدد عشري
unity_metadata.screen_refresh_rate_hz INT64 معدّل تحديث الشاشة بالهرتز

عرض بيانات Crashlytics المُصدَّرة باستخدام "مركز البيانات"

تعمل أداة مركز البيانات من Google على تحويل مجموعة بيانات Crashlytics في BigQuery إلى تقارير أسهل في قراءة ومشاركتها وقابلة للتخصيص بالكامل.

للاطّلاع على مزيد من المعلومات عن استخدام "مركز البيانات"، يمكنك الاطّلاع على دليل البدء السريع في "مركز البيانات"، وهو بعنوان مرحبًا بك في "مركز البيانات".

استخدام نموذج تقرير Crashlytics

يتضمّن Data Studio نموذج تقرير عن Crashlytics يتضمّن مجموعة شاملة من السمات والمقاييس من مخطّط Crashlytics BigQuery الذي تمّ تصديره. إذا فعّلت تصدير أحداث البث المباشر إلى BigQuery، يمكنك عرض هذه البيانات في صفحة المؤشرات في الوقت الفعلي ضمن نموذج "مركز البيانات". يمكنك استخدام العيّنة كنموذج لإنشاء تقارير وعروض مرئية جديدة بسرعة استنادًا إلى بيانات الأعطال الأوّلية لتطبيقك:Crashlytics

  1. افتح Crashlytics نموذج لوحة بيانات "مركز البيانات".

  2. انقر على استخدام نموذج في أعلى يسار الصفحة.

  3. في القائمة المنسدلة مصدر بيانات جديد، انقر على إنشاء مصدر بيانات جديد.

  4. انقر على اختيار في بطاقة BigQuery.

  5. اختَر جدولاً يحتوي على بيانات Crashlytics التي تم تصديرها من خلال اختيار مشاريعي > PROJECT_ID > firebase_crashlytics > TABLE_NAME.

    يتوفّر جدول الدفعات دائمًا للاختيار. إذا كان خيار تصدير بيانات البث إلى Crashlytics مفعّلاً، يمكنك اختيار جدول الوقت الفعلي بدلاً من ذلك.BigQuery

  6. ضمن الضبط، اضبط Crashlytics مستوى النموذج على تلقائي.

  7. انقر على ربط لإنشاء مصدر البيانات الجديد.

  8. انقر على الإضافة إلى التقرير للعودة إلى نموذج Crashlytics.

  9. أخيرًا، انقر على إنشاء تقرير لإنشاء نسختك من Crashlytics نموذج لوحة البيانات في "مركز البيانات".

الترقية إلى البنية الأساسية الجديدة للتصدير

في منتصف تشرين الأول (أكتوبر) 2024، أطلقت Crashlytics بنية أساسية جديدة لتصدير data Crashlytics إلى BigQuery. في الوقت الحالي، عملية الترقية إلى هذه البنية الأساسية الجديدة اختيارية.

تتيح هذه البنية الأساسية الجديدة Crashlytics موقعًا جغرافيًا لمجموعة البيانات خارج الولايات المتحدة.

  • إذا فعّلت ميزة التصدير قبل منتصف تشرين الأول (أكتوبر) 2024، يمكنك الآن اختياريًا تغيير موقع تصدير البيانات إلى أي موقع لمجموعة بيانات متوافقة مع BigQuery.

  • إذا فعّلت ميزة التصدير في منتصف تشرين الأول (أكتوبر) 2024 أو لاحقًا، يمكنك اختيار أي موقع جغرافي لمجموعة بيانات متوافقة مع BigQuery أثناء الإعداد.

هناك اختلاف آخر في البنية الأساسية الجديدة، وهو أنّها لا تتيح إعادة تعبئة البيانات من قبل تفعيل التصدير. (باستخدام البنية الأساسية القديمة، يمكنك إضافة بيانات سابقة لمدة تصل إلى 30 يومًا قبل تاريخ التفعيل). تتيح البنية الأساسية الجديدةعمليات إضافة البيانات السابقة لآخر 30 يومًا أو لآخر تاريخ فعّلت فيه التصدير إلى BigQuery (أيهما أحدث).

شرط أساسي للترقية

قبل الترقية إلى البنية الأساسية الجديدة، تأكَّد من استيفاء المتطلبات الأساسية التالية: أن تحتوي جداول الدفعات BigQuery الحالية على معرّفات مطابقة لمعرّفات الحِزم أو أسماء الحِزم التي تم ضبطها لتطبيقات Firebase المسجّلة.

على سبيل المثال:

  • إذا كان لديك جدول BigQuery باسم com_yourcompany_yourproject_IOS، من المفترض أن يكون لديك تطبيق Firebase لنظام التشغيل iOS والإصدارات الأحدث مسجَّلًا في مشروعك على Firebase باستخدام رقم تعريف الحِزمة com.yourcompany.yourproject.

  • إذا كان لديك جدول BigQuery باسم com_yourcompany_yourproject_ANDROID، من المفترض أن يكون لديك تطبيق Android على Firebase مسجَّل في مشروعك على Firebase باسم الحزمة com.yourcompany.yourproject.

في ما يلي كيفية العثور على جميع تطبيقات Firebase المسجّلة في مشروعك على Firebase:

  1. في وحدة تحكّم Firebase، انتقِل إلى إعدادات المشروع.

  2. انتقِل للأسفل إلى بطاقة تطبيقاتك، ثم انقر على تطبيق Firebase المطلوب لعرض معلومات التطبيق، بما في ذلك معرّفه.

ستصدِّر البنية الأساسية الجديدة للتصدير بيانات كل تطبيق استنادًا إلى اسم الحزمة أو معرّف الحزمة المحدَّد لتطبيق Firebase المسجَّل. ولتجنُّب تعطيل سير عمل BigQuery، من المهم التأكّد من أنّ جداول المعالجة المُجمَّعة الحالية تحتوي على الأسماء الصحيحة حتى تتمكّن البنية الأساسية الجديدة من إلحاق كل البيانات الجديدة بالجداول الحالية. إذا كانت لديك أسماء جداول حِزم لا تطابق تطبيقات Firebase المسجّلة، ولكنك لا تزال تريد الترقية، تواصَل مع فريق دعم Firebase.

كيفية الترقية إلى البنية الأساسية الجديدة

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

في ما يلي الخطوات المفصّلة:

  1. في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".

  2. في بطاقة BigQuery، انقر على إدارة.

  3. أوقِف شريط التمرير Crashlytics لإيقاف التصدير. عندما يُطلب منك ذلك، أكِّد أنّك تريد إيقاف تصدير البيانات.

  4. فعِّل شريط التمرير Crashlytics مرة أخرى على الفور لإعادة تفعيل التصدير. أكِّد أنّك تريد تصدير البيانات عندما يُطلب منك ذلك.

    تستخدم عملية تصدير بيانات Crashlytics إلى BigQuery الآن البنية الأساسية الجديدة للتصدير.