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

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

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

  1. در کنسول Firebase ، به صفحه ادغام بروید.

  2. در کارت BigQuery ، روی پیوند کلیک کنید.

  3. دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.

    اگر می‌خواهید تقریباً به داده‌های Crashlytics خود در BigQuery دسترسی بی‌درنگ داشته باشید، پس ارتقاء را به صادرات جریانی در نظر بگیرید.

وقتی صادرات را فعال می کنید چه اتفاقی می افتد؟

  • شما مکان مجموعه داده را انتخاب می کنید. پس از ایجاد مجموعه داده، مکان را نمی توان تغییر داد، اما می توانید مجموعه داده را در مکان دیگری کپی کنید یا به صورت دستی مجموعه داده را در مکان دیگری منتقل کنید (بازآفرینی کنید). برای کسب اطلاعات بیشتر، به تغییر مکان برای صادرات موجود مراجعه کنید.

    این مکان فقط برای داده‌های صادر شده به BigQuery قابل اجرا است و بر مکان داده‌های ذخیره‌شده برای استفاده در داشبورد Crashlytics کنسول Firebase یا در Android Studio تأثیری نمی‌گذارد.

  • به‌طور پیش‌فرض، همه برنامه‌های پروژه شما به BigQuery مرتبط می‌شوند و هر برنامه‌ای که بعداً به پروژه اضافه می‌کنید به‌طور خودکار به BigQuery مرتبط می‌شود. می‌توانید مدیریت کنید که کدام برنامه‌ها داده‌ها را ارسال می‌کنند .

  • Firebase همگام‌سازی روزانه داده‌های شما را با BigQuery تنظیم می‌کند.

    • پس از اینکه پروژه خود را پیوند دادید، معمولاً باید منتظر بمانید تا روز بعد همگام سازی شود تا اولین مجموعه داده شما به BigQuery صادر شود.

    • همگام‌سازی روزانه یک‌بار در روز انجام می‌شود، صرف‌نظر از صادرات برنامه‌ریزی‌شده‌ای که ممکن است در BigQuery تنظیم کرده باشید. توجه داشته باشید که زمان و مدت زمان کار همگام‌سازی می‌تواند تغییر کند، بنابراین ما برنامه‌ریزی عملیات پایین دستی یا کارهای بر اساس زمان‌بندی خاص صادرات را توصیه نمی‌کنیم.

  • Firebase یک کپی از داده های موجود شما را به BigQuery صادر می کند. انتشار اولیه داده ها برای صادرات ممکن است تا 48 ساعت طول بکشد.

    • برای هر برنامه پیوند داده شده، این صادرات شامل یک جدول دسته‌ای است که حاوی داده‌های همگام‌سازی روزانه است.

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

    توجه داشته باشید که اگر صادرات داده‌های Crashlytics را قبل از اواسط اکتبر 2024 فعال کرده باشید، می‌توانید 30 روز قبل از روزی که صادرات را فعال کرده‌اید پر کنید.

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

میز دسته ای جدول بیدرنگ
  • اطلاعات یک بار در روز صادر می شود.
  • رویدادها قبل از نوشتن دسته ای در 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 ایجاد شود.

ارتقاء به زیرساخت جدید صادرات

در اواسط اکتبر 2024، Crashlytics زیرساخت جدیدی را برای صادرات داده های Crashlytics به BigQuery راه اندازی کرد. در حال حاضر، ارتقاء به این زیرساخت جدید اختیاری است.

این زیرساخت جدید از مکان های داده Crashlytics در خارج از ایالات متحده پشتیبانی می کند.

  • اگر صادرات را قبل از اواسط اکتبر 2024 فعال کرده باشید، اکنون می توانید به صورت اختیاری مکان را برای صادر کردن داده ها به هر مکان مجموعه داده پشتیبانی شده با BigQuery تغییر دهید.

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

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

پیش نیاز ارتقاء

قبل از ارتقاء به زیرساخت جدید، تأیید کنید که پیش نیاز زیر را دارید: جداول دسته‌ای BigQuery فعلی شما دارای شناسه‌های منطبق با شناسه‌های بسته یا نام بسته تنظیم‌شده برای برنامه‌های Firebase ثبت‌شده شما هستند.

به عنوان مثال:

  • اگر یک جدول BigQuery به نام com_yourcompany_yourproject_IOS دارید، باید یک برنامه Firebase iOS+ با شناسه بسته com.yourcompany.yourproject در پروژه Firebase خود ثبت شده باشد.

  • اگر یک جدول BigQuery به نام com_yourcompany_yourproject_ANDROID دارید، باید یک برنامه Android Firebase با نام بسته com.yourcompany.yourproject در پروژه Firebase خود ثبت شده باشد.

در اینجا نحوه یافتن همه برنامه های Firebase ثبت شده در پروژه Firebase آمده است:

  1. در کنسول Firebase ، به خود، تنظیمات پروژه بروید.

  2. به سمت پایین به کارت برنامه های شما بروید، سپس روی برنامه Firebase مورد نظر کلیک کنید تا اطلاعات برنامه، از جمله شناسه آن را مشاهده کنید.

زیرساخت صادرات جدید، داده های هر برنامه را بر اساس نام بسته یا شناسه بسته تنظیم شده برای برنامه Firebase ثبت شده صادر می کند. برای اینکه گردش کار BigQuery شما مختل نشود، مهم است که مطمئن شوید جدول‌های دسته‌ای فعلی شما نام‌های صحیحی دارند تا زیرساخت جدید بتواند تمام داده‌های جدید را به جداول موجود اضافه کند. اگر نام‌های جدول دسته‌ای دارید که با برنامه‌های Firebase ثبت‌شده شما مطابقت ندارد ، اما همچنان می‌خواهید آن را ارتقا دهید، با پشتیبانی Firebase تماس بگیرید .

نحوه ارتقاء به زیرساخت جدید

اگر صادرات را قبلاً فعال کرده‌اید، می‌توانید به سادگی با غیرفعال کردن صادرات داده‌های Crashlytics و سپس فعال کردن مجدد آن در کنسول Firebase ، به زیرساخت جدید ارتقا دهید.

در اینجا مراحل دقیق وجود دارد:

  1. در کنسول Firebase ، به صفحه ادغام بروید.

  2. در کارت BigQuery ، روی مدیریت کلیک کنید.

  3. برای غیرفعال کردن صادرات، نوار لغزنده Crashlytics را خاموش کنید. وقتی از شما خواسته شد، تأیید کنید که می‌خواهید صادرات داده متوقف شود.

  4. بلافاصله نوار لغزنده Crashlytics را مجدداً روشن کنید تا صادرات مجدد فعال شود. وقتی از شما خواسته شد، تأیید کنید که می‌خواهید داده‌ها را صادر کنید.

    صادر کردن داده های Crashlytics شما به BigQuery اکنون از زیرساخت صادرات جدید استفاده می کند.