داده های Firebase Crashlytics را به BigQuery صادر کنید

می توانید داده های Firebase Crashlytics خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان می‌دهد داده‌ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آن‌ها را به یک ارائه‌دهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبوردهای سفارشی با Google Data Studio استفاده کنید.

صادرات به BigQuery را فعال کنید

  1. در کنسول Firebase ، به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی پیوند کلیک کنید.
  3. دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.

وقتی صادرات به 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 را فعال می‌کنید، علاوه بر جدول دسته‌ای، یک جدول بیدرنگ نیز خواهید داشت. در اینجا تفاوت هایی وجود دارد که باید بین جداول از آنها آگاه باشید:

میز دسته ای جدول بیدرنگ
  • اطلاعات یک بار در روز صادر می شود.
  • رویدادها قبل از نوشتن دسته ای در BigQuery به طور پایدار ذخیره می شوند.
  • داده ها را می توان تا 30 روز قبل پر کرد .
  • داده ها در زمان واقعی صادر می شوند.
  • هیچ گونه پس‌پری در دسترس نیست.

جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است، زیرا ما رویدادها را قبل از نوشتن آنها به طور بادوام ذخیره می کنیم و می توان آنها را تا 30 روز روی جدول پر کرد. وقتی داده ها را در جدول بیدرنگ شما می نویسیم، بلافاصله آن را در BigQuery می نویسیم و بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک کوئری دوخت ترکیب کرد تا از مزایای هر دو بهره مند شود.

به‌طور پیش‌فرض، جدول Realtime زمان انقضای پارتیشن 30 روزه دارد. برای یادگیری نحوه تغییر این، به تنظیم انقضای پارتیشن در مستندات BigQuery مراجعه کنید.

صادرات جریان Crashlytics به BigQuery را فعال کنید

  1. در کنسول Firebase ، به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی مدیریت کلیک کنید.
  3. چک باکس 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: تعداد کاربرانی که تحت تأثیر یک مشکل خرابی قرار گرفته اند، به تفکیک کشور

تیم شما در طول عرضه نسخه جدید یک اشکال مهم را شناسایی کرده است. می‌توانید از عبارت «یافتن بیشترین خرابی‌ها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. تیم شما اکنون می‌خواهد ببیند که آیا این خرابی به کاربران کشورهای مختلف در سراسر جهان سرایت کرده است یا خیر.

برای نوشتن این پرس و جو، تیم شما باید موارد زیر را انجام دهد:

  1. صادرات داده های Google Analytics به BigQuery را فعال کنید. صادرات داده های پروژه به BigQuery را ببینید.

  2. برنامه خود را به‌روزرسانی کنید تا شناسه کاربری را هم به 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");
    
  3. درخواستی بنویسید که از فیلد شناسه کاربر برای پیوستن به رویدادهای مجموعه داده 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 مشاهده کنید. می‌توانید از نمونه به عنوان الگو برای ایجاد سریع گزارش‌ها و تجسم‌های جدید بر اساس داده‌های خرابی خام برنامه خود استفاده کنید. :

  1. قالب داشبورد Crashlytics Data Studio را باز کنید.

  2. روی Use Template در گوشه سمت راست بالا کلیک کنید.

  3. در منوی کشویی New Data Source ، Create New Data Source را انتخاب کنید.

  4. در کارت BigQuery روی Select کلیک کنید.

  5. با انتخاب پروژه‌های من > PROJECT_ID > firebase_crashlytics > TABLE_NAME ، جدولی حاوی داده‌های Crashlytics صادر شده را انتخاب کنید.

    جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، می‌توانید به جای آن جدول بیدرنگ خود را انتخاب کنید.

  6. در قسمت پیکربندی ، سطح الگوی Crashlytics را روی پیش‌فرض تنظیم کنید.

  7. برای ایجاد منبع داده جدید روی Connect کلیک کنید.

  8. برای بازگشت به الگوی Crashlytics روی افزودن به گزارش کلیک کنید.

  9. در نهایت روی Create Report کلیک کنید تا یک کپی از الگوی Crashlytics Data Studio Dashboard ایجاد شود.

،

می توانید داده های Firebase Crashlytics خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان می‌دهد داده‌ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آن‌ها را به یک ارائه‌دهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبوردهای سفارشی با Google Data Studio استفاده کنید.

صادرات به BigQuery را فعال کنید

  1. در کنسول Firebase ، به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی پیوند کلیک کنید.
  3. دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.

وقتی صادرات به 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 را فعال می‌کنید، علاوه بر جدول دسته‌ای، یک جدول بیدرنگ نیز خواهید داشت. در اینجا تفاوت هایی وجود دارد که باید بین جداول از آنها آگاه باشید:

میز دسته ای جدول بیدرنگ
  • اطلاعات یک بار در روز صادر می شود.
  • رویدادها قبل از نوشتن دسته ای در BigQuery به طور پایدار ذخیره می شوند.
  • داده ها را می توان تا 30 روز قبل پر کرد .
  • داده ها در زمان واقعی صادر می شوند.
  • هیچ گونه پس‌پری در دسترس نیست.

جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است، زیرا ما رویدادها را قبل از نوشتن آنها به طور بادوام ذخیره می کنیم و می توان آنها را تا 30 روز روی جدول پر کرد. وقتی داده ها را در جدول بیدرنگ شما می نویسیم، بلافاصله آن را در BigQuery می نویسیم و بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک کوئری دوخت ترکیب کرد تا از مزایای هر دو بهره مند شود.

به‌طور پیش‌فرض، جدول Realtime زمان انقضای پارتیشن 30 روزه دارد. برای یادگیری نحوه تغییر این، به تنظیم انقضای پارتیشن در مستندات BigQuery مراجعه کنید.

صادرات جریان Crashlytics به BigQuery را فعال کنید

  1. در کنسول Firebase ، به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی مدیریت کلیک کنید.
  3. چک باکس 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: تعداد کاربرانی که تحت تأثیر یک مشکل خرابی قرار گرفته اند، به تفکیک کشور

تیم شما در طول عرضه نسخه جدید یک اشکال مهم را شناسایی کرده است. می‌توانید از عبارت «یافتن بیشترین خرابی‌ها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. تیم شما اکنون می‌خواهد ببیند که آیا این خرابی به کاربران کشورهای مختلف در سراسر جهان سرایت کرده است یا خیر.

برای نوشتن این پرس و جو، تیم شما باید موارد زیر را انجام دهد:

  1. صادرات داده های Google Analytics به BigQuery را فعال کنید. صادرات داده های پروژه به BigQuery را ببینید.

  2. برنامه خود را به‌روزرسانی کنید تا شناسه کاربری را هم به 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");
    
  3. درخواستی بنویسید که از فیلد شناسه کاربر برای پیوستن به رویدادهای مجموعه داده 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 را فعال کرده اید ، می توانید آن داده ها را در صفحه روندهای واقعی الگوی استودیو داده مشاهده کنید. شما می توانید از نمونه به عنوان یک الگوی استفاده کنید تا به سرعت گزارش ها و تجسم های جدید را بر اساس داده های خرابی خام برنامه خود ایجاد کنید. :

  1. الگوی داشبورد استودیوی Crashlytics Data را باز کنید.

  2. روی استفاده از الگو در گوشه بالا سمت راست کلیک کنید.

  3. در پایین آمدن منبع داده جدید ، ایجاد منبع داده جدید را انتخاب کنید.

  4. روی انتخاب روی کارت BigQuery کلیک کنید.

  5. با انتخاب پروژه های من> PROJECT_ID > firebase_crashlytics> TABLE_NAME ، جدول حاوی داده های صادر شده Crashlytics انتخاب کنید.

    جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر Crashlytics جریان صادرات به BigQuery فعال است ، می توانید به جای آن جدول Realtime خود را انتخاب کنید.

  6. تحت پیکربندی ، سطح الگوی Crashlytics به طور پیش فرض تنظیم کنید.

  7. برای ایجاد منبع داده جدید ، روی اتصال کلیک کنید.

  8. برای بازگشت به الگوی Crashlytics ، روی افزودن کلیک کنید.

  9. در آخر ، برای ایجاد نسخه خود از الگوی داشبورد استودیوی Crashlytics Data Studio ، روی ایجاد گزارش کلیک کنید.

،

برای تجزیه و تحلیل بیشتر می توانید داده های Firebase Crashlytics خود را به BigQuery صادر کنید. BigQuery به شما امکان می دهد داده ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید ، آن را به یک ارائه دهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبورد های سفارشی با Google Data Studio استفاده کنید.

صادرات به BigQuery را فعال کنید

  1. در کنسول Firebase به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی پیوند کلیک کنید.
  3. برای فعال کردن صادرات به BigQuery ، دستورالعمل های روی صفحه را دنبال کنید.

در اینجا چه اتفاقی می افتد وقتی که صادرات به 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 نیز خواهید داشت. در اینجا تفاوت هایی که باید از آن آگاه باشید بین جداول وجود دارد:

میز دسته جدول زمان واقعی
  • داده ها روزانه یک بار صادر می شوند.
  • رویدادها قبل از نوشتن دسته ای به BigQuery به طور قابل توجهی ذخیره می شوند.
  • داده ها را می توان تا 30 روز قبل از آن بازگرداند .
  • داده ها در زمان واقعی صادر می شوند.
  • بدون استفاده از عقب در دسترس نیست.

جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است زیرا ما به طور دوام قبل از نوشتن آنها رویدادها را ذخیره می کنیم و می توان آنها را تا 30 روز به جدول بازگرداند. وقتی داده ها را به جدول زمان واقعی شما می نویسیم ، بلافاصله آن را برای BigQuery می نویسیم ، بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک پرس و جو دوخت ترکیب کرد تا مزایای هر دو را بدست آورد.

به طور پیش فرض ، جدول Realtime دارای مدت زمان انقضا 30 روز است. برای یادگیری نحوه اصلاح این موضوع ، به تنظیم انقضا پارتیشن در مستندات BigQuery مراجعه کنید.

پخش جریان Crashlytics را به BigQuery فعال کنید

  1. در کنسول Firebase به صفحه ادغام بروید.
  2. در کارت BigQuery ، روی مدیریت کلیک کنید.
  3. کادر انتخاب شامل جریان را انتخاب کنید.

این عمل امکان پخش همه برنامه های مرتبط شما را فراهم می کند.

با داده های صادر شده چه کاری می توانید انجام دهید؟

صادرات به 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: تعداد کاربرانی که تحت تأثیر یک مسئله تصادف قرار گرفته اند ، توسط کشور تقسیم شده اند

تیم شما در هنگام انتشار نسخه جدید یک اشکال مهم را تشخیص داده است. شما قادر به استفاده از پرس و جو از مثال "پیدا کردن بیشترین تصادفات فراگیر" در بالا برای شناسایی شناسه مسئله تصادف خاص هستید. تیم شما اکنون دوست دارد ببیند که آیا این تصادف در کشورهای مختلف جهان به کاربران گسترش یافته است یا خیر.

برای نوشتن این پرس و جو ، تیم شما باید موارد زیر را انجام دهد:

  1. صادرات داده های Google Analytics را به BigQuery فعال کنید. داده های پروژه صادرات به BigQuery را ببینید.

  2. برنامه خود را به روز کنید تا یک شناسه کاربر را به 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");
    
  3. یک پرس و جو بنویسید که از قسمت شناسه کاربر برای پیوستن به رویدادها در مجموعه داده های Google Analytics با خرابی در مجموعه داده های Crashlytics استفاده می کند.

    در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS خود (به جای نام بسته و ANDROID ) استفاده کنید.

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

مثال 8: امروز 5 شماره برتر امروز

در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS خود (به جای نام بسته و ANDROID ) استفاده کنید.

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

مثال 9: 5 شماره برتر از تاریخ ، از جمله امروز

همچنین می توانید جداول دسته و زمان واقعی را با یک پرس و جو دوخت ترکیب کنید تا اطلاعات زمان واقعی را به داده های دسته ای قابل اعتماد اضافه کنید. از آنجا که event_id یک کلید اصلی است ، می توانید DISTINCT event_id استفاده کنید تا هر یک از رویدادهای مشترک را از دو جدول 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 را فعال کرده اید ، می توانید آن داده ها را در صفحه روندهای واقعی الگوی استودیو داده مشاهده کنید. شما می توانید از نمونه به عنوان یک الگوی استفاده کنید تا به سرعت گزارش ها و تجسم های جدید را بر اساس داده های خرابی خام برنامه خود ایجاد کنید. :

  1. الگوی داشبورد استودیوی Crashlytics Data را باز کنید.

  2. روی استفاده از الگو در گوشه بالا سمت راست کلیک کنید.

  3. در پایین آمدن منبع داده جدید ، ایجاد منبع داده جدید را انتخاب کنید.

  4. روی انتخاب روی کارت BigQuery کلیک کنید.

  5. با انتخاب پروژه های من> PROJECT_ID > firebase_crashlytics> TABLE_NAME ، جدول حاوی داده های صادر شده Crashlytics انتخاب کنید.

    جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر Crashlytics جریان صادرات به BigQuery فعال است ، می توانید به جای آن جدول Realtime خود را انتخاب کنید.

  6. تحت پیکربندی ، سطح الگوی Crashlytics به طور پیش فرض تنظیم کنید.

  7. برای ایجاد منبع داده جدید ، روی اتصال کلیک کنید.

  8. برای بازگشت به الگوی Crashlytics ، روی افزودن کلیک کنید.

  9. در آخر ، برای ایجاد نسخه خود از الگوی داشبورد استودیوی Crashlytics Data Studio ، روی ایجاد گزارش کلیک کنید.