می توانید داده های Firebase Crashlytics خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان میدهد دادهها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آنها را به یک ارائهدهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبوردهای سفارشی با Google Data Studio استفاده کنید.
صادرات به BigQuery را فعال کنید
- در کنسول Firebase ، به صفحه ادغام بروید.
- در کارت BigQuery ، روی پیوند کلیک کنید.
- دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.
وقتی صادرات به BigQuery را فعال میکنید، این اتفاق میافتد:
بهطور پیشفرض، همه برنامههای پروژه شما به BigQuery مرتبط میشوند و هر برنامهای که بعداً به پروژه اضافه میکنید بهطور خودکار به BigQuery مرتبط میشود. میتوانید مدیریت کنید که کدام برنامهها دادهها را ارسال میکنند .
Firebase همگامسازی روزانه دادههای شما را از پروژه Firebase با BigQuery تنظیم میکند.
Firebase یک کپی از داده های موجود شما را به BigQuery صادر می کند. برای هر برنامه پیوند داده شده، این شامل یک جدول دستهای است که حاوی دادههای همگامسازی روزانه است.
اگر صادرات جریان Crashlytics به BigQuery را فعال کنید ، همه برنامههای پیوند داده شده نیز یک جدول بیدرنگ حاوی دادههایی که دائماً بهروزرسانی میشوند، خواهند داشت.
برای غیرفعال کردن صادرات به 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 می نویسیم و بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک کوئری دوخت ترکیب کرد تا از مزایای هر دو بهره مند شود.
بهطور پیشفرض، جدول Realtime زمان انقضای پارتیشن 30 روزه دارد. برای یادگیری نحوه تغییر این، به تنظیم انقضای پارتیشن در مستندات BigQuery مراجعه کنید.
صادرات جریان Crashlytics به BigQuery را فعال کنید
- در کنسول Firebase ، به صفحه ادغام بروید.
- در کارت BigQuery ، روی مدیریت کلیک کنید.
- چک باکس Include streaming را انتخاب کنید.
این عملکرد پخش جریانی را برای همه برنامههای پیوند داده شده شما فعال میکند.
با داده های صادر شده چه کاری می توانید انجام دهید؟
صادرات به BigQuery حاوی دادههای خرابی خام از جمله نوع دستگاه، سیستم عامل، استثناها (برنامههای Android) یا خطاها (برنامههای اپل) و گزارشهای Crashlytics و همچنین دادههای دیگر است.
دقیقاً چه دادههای Crashlytics صادر شده و طرح جدول آن را در ادامه این صفحه مرور کنید.
از قالب Data Studio استفاده کنید
برای فعال کردن دادههای بیدرنگ در قالب Data Studio خود، دستورالعملهای موجود در Visualizing Crashlytics صادر شده با Data Studio را دنبال کنید.
ایجاد نماها
با استفاده از رابط کاربری BigQuery می توانید پرس و جوها را به نما تبدیل کنید. برای دستورالعمل های دقیق، به ایجاد نماها در مستندات BigQuery مراجعه کنید.
کوئری ها را اجرا کنید
مثالهای زیر جستوجوهایی را نشان میدهند که میتوانید روی دادههای Crashlytics خود اجرا کنید تا گزارشهایی تولید کنید که دادههای رویداد خرابی را در خلاصههای قابل فهمتر جمعآوری میکند. از آنجایی که این نوع گزارشها در داشبورد Crashlytics کنسول Firebase در دسترس نیستند، میتوانند تجزیه و تحلیل و درک شما از دادههای خرابی را تکمیل کنند.
مثال 1: خرابی در روز
پس از تلاش برای رفع هر چه بیشتر باگهای ممکن، فکر میکنید تیم شما بالاخره آماده است تا برنامه جدید اشتراکگذاری عکس شما را راهاندازی کند. قبل از اینکه این کار را انجام دهید، میخواهید تعداد خرابیهای ماه گذشته در روز را بررسی کنید تا مطمئن شوید که bug-bash برنامه را در طول زمان پایدارتر کرده است.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 خرابی برتر را در برنامه خود پیدا کنید. شما یک پرس و جو تولید می کنید که نقاط مربوط به داده ها را ارائه می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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. برای پیشی گرفتن از نگرانیهای احتمالی مربوط به سازگاری، پرس و جوی را جمعآوری میکنید که 10 دستگاهی را که بیشترین خرابیها را در هفته گذشته (168 ساعت) تجربه کردهاند، شناسایی میکند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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
تنظیم میکنید و هر بار که کاربر به سطح جدیدی میرسد، آن را بهروزرسانی میکنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از آن کلید در صادرات خود به BigQuery ، سپس می توانید یک پرس و جو بنویسید تا توزیع مقادیر current_level
مرتبط با هر رویداد خرابی را گزارش کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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: استخراج شناسه کاربری
شما یک برنامه اندروید در دسترسی اولیه دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر تعداد غیرعادی خرابی را تجربه کرده اند. برای رسیدن به ته مشکل، یک پرس و جو می نویسید که با استفاده از شناسه کاربری آن ها، تمام رویدادهای خرابی را برای آن کاربران نشان می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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: همه کاربرانی که با مشکل خرابی خاصی مواجه هستند را پیدا کنید
تیم شما به طور تصادفی یک باگ مهم را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست از عبارت «یافتن بیشترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کند. اکنون تیم شما میخواهد برای استخراج لیستی از کاربران برنامه که تحت تأثیر این خرابی قرار گرفتهاند، پرس و جوی اجرا کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 را ببینید.
برنامه خود را بهروزرسانی کنید تا شناسه کاربری را هم به Google Analytics SDK و هم در Crashlytics SDK ارسال کنید.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
هدف-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
درخواستی بنویسید که از فیلد شناسه کاربر برای پیوستن به رویدادهای مجموعه داده Google Analytics با خرابی در مجموعه داده Crashlytics استفاده کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و
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 موضوع برتر تا کنون امروز
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 مورد برتر از DATE، از جمله امروز
شما همچنین می توانید جداول دسته ای و بیدرنگ را با یک جستجوی دوخت ترکیب کنید تا اطلاعات بیدرنگ را به داده های دسته ای قابل اعتماد اضافه کنید. از آنجایی که event_id
یک کلید اصلی است، میتوانید از DISTINCT event_id
برای حذف رویدادهای رایج از دو جدول استفاده کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 یکسان هستند. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، جدول بیدرنگ همان ستونهایی را خواهد داشت که جدول دستهای دارد. توجه داشته باشید که ممکن است ستونهایی در ردیفها داشته باشید که نشاندهنده رویدادهایی هستند که ردیابی پشتهای ندارند.
ستون های داخل صادرات در این جدول فهرست شده اند:
نام فیلد | نوع داده | توضیحات |
---|---|---|
platform | STRING | پلت فرم برنامه همانطور که در پروژه Firebase ثبت شده است (مقادیر معتبر: IOS یا ANDROID ) |
bundle_identifier | STRING | شناسه منحصر به فرد برنامه همانطور که در پروژه Firebase ثبت شده است (به عنوان مثال،com.google.gmail )برای برنامه های پلتفرم اپل، این شناسه بسته نرم افزاری است. برای برنامه های اندروید، این نام بسته برنامه است. |
event_id | STRING | شناسه منحصر به فرد رویداد |
is_fatal | بولین | این که آیا برنامه از کار افتاده است |
error_type | STRING | نوع خطای رویداد (به عنوان مثال، FATAL ، NON_FATAL ، ANR ، و غیره) |
issue_id | STRING | موضوع مرتبط با رویداد |
variant_id | STRING | نوع مسئله مرتبط با این رویداد توجه داشته باشید که همه رویدادها دارای یک نوع مشکل مرتبط نیستند. |
event_timestamp | TIMESTAMP | زمانی که واقعه رخ داد |
device | ضبط | دستگاهی که رویداد در آن رخ داده است |
device.manufacturer | STRING | سازنده دستگاه |
device.model | STRING | مدل دستگاه |
device.architecture | STRING | به عنوان مثال، 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 | STRING | نسخه سیستم عامل روی دستگاه |
operating_system.name | STRING | نام سیستم عامل روی دستگاه |
operating_system.modification_state | STRING | این که آیا دستگاه تغییر کرده است یا نه (برای مثال، یک برنامه جیلبریک MODIFIED و یک برنامه روت شده UNMODIFIED است) |
operating_system.type | STRING | (فقط برنامه های اپل) نوع سیستم عامل در حال اجرا بر روی دستگاه (به عنوان مثال، IOS ، MACOS ، و غیره) |
operating_system.device_type | STRING | نوع دستگاه (به عنوان مثال، MOBILE ، TABLET ، TV و غیره)؛ همچنین به عنوان "دسته دستگاه" شناخته می شود |
application | ضبط | برنامه ای که رویداد را ایجاد کرد |
application.build_version | STRING | نسخه ساخت برنامه |
application.display_version | STRING | |
user | ضبط | (اختیاری) اطلاعات جمع آوری شده در مورد کاربر برنامه |
user.name | STRING | (اختیاری) نام کاربر |
user.email | STRING | (اختیاری) آدرس ایمیل کاربر |
user.id | STRING | (اختیاری) شناسه مخصوص برنامه مرتبط با کاربر |
custom_keys | ضبط مکرر | جفت های کلید-مقدار تعریف شده توسط توسعه دهنده |
custom_keys.key | STRING | یک کلید تعریف شده توسط توسعه دهنده |
custom_keys.value | STRING | یک مقدار تعریف شده توسط توسعه دهنده |
installation_uuid | STRING | شناسه ای که نصب یک برنامه و دستگاه منحصر به فرد را مشخص می کند |
crashlytics_sdk_versions | STRING | نسخه Crashlytics SDK که رویداد را ایجاد کرد |
app_orientation | STRING | به عنوان مثال، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN ، و غیره. |
device_orientation | STRING | به عنوان مثال، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN ، و غیره. |
process_state | STRING | BACKGROUND یا FOREGROUND |
logs | ضبط مکرر | پیامهای گزارش مهر زمانی تولید شده توسط Crashlytics Logger، در صورت فعال بودن |
logs.timestamp | TIMESTAMP | زمانی که لاگ ساخته شد |
logs.message | STRING | پیام ثبت شده |
breadcrumbs | ضبط مکرر | در صورت فعال بودن، نان خردههای Google Analytics دارای مهر زمانی است |
breadcrumbs.timestamp | TIMESTAMP | مهر زمانی مرتبط با پودر سوخاری |
breadcrumbs.name | STRING | نام مرتبط با آرد سوخاری |
breadcrumbs.params | ضبط مکرر | پارامترهای مرتبط با پودر سوخاری |
breadcrumbs.params.key | STRING | یک کلید پارامتر مرتبط با پودر سوخاری |
breadcrumbs.params.value | STRING | یک مقدار پارامتر مرتبط با پودر سوخاری |
blame_frame | ضبط | قاب به عنوان علت اصلی خرابی یا خطا شناسایی شده است |
blame_frame.line | INT64 | شماره خط فایل قاب |
blame_frame.file | STRING | نام فایل فریم |
blame_frame.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
blame_frame.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند برای استثناهای جاوا تنظیم نشده است |
blame_frame.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است برای فریم های جاوا تنظیم نشده است |
blame_frame.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
blame_frame.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
blame_frame.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
exceptions | ضبط مکرر | (فقط اندروید) استثناهایی که در طول این رویداد رخ داده است. استثناهای تودرتو به ترتیب زمانی معکوس ارائه می شوند، به این معنی که آخرین رکورد اولین استثنا پرتاب شده است. |
exceptions.type | STRING | نوع استثنا (به عنوان مثال،java.lang.IllegalStateException) |
exceptions.exception_message | STRING | یک پیام مرتبط با استثنا |
exceptions.nested | بولین | درست برای همه به جز آخرین مورد استثنا (به معنی اولین رکورد) |
exceptions.title | STRING | عنوان تاپیک |
exceptions.subtitle | STRING | زیرنویس تاپیک |
exceptions.blamed | بولین | درست است اگر Crashlytics تشخیص دهد که استثنا مسئول خطا یا خرابی است |
exceptions.frames | ضبط مکرر | فریم های مرتبط با استثنا |
exceptions.frames.line | INT64 | شماره خط فایل قاب |
exceptions.frames.file | STRING | نام فایل فریم |
exceptions.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
exceptions.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند برای استثناهای جاوا تنظیم نشده است |
exceptions.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است برای فریم های جاوا تنظیم نشده است |
exceptions.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
exceptions.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
exceptions.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
error | ضبط مکرر | (فقط برنامه های اپل) خطاهای غیر کشنده |
error.queue_name | STRING | صفی که تاپیک در حال اجرا بود |
error.code | INT64 | کد خطا مرتبط با خطای NSE ثبت شده سفارشی برنامه |
error.title | STRING | عنوان تاپیک |
error.subtitle | STRING | زیرنویس تاپیک |
error.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
error.frames | ضبط مکرر | فریم های stacktrace |
error.frames.line | INT64 | شماره خط فایل قاب |
error.frames.file | STRING | نام فایل فریم |
error.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
error.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند |
error.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است |
error.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
error.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
error.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
threads | ضبط مکرر | موضوعات موجود در زمان رویداد |
threads.crashed | بولین | این که آیا نخ خراب شده است |
threads.thread_name | STRING | نام تاپیک |
threads.queue_name | STRING | (فقط برنامه های اپل) صفی که رشته در حال اجرا بود |
threads.signal_name | STRING | نام سیگنالی که باعث از کار افتادن برنامه شد، فقط در رشتههای اصلی خراب شده وجود دارد |
threads.signal_code | STRING | کد سیگنالی که باعث از کار افتادن برنامه شد. فقط در رشته های بومی خراب شده وجود دارد |
threads.crash_address | INT64 | آدرس سیگنالی که باعث از کار افتادن برنامه شد. فقط در رشته های بومی خراب شده وجود دارد |
threads.code | INT64 | (فقط برنامه های اپل) کد خطای خطای NSE ثبت شده سفارشی برنامه |
threads.title | STRING | عنوان تاپیک |
threads.subtitle | STRING | زیرنویس تاپیک |
threads.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
threads.frames | ضبط مکرر | قاب های نخ |
threads.frames.line | INT64 | شماره خط فایل قاب |
threads.frames.file | STRING | نام فایل فریم |
threads.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیر قابل آبرسانی باشد |
threads.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند |
threads.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است |
threads.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
threads.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
threads.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
unity_metadata.unity_version | STRING | نسخه Unity در حال اجرا بر روی این دستگاه |
unity_metadata.debug_build | بولین | اگر این یک ساخت اشکال زدایی است |
unity_metadata.processor_type | STRING | نوع پردازنده |
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 | STRING | نام دستگاه گرافیکی |
unity_metadata.graphics_device_vendor | STRING | فروشنده دستگاه گرافیکی |
unity_metadata.graphics_device_version | STRING | نسخه دستگاه گرافیکی |
unity_metadata.graphics_device_type | STRING | نوع دستگاه گرافیکی |
unity_metadata.graphics_shader_level | INT64 | سطح سایه زن گرافیک |
unity_metadata.graphics_render_target_count | INT64 | تعداد اهداف رندر گرافیکی |
unity_metadata.graphics_copy_texture_support | STRING | پشتیبانی از کپی بافت گرافیکی همانطور که در Unity API تعریف شده است |
unity_metadata.graphics_max_texture_size | INT64 | حداکثر اندازه اختصاص داده شده به رندر بافت |
unity_metadata.screen_size_px | STRING | اندازه صفحه نمایش بر حسب پیکسل، فرمت شده به صورت عرض x ارتفاع |
unity_metadata.screen_resolution_dpi | STRING | DPI صفحه به عنوان یک عدد ممیز شناور |
unity_metadata.screen_refresh_rate_hz | INT64 | نرخ تازه سازی صفحه نمایش بر حسب هرتز |
داده های Crashlytics صادر شده را با Data Studio تجسم کنید
Google Data Studio مجموعه دادههای Crashlytics شما را در BigQuery به گزارشهایی تبدیل میکند که خواندن آسانتر، اشتراکگذاری آسانتر و کاملاً قابل تنظیم هستند.
برای کسب اطلاعات بیشتر در مورد استفاده از Data Studio، راهنمای شروع سریع Data Studio را امتحان کنید، به Data Studio خوش آمدید .
از یک الگوی گزارش Crashlytics استفاده کنید
Data Studio یک گزارش نمونه برای Crashlytics دارد که شامل مجموعه ای جامع از ابعاد و معیارهای طرحواره Crashlytics BigQuery صادر شده است. اگر صادرات جریان Crashlytics به BigQuery را فعال کردهاید، میتوانید آن دادهها را در صفحه روندهای Realtime الگوی Data Studio مشاهده کنید. میتوانید از نمونه به عنوان الگو برای ایجاد سریع گزارشها و تجسمهای جدید بر اساس دادههای خرابی خام برنامه خود استفاده کنید. :
قالب داشبورد Crashlytics Data Studio را باز کنید.
روی Use Template در گوشه سمت راست بالا کلیک کنید.
در منوی کشویی New Data Source ، Create New Data Source را انتخاب کنید.
در کارت BigQuery روی Select کلیک کنید.
با انتخاب پروژههای من > PROJECT_ID > firebase_crashlytics > TABLE_NAME ، جدولی حاوی دادههای Crashlytics صادر شده را انتخاب کنید.
جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، میتوانید به جای آن جدول بیدرنگ خود را انتخاب کنید.
در قسمت پیکربندی ، سطح الگوی Crashlytics را روی پیشفرض تنظیم کنید.
برای ایجاد منبع داده جدید روی Connect کلیک کنید.
برای بازگشت به الگوی Crashlytics روی افزودن به گزارش کلیک کنید.
در نهایت روی Create Report کلیک کنید تا یک کپی از الگوی Crashlytics Data Studio Dashboard ایجاد شود.
می توانید داده های Firebase Crashlytics خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان میدهد دادهها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آنها را به یک ارائهدهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبوردهای سفارشی با Google Data Studio استفاده کنید.
صادرات به BigQuery را فعال کنید
- در کنسول Firebase ، به صفحه ادغام بروید.
- در کارت BigQuery ، روی پیوند کلیک کنید.
- دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.
وقتی صادرات به BigQuery را فعال میکنید، این اتفاق میافتد:
بهطور پیشفرض، همه برنامههای پروژه شما به BigQuery مرتبط میشوند و هر برنامهای که بعداً به پروژه اضافه میکنید بهطور خودکار به BigQuery مرتبط میشود. میتوانید مدیریت کنید که کدام برنامهها دادهها را ارسال میکنند .
Firebase همگامسازی روزانه دادههای شما را از پروژه Firebase با BigQuery تنظیم میکند.
Firebase یک کپی از داده های موجود شما را به BigQuery صادر می کند. برای هر برنامه پیوند داده شده، این شامل یک جدول دستهای است که حاوی دادههای همگامسازی روزانه است.
اگر صادرات جریان Crashlytics به BigQuery را فعال کنید ، همه برنامههای پیوند داده شده نیز یک جدول بیدرنگ حاوی دادههایی که دائماً بهروزرسانی میشوند، خواهند داشت.
برای غیرفعال کردن صادرات به 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 می نویسیم و بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک کوئری دوخت ترکیب کرد تا از مزایای هر دو بهره مند شود.
بهطور پیشفرض، جدول Realtime زمان انقضای پارتیشن 30 روزه دارد. برای یادگیری نحوه تغییر این، به تنظیم انقضای پارتیشن در مستندات BigQuery مراجعه کنید.
صادرات جریان Crashlytics به BigQuery را فعال کنید
- در کنسول Firebase ، به صفحه ادغام بروید.
- در کارت BigQuery ، روی مدیریت کلیک کنید.
- چک باکس Include streaming را انتخاب کنید.
این عملکرد پخش جریانی را برای همه برنامههای پیوند داده شده شما فعال میکند.
با داده های صادر شده چه کاری می توانید انجام دهید؟
صادرات به BigQuery حاوی دادههای خرابی خام از جمله نوع دستگاه، سیستم عامل، استثناها (برنامههای Android) یا خطاها (برنامههای اپل) و گزارشهای Crashlytics و همچنین دادههای دیگر است.
دقیقاً چه دادههای Crashlytics صادر شده و طرح جدول آن را در ادامه این صفحه مرور کنید.
از قالب Data Studio استفاده کنید
برای فعال کردن دادههای بیدرنگ در قالب Data Studio خود، دستورالعملهای موجود در Visualizing Crashlytics صادر شده با Data Studio را دنبال کنید.
ایجاد نماها
با استفاده از رابط کاربری BigQuery می توانید پرس و جوها را به نما تبدیل کنید. برای دستورالعمل های دقیق، به ایجاد نماها در مستندات BigQuery مراجعه کنید.
کوئری ها را اجرا کنید
مثالهای زیر جستوجوهایی را نشان میدهند که میتوانید روی دادههای Crashlytics خود اجرا کنید تا گزارشهایی تولید کنید که دادههای رویداد خرابی را در خلاصههای قابل فهمتر جمعآوری میکند. از آنجایی که این نوع گزارشها در داشبورد Crashlytics کنسول Firebase در دسترس نیستند، میتوانند تجزیه و تحلیل و درک شما از دادههای خرابی را تکمیل کنند.
مثال 1: خرابی در روز
پس از تلاش برای رفع هر چه بیشتر باگهای ممکن، فکر میکنید تیم شما بالاخره آماده است تا برنامه جدید اشتراکگذاری عکس شما را راهاندازی کند. قبل از اینکه این کار را انجام دهید، میخواهید تعداد خرابیهای ماه گذشته در روز را بررسی کنید تا مطمئن شوید که bug-bash برنامه را در طول زمان پایدارتر کرده است.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 خرابی برتر را در برنامه خود پیدا کنید. شما یک پرس و جو تولید می کنید که نقاط مربوط به داده ها را ارائه می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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. برای پیشی گرفتن از نگرانیهای احتمالی مربوط به سازگاری، پرس و جوی را جمعآوری میکنید که 10 دستگاهی را که بیشترین خرابیها را در هفته گذشته (168 ساعت) تجربه کردهاند، شناسایی میکند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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
تنظیم میکنید و هر بار که کاربر به سطح جدیدی میرسد، آن را بهروزرسانی میکنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از آن کلید در صادرات خود به BigQuery ، سپس می توانید یک پرس و جو بنویسید تا توزیع مقادیر current_level
مرتبط با هر رویداد خرابی را گزارش کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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: استخراج شناسه کاربری
شما یک برنامه اندروید در دسترسی اولیه دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر تعداد غیرعادی خرابی را تجربه کرده اند. برای رسیدن به ته مشکل، یک پرس و جو می نویسید که با استفاده از شناسه کاربری آن ها، تمام رویدادهای خرابی را برای آن کاربران نشان می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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: همه کاربرانی که با مشکل خرابی خاصی مواجه هستند را پیدا کنید
تیم شما به طور تصادفی یک باگ مهم را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست از عبارت «یافتن بیشترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کند. اکنون تیم شما میخواهد برای استخراج لیستی از کاربران برنامه که تحت تأثیر این خرابی قرار گرفتهاند، پرس و جوی اجرا کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 را ببینید.
برنامه خود را بهروزرسانی کنید تا شناسه کاربری را هم به Google Analytics SDK و هم در Crashlytics SDK ارسال کنید.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
هدف-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
درخواستی بنویسید که از فیلد شناسه کاربر برای پیوستن به رویدادهای مجموعه داده Google Analytics با خرابی در مجموعه داده Crashlytics استفاده کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و
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 موضوع برتر تا کنون امروز
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 مورد برتر از DATE، از جمله امروز
شما همچنین می توانید جداول دسته ای و بیدرنگ را با یک جستجوی دوخت ترکیب کنید تا اطلاعات بیدرنگ را به داده های دسته ای قابل اعتماد اضافه کنید. از آنجایی که event_id
یک کلید اصلی است، میتوانید از DISTINCT event_id
برای حذف رویدادهای رایج از دو جدول استفاده کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و 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 یکسان هستند. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، جدول بیدرنگ همان ستونهایی را خواهد داشت که جدول دستهای دارد. توجه داشته باشید که ممکن است ستونهایی در ردیفها داشته باشید که نشاندهنده رویدادهایی هستند که ردیابی پشتهای ندارند.
ستون های داخل صادرات در این جدول فهرست شده اند:
نام فیلد | نوع داده | توضیحات |
---|---|---|
platform | STRING | پلت فرم برنامه همانطور که در پروژه Firebase ثبت شده است (مقادیر معتبر: IOS یا ANDROID ) |
bundle_identifier | STRING | شناسه منحصر به فرد برنامه همانطور که در پروژه Firebase ثبت شده است (به عنوان مثال،com.google.gmail )برای برنامه های پلتفرم اپل، این شناسه بسته نرم افزاری است. برای برنامه های اندروید، این نام بسته برنامه است. |
event_id | STRING | شناسه منحصر به فرد رویداد |
is_fatal | بولین | این که آیا برنامه از کار افتاده است |
error_type | STRING | نوع خطای رویداد (به عنوان مثال، FATAL ، NON_FATAL ، ANR ، و غیره) |
issue_id | STRING | موضوع مرتبط با رویداد |
variant_id | STRING | نوع مسئله مرتبط با این رویداد توجه داشته باشید که همه رویدادها دارای یک نوع مشکل مرتبط نیستند. |
event_timestamp | TIMESTAMP | زمانی که واقعه رخ داد |
device | ضبط | دستگاهی که رویداد در آن رخ داده است |
device.manufacturer | STRING | سازنده دستگاه |
device.model | STRING | مدل دستگاه |
device.architecture | STRING | به عنوان مثال، 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 | STRING | نسخه سیستم عامل روی دستگاه |
operating_system.name | STRING | نام سیستم عامل روی دستگاه |
operating_system.modification_state | STRING | آیا دستگاه اصلاح شده است (به عنوان مثال ، یک برنامه Jailbroken MODIFIED و یک برنامه ریشه دار UNMODIFIED است) |
operating_system.type | STRING | (فقط برنامه های اپل) نوع سیستم عامل در حال اجرا بر روی دستگاه (به عنوان مثال ، IOS ، MACOS و غیره) |
operating_system.device_type | STRING | نوع دستگاه (به عنوان مثال ، MOBILE ، TABLET ، TV و غیره) ؛ همچنین به عنوان "دسته دستگاه" شناخته می شود |
application | ثبت | برنامه ای که این رویداد را ایجاد کرده است |
application.build_version | STRING | نسخه ساخت برنامه |
application.display_version | STRING | |
user | ثبت | (اختیاری) اطلاعات جمع آوری شده در مورد کاربر برنامه |
user.name | STRING | (اختیاری) نام کاربر |
user.email | STRING | (اختیاری) آدرس ایمیل کاربر |
user.id | STRING | (اختیاری) شناسه خاص برنامه مرتبط با کاربر |
custom_keys | سابقه مکرر | جفت های ارزش کلید تعریف شده توسط توسعه دهنده |
custom_keys.key | STRING | یک کلید تعریف شده توسط توسعه دهنده |
custom_keys.value | STRING | یک مقدار تعریف شده توسط توسعه دهنده |
installation_uuid | STRING | شناسه ای که یک برنامه منحصر به فرد و نصب دستگاه را مشخص می کند |
crashlytics_sdk_versions | STRING | نسخه SDK Crashlytics که این رویداد را ایجاد کرده است |
app_orientation | STRING | به عنوان مثال ، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN و غیره. |
device_orientation | STRING | به عنوان مثال ، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN و غیره. |
process_state | STRING | BACKGROUND یا FOREGROUND |
logs | سابقه مکرر | پیام های ورود به سیستم Timestamped تولید شده توسط گزارش Crashlytics ، در صورت فعال کردن |
logs.timestamp | TIMESTAMP | وقتی ورود به سیستم ساخته شد |
logs.message | STRING | پیام وارد شده |
breadcrumbs | سابقه مکرر | در صورت فعال بودن ، نان آنالیز Google Analytics |
breadcrumbs.timestamp | TIMESTAMP | Timestamp مرتبط با آرد سوخاری |
breadcrumbs.name | STRING | نام مرتبط با آرد سوخاری |
breadcrumbs.params | سابقه مکرر | پارامترهای مرتبط با نان |
breadcrumbs.params.key | STRING | یک کلید پارامتر مرتبط با آرد سوخاری |
breadcrumbs.params.value | STRING | مقدار پارامتر مرتبط با آرد سوخاری |
blame_frame | ثبت | قاب شناخته شده به عنوان علت اصلی تصادف یا خطا |
blame_frame.line | int64 | شماره خط پرونده قاب |
blame_frame.file | STRING | نام پرونده قاب |
blame_frame.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
blame_frame.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
blame_frame.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
blame_frame.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
blame_frame.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
blame_frame.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
exceptions | سابقه مکرر | (فقط Android) استثنائاتی که در این رویداد رخ داده است. استثنائات تو در تو به ترتیب زمانی معکوس ارائه شده است ، به این معنی که آخرین رکورد اولین استثناء است |
exceptions.type | STRING | نوع استثنا (به عنوان مثال ،java.lang.IllegalStateException) |
exceptions.exception_message | STRING | پیام مرتبط با استثنا |
exceptions.nested | بولی | درست برای همه به جز استثناء آخرین پرتاب (به معنی رکورد اول) |
exceptions.title | STRING | عنوان موضوع |
exceptions.subtitle | STRING | زیرنویس موضوع |
exceptions.blamed | بولی | درست است اگر Crashlytics استثناء مسئول خطا یا تصادف است |
exceptions.frames | سابقه مکرر | قاب های مرتبط با استثنا |
exceptions.frames.line | int64 | شماره خط پرونده قاب |
exceptions.frames.file | STRING | نام پرونده قاب |
exceptions.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
exceptions.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
exceptions.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
exceptions.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
exceptions.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
exceptions.frames.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
error | سابقه مکرر | (فقط برنامه های اپل) خطاهای غیر کشنده |
error.queue_name | STRING | صف که نخ در حال اجرا بود |
error.code | int64 | کد خطا مرتبط با NSERROR ورود به سیستم سفارشی برنامه |
error.title | STRING | عنوان موضوع |
error.subtitle | STRING | زیرنویس موضوع |
error.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
error.frames | سابقه مکرر | قاب های StackTrace |
error.frames.line | int64 | شماره خط پرونده قاب |
error.frames.file | STRING | نام پرونده قاب |
error.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
error.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است |
error.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است |
error.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
error.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
error.frames.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
threads | سابقه مکرر | موضوعات موجود در زمان رویداد |
threads.crashed | بولی | آیا موضوع خراب شده است |
threads.thread_name | STRING | نام موضوع |
threads.queue_name | STRING | (فقط برنامه های اپل) صف که موضوع در حال اجرا بود |
threads.signal_name | STRING | نام سیگنالی که باعث خراب شدن برنامه شد ، فقط در موضوعات بومی خراب شده وجود دارد |
threads.signal_code | STRING | کد سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.crash_address | int64 | آدرس سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.code | int64 | (فقط برنامه های اپل) کد خطای NSERROR ثبت شده برنامه کاربردی برنامه |
threads.title | STRING | عنوان موضوع |
threads.subtitle | STRING | زیرنویس موضوع |
threads.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
threads.frames | سابقه مکرر | قاب های نخ |
threads.frames.line | int64 | شماره خط پرونده قاب |
threads.frames.file | STRING | نام پرونده قاب |
threads.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم درمان |
threads.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است |
threads.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است |
threads.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
threads.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
threads.frames.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
unity_metadata.unity_version | STRING | نسخه وحدت در این دستگاه اجرا می شود |
unity_metadata.debug_build | بولی | اگر این یک ساخت اشکال است |
unity_metadata.processor_type | STRING | نوع پردازنده |
unity_metadata.processor_count | int64 | تعداد پردازنده ها (هسته) |
unity_metadata.processor_frequency_mhz | int64 | فراوانی پردازنده (ها) در MHz |
unity_metadata.system_memory_size_mb | int64 | اندازه حافظه سیستم در MB |
unity_metadata.graphics_memory_size_mb | int64 | حافظه گرافیکی در MB |
unity_metadata.graphics_device_id | int64 | شناسه دستگاه گرافیکی |
unity_metadata.graphics_device_vendor_id | int64 | شناسه فروشنده پردازنده گرافیک |
unity_metadata.graphics_device_name | STRING | نام دستگاه گرافیکی |
unity_metadata.graphics_device_vendor | STRING | فروشنده دستگاه گرافیک |
unity_metadata.graphics_device_version | STRING | نسخه دستگاه گرافیکی |
unity_metadata.graphics_device_type | STRING | نوع دستگاه گرافیک |
unity_metadata.graphics_shader_level | int64 | سطح سایه بان گرافیک |
unity_metadata.graphics_render_target_count | int64 | تعداد اهداف ارائه گرافیکی |
unity_metadata.graphics_copy_texture_support | STRING | پشتیبانی از کپی کردن بافت گرافیکی همانطور که در API وحدت تعریف شده است |
unity_metadata.graphics_max_texture_size | int64 | حداکثر اندازه اختصاص یافته به ارائه بافت |
unity_metadata.screen_size_px | STRING | اندازه صفحه نمایش در پیکسل ها ، به عنوان عرض x ارتفاع فرمت شده است |
unity_metadata.screen_resolution_dpi | STRING | DPI صفحه به عنوان یک شماره نقطه شناور |
unity_metadata.screen_refresh_rate_hz | int64 | نرخ تازه کردن صفحه در هرتز |
داده های Crashlytics صادر شده را با Data Studio تجسم کنید
Google Data Studio مجموعه داده های Crashlytics شما را در BigQuery به گزارش هایی تبدیل می کند که خواندن آن آسانتر ، آسانتر برای اشتراک و کاملاً قابل تنظیم است.
برای کسب اطلاعات بیشتر در مورد استفاده از Data Studio ، راهنمای Data Studio QuickStart را امتحان کنید ، به Data Studio خوش آمدید .
از الگوی گزارش Crashlytics استفاده کنید
Data Studio دارای یک گزارش نمونه برای Crashlytics است که شامل مجموعه ای جامع از ابعاد و معیارها از طرحواره BigQuery Crashlytics صادر شده است. اگر صادر کردن جریان Crashlytics به BigQuery را فعال کرده اید ، می توانید آن داده ها را در صفحه روندهای واقعی الگوی استودیو داده مشاهده کنید. شما می توانید از نمونه به عنوان یک الگوی استفاده کنید تا به سرعت گزارش ها و تجسم های جدید را بر اساس داده های خرابی خام برنامه خود ایجاد کنید. :
الگوی داشبورد استودیوی Crashlytics Data را باز کنید.
روی استفاده از الگو در گوشه بالا سمت راست کلیک کنید.
در پایین آمدن منبع داده جدید ، ایجاد منبع داده جدید را انتخاب کنید.
روی انتخاب روی کارت BigQuery کلیک کنید.
با انتخاب پروژه های من> PROJECT_ID > firebase_crashlytics> TABLE_NAME ، جدول حاوی داده های صادر شده Crashlytics انتخاب کنید.
جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر Crashlytics جریان صادرات به BigQuery فعال است ، می توانید به جای آن جدول Realtime خود را انتخاب کنید.
تحت پیکربندی ، سطح الگوی Crashlytics به طور پیش فرض تنظیم کنید.
برای ایجاد منبع داده جدید ، روی اتصال کلیک کنید.
برای بازگشت به الگوی Crashlytics ، روی افزودن کلیک کنید.
در آخر ، برای ایجاد نسخه خود از الگوی داشبورد استودیوی Crashlytics Data Studio ، روی ایجاد گزارش کلیک کنید.
برای تجزیه و تحلیل بیشتر می توانید داده های Firebase Crashlytics خود را به BigQuery صادر کنید. BigQuery به شما امکان می دهد داده ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید ، آن را به یک ارائه دهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبورد های سفارشی با Google Data Studio استفاده کنید.
صادرات به BigQuery را فعال کنید
- در کنسول Firebase به صفحه ادغام بروید.
- در کارت BigQuery ، روی پیوند کلیک کنید.
- برای فعال کردن صادرات به BigQuery ، دستورالعمل های روی صفحه را دنبال کنید.
در اینجا چه اتفاقی می افتد وقتی که صادرات به BigQuery را فعال می کنید:
به طور پیش فرض ، تمام برنامه های پروژه شما به BigQuery مرتبط هستند و هر برنامه ای که بعداً به پروژه اضافه می کنید به طور خودکار با BigQuery مرتبط می شوند. شما می توانید مدیریت کنید که برنامه ها داده ها را ارسال می کنند .
Firebase همگام سازی روزانه داده های شما را از پروژه Firebase خود تا BigQuery تنظیم می کند.
Firebase نسخه ای از داده های موجود خود را به BigQuery صادر می کند. برای هر برنامه مرتبط ، این شامل یک جدول دسته ای است که حاوی داده های مربوط به همگام سازی روزانه است.
اگر صادرات جریان Crashlytics را به BigQuery فعال کنید ، تمام برنامه های مرتبط نیز دارای یک جدول زمان واقعی هستند که حاوی داده های دائماً به روز می شود.
برای غیرفعال کردن صادرات به 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 Export به BigQuery
می توانید داده های Crashlytics خود را در زمان واقعی با پخش BigQuery پخش کنید. شما می توانید از آن برای هر منظور که به داده های زنده نیاز داشته باشد ، مانند ارائه اطلاعات در داشبورد زنده ، تماشای یک برنامه زنده یا نظارت بر مشکلات برنامه که باعث هشدار و گردش کار سفارشی می شود ، استفاده کنید.
هنگامی که Crashlytics BigQuery فعال کنید ، علاوه بر جدول دسته ای ، یک جدول Realtime نیز خواهید داشت. در اینجا تفاوت هایی که باید از آن آگاه باشید بین جداول وجود دارد:
میز دسته | جدول زمان واقعی |
---|---|
|
|
جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است زیرا ما به طور دوام قبل از نوشتن آنها رویدادها را ذخیره می کنیم و می توان آنها را تا 30 روز به جدول بازگرداند. وقتی داده ها را به جدول زمان واقعی شما می نویسیم ، بلافاصله آن را برای BigQuery می نویسیم ، بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک پرس و جو دوخت ترکیب کرد تا مزایای هر دو را بدست آورد.
به طور پیش فرض ، جدول Realtime دارای مدت زمان انقضا 30 روز است. برای یادگیری نحوه اصلاح این موضوع ، به تنظیم انقضا پارتیشن در مستندات BigQuery مراجعه کنید.
پخش جریان Crashlytics را به BigQuery فعال کنید
- در کنسول Firebase به صفحه ادغام بروید.
- در کارت BigQuery ، روی مدیریت کلیک کنید.
- کادر انتخاب شامل جریان را انتخاب کنید.
این عمل امکان پخش همه برنامه های مرتبط شما را فراهم می کند.
با داده های صادر شده چه کاری می توانید انجام دهید؟
صادرات به BigQuery حاوی داده های خرابی خام از جمله نوع دستگاه ، سیستم عامل ، استثنائات (برنامه های Android) یا خطاها (برنامه های اپل) و گزارش های Crashlytics و سایر داده ها است.
دقیقاً آنچه را که داده های Crashlytics صادر شده و جدول جدول آن بعداً در این صفحه بررسی کنید.
از یک الگوی استودیوی داده استفاده کنید
برای فعال کردن داده های Realtime در الگوی استودیوی داده خود ، دستورالعمل های تجسم داده های صادر شده Crashlytics را با Data Studio دنبال کنید.
نمای ایجاد کنید
می توانید با استفاده از UI 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 دستگاه بالای تصادف
پاییز فصل جدید تلفن است! شرکت شما می داند که این همچنین به این معنی است که فصل جدید مشکلات خاص دستگاه است-به خصوص برای اندروید. برای پیشروی از نگرانی های سازگاری فراگیر ، شما یک پرس و جو را در کنار هم قرار داده اید که 10 دستگاهی را که بیشترین تصادفات را در هفته گذشته (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
را تنظیم کرده اید و هر بار که کاربر به سطح جدیدی برسد ، آن را به روز می کنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-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: همه کاربران را که با مشکل تصادف خاصی روبرو هستند پیدا کنید
تیم شما به طور اتفاقی یک اشکال مهم را برای گروهی از آزمایش کنندگان بتا منتشر کرده است. تیم شما برای شناسایی شناسه مسئله تصادف خاص قادر به استفاده از پرس و جو از مثال "پیدا کردن بیشترین تصادفات فراگیر" در بالا بود. اکنون تیم شما دوست دارد یک پرس و جو برای استخراج لیست کاربران برنامه ای که تحت تأثیر این تصادف قرار گرفته اند ، اجرا کنند.
در اینجا یک نمونه پرس و جو برای یک برنامه 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 را ببینید.
برنامه خود را به روز کنید تا یک شناسه کاربر را به Google Analytics SDK و Crashlytics SDK منتقل کنید.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
هدف-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
استفاده کنید تا هر یک از رویدادهای مشترک را از دو جدول Dedupe کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه 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
قرار دارد و داده های Realtime (در صورت فعال بودن) در جدول به نام com_google_test_ANDROID_REALTIME
قرار می گیرند.
جداول علاوه بر هرگونه کلیدهای Crashlytics سفارشی که توسط شما در برنامه خود تعریف شده است ، مجموعه استاندارد از داده های Crashlytics را شامل می شود.
ردیف
هر ردیف در یک جدول خطایی را که برنامه با آن روبرو است نشان می دهد.
ستون ها
ستون های یک جدول برای تصادفات ، خطاهای غیر کشنده و ANR یکسان هستند. اگر صادرات جریان Crashlytics به BigQuery فعال شود ، جدول Realtime دارای ستون های مشابه جدول دسته ای خواهد بود. توجه داشته باشید که ممکن است ستون هایی در ردیف داشته باشید که نمایانگر رویدادهایی هستند که اثری از پشته ندارند.
ستون های موجود در صادرات در این جدول ذکر شده است:
نام فیلد | نوع داده | توضیحات |
---|---|---|
platform | STRING | بستر برنامه به عنوان ثبت شده در پروژه Firebase (مقادیر معتبر: IOS یا ANDROID ) |
bundle_identifier | STRING | شناسه منحصر به فرد برای برنامه به عنوان ثبت شده در پروژه Firebase (به عنوان مثال ،com.google.gmail )برای برنامه های Apple Platform ، این شناسه بسته برنامه است. برای برنامه های Android ، این نام بسته برنامه است. |
event_id | STRING | شناسه منحصر به فرد برای این رویداد |
is_fatal | بولی | آیا برنامه خراب شده است |
error_type | رشته | نوع خطای رویداد (به عنوان مثال ، FATAL ، NON_FATAL ، ANR و غیره) |
issue_id | رشته | مسئله مرتبط با این رویداد |
variant_id | رشته | نوع مسئله مرتبط با این رویداد توجه داشته باشید که همه رویدادها یک نوع مسئله مرتبط ندارند. |
event_timestamp | 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 | رشته | آیا دستگاه اصلاح شده است (به عنوان مثال ، یک برنامه Jailbroken MODIFIED و یک برنامه ریشه دار UNMODIFIED است) |
operating_system.type | رشته | (فقط برنامه های اپل) نوع سیستم عامل در حال اجرا بر روی دستگاه (به عنوان مثال ، 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 | سابقه مکرر | پیام های ورود به سیستم Timestamped تولید شده توسط گزارش Crashlytics ، در صورت فعال کردن |
logs.timestamp | TIMESTAMP | وقتی ورود به سیستم ساخته شد |
logs.message | رشته | پیام وارد شده |
breadcrumbs | سابقه مکرر | در صورت فعال بودن ، نان آنالیز Google Analytics |
breadcrumbs.timestamp | TIMESTAMP | 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 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
blame_frame.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
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 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
exceptions.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
exceptions.frames.library | رشته | نام نمایشگر کتابخانه که شامل قاب است |
exceptions.frames.owner | رشته | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
exceptions.frames.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
error | سابقه مکرر | (فقط برنامه های اپل) خطاهای غیر کشنده |
error.queue_name | رشته | صف که نخ در حال اجرا بود |
error.code | int64 | کد خطا مرتبط با NSERROR ورود به سیستم سفارشی برنامه |
error.title | رشته | عنوان موضوع |
error.subtitle | رشته | زیرنویس موضوع |
error.blamed | بولی | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
error.frames | سابقه مکرر | قاب های StackTrace |
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 | رشته | (فقط برنامه های اپل) صف که موضوع در حال اجرا بود |
threads.signal_name | رشته | نام سیگنالی که باعث خراب شدن برنامه شد ، فقط در موضوعات بومی خراب شده وجود دارد |
threads.signal_code | رشته | کد سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.crash_address | int64 | آدرس سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.code | int64 | (فقط برنامه های اپل) کد خطای 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_metadata.debug_build | بولی | اگر این یک ساخت اشکال است |
unity_metadata.processor_type | رشته | نوع پردازنده |
unity_metadata.processor_count | int64 | تعداد پردازنده ها (هسته) |
unity_metadata.processor_frequency_mhz | int64 | فراوانی پردازنده (ها) در MHz |
unity_metadata.system_memory_size_mb | int64 | اندازه حافظه سیستم در MB |
unity_metadata.graphics_memory_size_mb | int64 | حافظه گرافیکی در MB |
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 | رشته | پشتیبانی از کپی کردن بافت گرافیکی همانطور که در API وحدت تعریف شده است |
unity_metadata.graphics_max_texture_size | int64 | حداکثر اندازه اختصاص یافته به ارائه بافت |
unity_metadata.screen_size_px | رشته | اندازه صفحه نمایش در پیکسل ها ، به عنوان عرض x ارتفاع فرمت شده است |
unity_metadata.screen_resolution_dpi | رشته | DPI صفحه به عنوان یک شماره نقطه شناور |
unity_metadata.screen_refresh_rate_hz | int64 | نرخ تازه کردن صفحه در هرتز |
داده های Crashlytics صادر شده را با Data Studio تجسم کنید
Google Data Studio مجموعه داده های Crashlytics شما را در BigQuery به گزارش هایی تبدیل می کند که خواندن آن آسانتر ، آسانتر برای اشتراک و کاملاً قابل تنظیم است.
برای کسب اطلاعات بیشتر در مورد استفاده از Data Studio ، راهنمای Data Studio QuickStart را امتحان کنید ، به Data Studio خوش آمدید .
از الگوی گزارش Crashlytics استفاده کنید
Data Studio دارای یک گزارش نمونه برای Crashlytics است که شامل مجموعه ای جامع از ابعاد و معیارها از طرحواره BigQuery Crashlytics صادر شده است. اگر صادر کردن جریان Crashlytics به BigQuery را فعال کرده اید ، می توانید آن داده ها را در صفحه روندهای واقعی الگوی استودیو داده مشاهده کنید. شما می توانید از نمونه به عنوان یک الگوی استفاده کنید تا به سرعت گزارش ها و تجسم های جدید را بر اساس داده های خرابی خام برنامه خود ایجاد کنید. :
الگوی داشبورد استودیوی Crashlytics Data را باز کنید.
روی استفاده از الگو در گوشه بالا سمت راست کلیک کنید.
در پایین آمدن منبع داده جدید ، ایجاد منبع داده جدید را انتخاب کنید.
روی انتخاب روی کارت BigQuery کلیک کنید.
با انتخاب پروژه های من> PROJECT_ID > firebase_crashlytics> TABLE_NAME ، جدول حاوی داده های صادر شده Crashlytics انتخاب کنید.
جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر Crashlytics جریان صادرات به BigQuery فعال است ، می توانید به جای آن جدول Realtime خود را انتخاب کنید.
تحت پیکربندی ، سطح الگوی Crashlytics به طور پیش فرض تنظیم کنید.
برای ایجاد منبع داده جدید ، روی اتصال کلیک کنید.
برای بازگشت به الگوی Crashlytics ، روی افزودن کلیک کنید.
در آخر ، برای ایجاد نسخه خود از الگوی داشبورد استودیوی Crashlytics Data Studio ، روی ایجاد گزارش کلیک کنید.