يمكنك تصدير بيانات Firebase Crashlytics إلى BigQuery لإجراء مزيد من التحليل. تتيح لك BigQuery تحليل البيانات باستخدام BigQuery SQL وتصديرها إلى مقدّم خدمة آخر لخدمات السحابة الإلكترونية واستخدامها في التمثيل البصري ولوحات البيانات المخصّصة باستخدام "مركز البيانات من Google".
تفعيل التصدير إلى BigQuery
في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".
في بطاقة BigQuery، انقر على ربط.
اتّبِع التعليمات الظاهرة على الشاشة لتفعيل التصدير إلى BigQuery.
إذا أردت الوصول إلى بيانات "Crashlytics" في BigQuery بشكلٍ شبه مباشر، ننصحك بالترقية إلى بث التصدير.
ماذا يحدث عند تفعيل ميزة التصدير؟
يمكنك اختيار موقع مجموعة البيانات. بعد إنشاء مجموعة البيانات، لا يمكن تغيير الموقع الجغرافي، ولكن يمكنك نسخ مجموعة البيانات إلى موقع جغرافي مختلف أو نقل مجموعة البيانات يدويًا (إعادة إنشائها) في موقع جغرافي مختلف. للاطّلاع على مزيد من المعلومات، يُرجى الاطّلاع على مقالة تغيير الموقع الجغرافي لعمليات التصدير الحالية.
لا ينطبق هذا الموقع الجغرافي إلا على البيانات التي يتم تصديرها إلى BigQuery، ولا يؤثّر في الموقع الجغرافي للبيانات المخزّنة لاستخدامها في لوحة بيانات Crashlytics في وحدة تحكّم Firebase أو في Android Studio.
يتم تلقائيًا ربط جميع التطبيقات في مشروعك بمنصّة BigQuery، وبالنسبة إلى أي تطبيقات تتم إضافتها إلى المشروع لاحقًا، يتم أيضًا ربطها تلقائيًا بمنصّة BigQuery. يمكنك إدارة اختيار التطبيقات التي ترسل البيانات.
يُعدّ Firebase عمليات مزامنة يومية لبياناتك مع BigQuery.
بعد ربط مشروعك، عليك عادةً الانتظار إلى أن تتم عملية المزامنة في اليوم التالي لتصدير مجموعة البيانات الأولى إلى BigQuery.
تحدث المزامنة اليومية مرة واحدة في اليوم، بغض النظر عن أي عملية تصدير مجدوَلة قد تكون قد أعددتها في BigQuery. يُرجى العِلم أنّ توقيت مهمة المزامنة ومدتها يمكن أن يتغيّرا، لذا لا ننصح بجدولة عمليات أو مهام ما بعد التصدير استنادًا إلى توقيت محدّد للتصدير.
تصدِّر Firebase نسخة من بياناتك الحالية إلى BigQuery. قد تستغرق عملية نشر البيانات الأولية للتصدير مدّة تصل إلى 48 ساعة.
لكل تطبيق مرتبط، تتضمّن عملية التصدير هذه جدول دفعات يحتوي على البيانات من المزامنة اليومية.
يمكنك تحديد جدول زمني يدويًا لعمليات إضافة البيانات السابقة لجدول الدفعات حتى آخر 30 يومًا أو لأحدث تاريخ عند تفعيل التصدير إلى BigQuery (أيهما أحدث).
يُرجى العلم أنّه في حال فعّلت تصدير بيانات 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، سيكون لديك أيضًا جدول في الوقت الفعلي بالإضافة إلى جدول الدفعات. في ما يلي الاختلافات التي يجب أن تكون على دراية بها بين الجداول:
جدول الأركان الأساسية | جدول "الوقت الفعلي" |
---|---|
|
|
يُعدّ جدول الدُفعات مثاليًا للتحليل على المدى الطويل وتحديد المؤشرات بمرور الوقت، لأنّنا نخزِّن الأحداث بشكل دائم قبل كتابتها، ويمكن إضافة بيانات سابقة إلى الجدول لمدة تصل إلى 30 يومًا*. عندما نكتب البيانات في جدول الوقت الفعلي، تتم كتابة تلك البيانات على الفور في BigQuery، ما يجعلها مثالية للقوائم المتعلّقة بالوقت الحالي ولوحات البيانات والتنبيهات المخصّصة. يمكن دمج هذين الجدولين مع استعلام تجميع للاستفادة من مزايا كليهما.
بشكلٍ تلقائي، يكون وقت انتهاء صلاحية القسم في جدول الوقت الفعلي هو 30 يومًا. للاطّلاع على كيفية تعديل هذا الإعداد، يُرجى الاطّلاع على ضبط تاريخ انتهاء صلاحية القسم في مستندات BigQuery.
* يمكنك الاطّلاع على تفاصيل حول إتاحة إضافة البيانات السابقة في الترقية إلى البنية الأساسية الجديدة للتصدير.
تفعيل تصدير أحداث البث المباشر على Crashlytics إلى BigQuery
في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".
في بطاقة BigQuery، انقر على إدارة.
ضَع علامة في مربّع الاختيار تضمين البث.
يؤدي هذا الإجراء إلى تفعيل ميزة البث لجميع تطبيقاتك المرتبطة.
ما هي الإجراءات التي يمكنك اتّخاذها بشأن البيانات التي تم تصديرها؟
تحتوي عمليات التصدير إلى 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: عدد المستخدمين المتأثّرين بمشكلة عطل، مقسّمة حسب البلد
رصد فريقك خطأً جسيمًا أثناء طرح إصدار جديد. لقد تمكّنت من استخدام طلب البحث من المثال التالي في "العثور على الأعطال الأكثر انتشارًا" أعلاه لتحديد رقم تعريف مشكلة الأعطال المحدّدة. يريد فريقك الآن معرفة ما إذا كان هذا العُطل قد انتشر إلى مستخدمين في بلدان مختلفة حول العالم.
لكتابة هذا الطلب، على فريقك تنفيذ ما يلي:
فعِّل تصدير بيانات Google Analytics إلى BigQuery. اطّلِع على تصدير بيانات المشروع إلى BigQuery.
عدِّل تطبيقك لإرسال معرّف مستخدم إلى كلّ من حزمة تطوير البرامج (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");
اكتب طلب بحث يستخدِم حقل "رقم تعريف المستخدِم" لدمج الأحداث في مجموعة بيانات 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
انقر على استخدام نموذج في أعلى يسار الصفحة.
في القائمة المنسدلة مصدر بيانات جديد، انقر على إنشاء مصدر بيانات جديد.
انقر على اختيار في بطاقة BigQuery.
اختَر جدولاً يحتوي على بيانات Crashlytics التي تم تصديرها من خلال اختيار مشاريعي > PROJECT_ID > firebase_crashlytics > TABLE_NAME.
يتوفّر جدول الدفعات دائمًا للاختيار. إذا كان خيار تصدير بيانات البث إلى Crashlytics مفعّلاً، يمكنك اختيار جدول الوقت الفعلي بدلاً من ذلك.BigQuery
ضمن الضبط، اضبط Crashlytics مستوى النموذج على تلقائي.
انقر على ربط لإنشاء مصدر البيانات الجديد.
انقر على الإضافة إلى التقرير للعودة إلى نموذج Crashlytics.
أخيرًا، انقر على إنشاء تقرير لإنشاء نسختك من 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:
في وحدة تحكّم Firebase، انتقِل إلى إعدادات المشروع.
انتقِل للأسفل إلى بطاقة تطبيقاتك، ثم انقر على تطبيق Firebase المطلوب لعرض معلومات التطبيق، بما في ذلك معرّفه.
ستصدِّر البنية الأساسية الجديدة للتصدير بيانات كل تطبيق استنادًا إلى اسم الحزمة أو معرّف الحزمة المحدَّد لتطبيق Firebase المسجَّل. ولتجنُّب تعطيل سير عمل BigQuery، من المهم التأكّد من أنّ جداول المعالجة المُجمَّعة الحالية تحتوي على الأسماء الصحيحة حتى تتمكّن البنية الأساسية الجديدة من إلحاق كل البيانات الجديدة بالجداول الحالية. إذا كانت لديك أسماء جداول حِزم لا تطابق تطبيقات Firebase المسجّلة، ولكنك لا تزال تريد الترقية، تواصَل مع فريق دعم Firebase.
كيفية الترقية إلى البنية الأساسية الجديدة
إذا سبق لك تفعيل ميزة التصدير، يمكنك الترقية إلى البنية الأساسية الجديدة ببساطة من خلال إيقاف ميزة تصدير بيانات Crashlytics ثم تفعيلها مرة أخرى في وحدة تحكّم Firebase.
في ما يلي الخطوات المفصّلة:
في وحدة تحكّم Firebase، انتقِل إلى صفحة "عمليات الدمج".
في بطاقة BigQuery، انقر على إدارة.
أوقِف شريط التمرير Crashlytics لإيقاف التصدير. عندما يُطلب منك ذلك، أكِّد أنّك تريد إيقاف تصدير البيانات.
فعِّل شريط التمرير Crashlytics مرة أخرى على الفور لإعادة تفعيل التصدير. أكِّد أنّك تريد تصدير البيانات عندما يُطلب منك ذلك.
تستخدم عملية تصدير بيانات Crashlytics إلى BigQuery الآن البنية الأساسية الجديدة للتصدير.