می توانید داده های Firebase Crashlytics خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان میدهد دادهها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آنها را به یک ارائهدهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبوردهای سفارشی با Looker Studio استفاده کنید.
با داده های صادر شده چه کاری می توانید انجام دهید؟
صادرات به BigQuery حاوی دادههای خرابی خام از جمله نوع دستگاه، سیستم عامل، استثناها (برنامههای Android) یا خطاها (برنامههای اپل) و گزارشهای Crashlytics و همچنین دادههای دیگر است. میتوانید دقیقاً چه دادههای Crashlytics صادر شده و طرح جدول آن را در ادامه این صفحه بررسی کنید.
در اینجا چند نمونه از کارهایی که می توانید با داده های Crashlytics صادر شده خود انجام دهید آورده شده است:
کوئری ها را اجرا کنید
میتوانید پرسوجوهایی را روی دادههای Crashlytics خود اجرا کنید تا گزارشهایی ایجاد کنید که دادههای رویداد خرابی را در خلاصههای قابل فهمتر جمعآوری میکند. از آنجایی که این نوع گزارشها در داشبورد Crashlytics کنسول Firebase در دسترس نیستند، میتوانند تجزیه و تحلیل و درک شما از دادههای خرابی را تکمیل کنند. بعداً در این صفحه، مجموعه ای از پرس و جوهای نمونه را پیدا کنید.از یک قالب Looker Studio استفاده کنید
Crashlytics یک الگوی از پیش ساخته Looker Studio برای تجسم داده های صادر شده شما ارائه می دهد.ایجاد نماها
با استفاده از رابط کاربری BigQuery ، می توانید یک "نما" ایجاد کنید که یک جدول مجازی است که توسط یک پرس و جوی SQL تعریف شده است. برای دستورالعمل های دقیق در مورد انواع مختلف نماها و نحوه ایجاد آنها، به مستندات BigQuery مراجعه کنید.
صادرات جریان Crashlytics به BigQuery
میتوانید دادههای Crashlytics خود را بهصورت همزمان با پخش جریانی BigQuery پخش کنید. میتوانید از آن برای هر هدفی که به دادههای زنده نیاز دارد، استفاده کنید، مانند ارائه اطلاعات در داشبورد زنده، تماشای پخش زنده، یا نظارت بر مشکلات برنامهای که هشدارها و گردشهای کاری سفارشی را ایجاد میکنند.
وقتی صادرات جریان Crashlytics به BigQuery را فعال میکنید، علاوه بر جدول دستهای، یک جدول بیدرنگ نیز خواهید داشت. در اینجا تفاوت هایی وجود دارد که باید بین جداول از آنها آگاه باشید:
میز دسته ای | جدول بیدرنگ |
---|---|
|
|
جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است، زیرا ما رویدادها را قبل از نوشتن آنها به طور بادوام ذخیره می کنیم و می توان آنها را تا 30 روز روی جدول پر کرد*. وقتی داده ها را در جدول بیدرنگ شما می نویسیم، بلافاصله آن را در BigQuery می نویسیم و بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک کوئری دوخت ترکیب کرد تا از مزایای هر دو بهره مند شود.
بهطور پیشفرض، جدول Realtime زمان انقضای پارتیشن 30 روزه دارد. برای یادگیری نحوه تغییر این، به تنظیم انقضای پارتیشن در مستندات BigQuery مراجعه کنید.
* جزئیات مربوط به پشتیبانی از پر کردن را در ارتقا به زیرساخت صادرات جدید مشاهده کنید.
صادرات به BigQuery را فعال کنید
در کنسول Firebase ، به صفحه ادغام بروید.
در کارت BigQuery ، روی پیوند کلیک کنید.
دستورالعمل های روی صفحه را دنبال کنید تا صادرات به BigQuery را فعال کنید.
اگر میخواهید تقریباً به دادههای Crashlytics خود در BigQuery دسترسی بیدرنگ داشته باشید، پس ارتقاء را به صادرات جریانی در نظر بگیرید.
صادرات جریان Crashlytics به BigQuery را فعال کنید
در کنسول Firebase ، به صفحه ادغام بروید.
در کارت BigQuery ، روی مدیریت کلیک کنید.
چک باکس Include streaming را انتخاب کنید.
این عملکرد پخش جریانی را برای همه برنامههای پیوند داده شده شما فعال میکند.
مطمئن شوید که حداقل دو رویداد از برنامه خود به Crashlytics ارسال کرده اید و پس از ارسال آنها چند دقیقه صبر کرده اید.
مطمئن شوید که پروژه Firebase شما در طرح قیمتگذاری Blaze است.
میتوانید با نگاه کردن به گوشه سمت چپ پایین کنسول Firebase این موضوع را بررسی کنید.اگر پس از ارسال دو رویداد و چند دقیقه انتظار، هنوز هیچ داده ای در جدول بیدرنگ شما وجود ندارد:
به کارت BigQuery در کنسول Firebase بروید.
غیرفعال کردن و سپس فعال کردن مجدد صادرات جریان.
از حساب سرویس مطمئن شوید
service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.com
در پروژه Firebase شما است و نقش Firebase Crashlytics Service Agent را دارد.
میتوانید این مورد را در صفحه IAM کنسول Google Cloud بررسی کنید (حتماً کادر انتخاب شامل کمکهای نقش ارائهشده توسط Google را انتخاب کنید).حداقل دو رویداد را به Crashlytics ارسال کنید و چند دقیقه صبر کنید.
اگر هنوز دادهها را در جدول بیدرنگ خود نمیبینید، با پشتیبانی Firebase تماس بگیرید .
وقتی صادرات را فعال می کنید چه اتفاقی می افتد؟
شما مکان مجموعه داده را انتخاب می کنید. پس از ایجاد مجموعه داده، مکان را نمی توان تغییر داد، اما می توانید مجموعه داده را در مکان دیگری کپی کنید یا به صورت دستی مجموعه داده را در مکان دیگری منتقل کنید (بازآفرینی کنید). برای کسب اطلاعات بیشتر، به تغییر مکان برای صادرات موجود مراجعه کنید.
این مکان فقط برای دادههای صادر شده به BigQuery قابل اجرا است و بر مکان دادههای ذخیرهشده برای استفاده در داشبورد Crashlytics کنسول Firebase یا در Android Studio تأثیری نمیگذارد.
بهطور پیشفرض، همه برنامههای پروژه شما به BigQuery مرتبط میشوند و هر برنامهای که بعداً به پروژه اضافه میکنید بهطور خودکار به BigQuery مرتبط میشود. میتوانید مدیریت کنید که کدام برنامهها دادهها را ارسال میکنند .
Firebase همگامسازی روزانه دادههای شما را با BigQuery تنظیم میکند.
پس از اینکه پروژه خود را پیوند دادید، معمولاً باید منتظر بمانید تا روز بعد همگام سازی شود تا اولین مجموعه داده شما به BigQuery صادر شود.
همگامسازی روزانه یکبار در روز انجام میشود، صرفنظر از صادرات برنامهریزیشدهای که ممکن است در BigQuery تنظیم کرده باشید. توجه داشته باشید که زمان و مدت زمان کار همگامسازی میتواند تغییر کند، بنابراین ما برنامهریزی عملیات پایین دستی یا کارهای بر اساس زمانبندی خاص صادرات را توصیه نمیکنیم.
Firebase یک کپی از داده های موجود شما را به BigQuery صادر می کند. انتشار اولیه داده ها برای صادرات ممکن است تا 48 ساعت طول بکشد.
برای هر برنامه پیوند داده شده، این صادرات شامل یک جدول دستهای است که حاوی دادههای همگامسازی روزانه است.
میتوانید بهصورت دستی پر کردن دادهها را برای جدول دستهای تا 30 روز گذشته یا برای آخرین تاریخی که صادرات به BigQuery را فعال کردهاید (هر کدام جدیدترین باشد) زمانبندی کنید.
توجه داشته باشید که اگر صادرات دادههای Crashlytics را قبل از اواسط اکتبر 2024 فعال کرده باشید، میتوانید 30 روز قبل از روزی که صادرات را فعال کردهاید پر کنید.
اگر صادرات جریان Crashlytics به BigQuery را فعال کنید، همه برنامههای پیوند داده شده نیز یک جدول بیدرنگ حاوی دادههایی که دائماً بهروزرسانی میشوند، خواهند داشت.
برای غیرفعال کردن صادرات به BigQuery ، پیوند پروژه خود را در کنسول Firebase لغو کنید.
پرس و جوهای نمونه
مثال 1: خرابی در روز
پس از تلاش برای رفع هر چه بیشتر باگهای ممکن، فکر میکنید تیم شما بالاخره آماده است تا برنامه جدید اشتراکگذاری عکس شما را راهاندازی کند. قبل از اینکه این کار را انجام دهید، میخواهید تعداد خرابیهای ماه گذشته در روز را بررسی کنید تا مطمئن شوید که bug-bash برنامه را در طول زمان پایدارتر کرده است.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
مثال 2: فراگیرترین خرابی ها را پیدا کنید
برای اولویتبندی صحیح برنامههای تولید، میخواهید 10 خرابی برتر را در برنامه خود پیدا کنید. شما یک پرس و جو تولید می کنید که نقاط مربوط به داده ها را ارائه می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
مثال 3: 10 دستگاه برتر خراب
پاییز فصل جدید گوشی است! شرکت شما میداند که این به این معنی است که فصل جدید مشکلات مربوط به دستگاه است - مخصوصاً برای Android. برای پیشی گرفتن از نگرانیهای احتمالی مربوط به سازگاری، پرس و جوی را جمعآوری میکنید که 10 دستگاهی را که بیشترین خرابیها را در هفته گذشته (168 ساعت) تجربه کردهاند، شناسایی میکند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
مثال 4: با کلید سفارشی فیلتر کنید
شما یک توسعه دهنده بازی هستید که می خواهید بدانید کدام سطح از بازی شما بیشترین خرابی ها را تجربه می کند.
برای کمک به ردیابی این آمار، یک کلید Crashlytics سفارشی به نام current_level
تنظیم میکنید و هر بار که کاربر به سطح جدیدی میرسد، آن را بهروزرسانی میکنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از آن کلید در صادرات خود به BigQuery ، سپس می توانید یک پرس و جو بنویسید تا توزیع مقادیر current_level
مرتبط با هر رویداد خرابی را گزارش کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESC
مثال 5: استخراج شناسه کاربری
شما یک برنامه اندروید در دسترسی اولیه دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر تعداد غیرعادی خرابی را تجربه کرده اند. برای رسیدن به ته مشکل، یک پرس و جو می نویسید که با استفاده از شناسه کاربری آن ها، تمام رویدادهای خرابی را برای آن کاربران نشان می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
مثال 6: همه کاربرانی که با مشکل خرابی خاصی مواجه هستند را پیدا کنید
تیم شما به طور تصادفی یک باگ مهم را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست از عبارت «یافتن بیشترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کند. اکنون تیم شما میخواهد برای استخراج لیستی از کاربران برنامه که تحت تأثیر این خرابی قرار گرفتهاند، پرس و جوی اجرا کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;
مثال 7: تعداد کاربرانی که تحت تأثیر یک مشکل خرابی قرار گرفته اند، به تفکیک کشور
تیم شما در طول عرضه نسخه جدید یک اشکال مهم را شناسایی کرده است. میتوانید از عبارت «یافتن بیشترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. تیم شما اکنون میخواهد ببیند که آیا این خرابی به کاربران کشورهای مختلف در سراسر جهان سرایت کرده است یا خیر.
برای نوشتن این پرس و جو، تیم شما باید موارد زیر را انجام دهد:
صادرات داده های Google Analytics به BigQuery را فعال کنید. صادرات داده های پروژه به BigQuery را ببینید.
برنامه خود را بهروزرسانی کنید تا شناسه کاربری را هم به Google Analytics SDK و هم در Crashlytics SDK ارسال کنید.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
هدف-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
درخواستی بنویسید که از فیلد شناسه کاربر برای پیوستن به رویدادهای مجموعه داده Google Analytics با خرابی در مجموعه داده Crashlytics استفاده کند.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و
IOS
آن (به جای نام بسته وANDROID
) استفاده کنید.SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
مثال 8: 5 موضوع برتر تا کنون امروز
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
مثال 9: 5 مورد برتر از DATE، از جمله امروز
شما همچنین می توانید جداول دسته ای و بیدرنگ را با یک جستجوی دوخت ترکیب کنید تا اطلاعات بیدرنگ را به داده های دسته ای قابل اعتماد اضافه کنید. از آنجایی که event_id
یک کلید اصلی است، میتوانید از DISTINCT event_id
برای حذف رویدادهای رایج از دو جدول استفاده کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه اندروید آمده است. برای یک برنامه iOS، از ID بسته و IOS
آن (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
داده های Crashlytics صادر شده را با Looker Studio تجسم کنید
Looker Studio مجموعه دادههای Crashlytics شما را در BigQuery به گزارشهایی تبدیل میکند که خواندن آسانتر، اشتراکگذاری آسانتر و کاملاً قابل تنظیم هستند.
برای کسب اطلاعات بیشتر در مورد استفاده از Looker Studio ، راهنمای خوش آمدگویی آنها را بررسی کنید.
از یک الگوی گزارش Crashlytics استفاده کنید
Looker Studio یک گزارش نمونه برای Crashlytics دارد که شامل مجموعهای جامع از ابعاد و معیارهای طرحواره Crashlytics BigQuery صادر شده است. اگر صادرات جریان Crashlytics به BigQuery را فعال کردهاید، میتوانید آن دادهها را در صفحه روندهای Realtime الگوی Looker Studio مشاهده کنید. میتوانید از نمونه بهعنوان یک الگو برای ایجاد سریع گزارشها و تجسمهای جدید بر اساس دادههای خرابی خام برنامه خود استفاده کنید:
الگوی داشبورد استودیوی Crashlytics Looker Studio را باز کنید.
روی Use Template در گوشه سمت راست بالا کلیک کنید.
در منوی کشویی New Data Source ، Create New Data Source را انتخاب کنید.
در کارت BigQuery روی Select کلیک کنید.
با انتخاب پروژههای من > PROJECT_ID > firebase_crashlytics > TABLE_NAME ، جدولی حاوی دادههای Crashlytics صادر شده را انتخاب کنید.
جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، میتوانید به جای آن جدول بیدرنگ خود را انتخاب کنید.
در قسمت پیکربندی ، سطح الگوی Crashlytics را روی پیشفرض تنظیم کنید.
برای ایجاد منبع داده جدید روی Connect کلیک کنید.
برای بازگشت به الگوی Crashlytics روی افزودن به گزارش کلیک کنید.
در نهایت، روی Create Report کلیک کنید تا یک کپی از قالب داشبورد Crashlytics Looker Studio ایجاد شود.
طرحواره Crashlytics در BigQuery را درک کنید
داده های Firebase Crashlytics به یک مجموعه داده BigQuery به نام firebase_crashlytics
صادر می شود. مجموعه داده کل پروژه شما را پوشش می دهد، حتی اگر چندین برنامه داشته باشد.
جداول
بهطور پیشفرض، Firebase جداول جداگانهای را در مجموعه دادههای Crashlytics برای هر برنامه پروژه شما که به BigQuery مرتبط است ایجاد میکند. جداول بر اساس شناسه برنامه (با نقطه تبدیل به زیرخط) نامگذاری شده و به پلتفرم برنامه ( _IOS
یا _ANDROID
) اضافه میشوند. به عنوان مثال، دادههای یک برنامه Android با نام بسته com.google.test
در جدولی به نام com_google_test_ANDROID
وجود دارد.
اگر صادرات جریان Crashlytics به BigQuery را فعال کنید، دادههای Crashlytics نیز بهصورت بیدرنگ به جدولی که با _REALTIME
اضافه شده است (به عنوان مثال com_google_test_ANDROID_REALTIME
) پخش میشود.
هر ردیف در جدول نشان دهنده رویدادی است که در برنامه رخ داده است، از جمله خرابی ها، خطاهای غیر کشنده و ANR.
جداول شامل مجموعه استانداردی از داده های Crashlytics علاوه بر کلیدهای Crashlytics سفارشی است که توسط شما در برنامه خود تعریف شده است.
ردیف ها
هر ردیف در جدول نشان دهنده خطایی است که برنامه با آن مواجه شده است.
ستون ها
ستونهای جدول برای خرابیها، خطاهای غیرمرگبار و ANR یکسان هستند. اگر صادرات جریان Crashlytics به BigQuery فعال باشد، جدول بیدرنگ همان ستونهایی را خواهد داشت که جدول دستهای دارد. توجه داشته باشید که ممکن است ستونهایی در ردیفها داشته باشید که نشاندهنده رویدادهایی هستند که ردیابی پشتهای ندارند.
در اینجا ستونهای جدول مربوط به دادههای Crashlytics صادر شده است:
نام فیلد | نوع داده | توضیحات |
---|---|---|
app_orientation | STRING | به عنوان مثال، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN ، و غیره. |
application | ضبط | برنامه ای که رویداد را ایجاد کرد |
application.build_version | STRING | نسخه ساخت برنامه |
application.display_version | STRING | |
blame_frame | ضبط | قاب به عنوان علت اصلی خرابی یا خطا شناسایی شده است |
blame_frame.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است برای فریم های جاوا تنظیم نشده است |
blame_frame.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
blame_frame.file | STRING | نام فایل فریم |
blame_frame.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
blame_frame.line | INT64 | شماره خط فایل قاب |
blame_frame.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند برای استثناهای جاوا تنظیم نشده است |
blame_frame.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
blame_frame.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
breadcrumbs | ضبط مکرر | در صورت فعال بودن، نان خردههای Google Analytics دارای مهر زمانی است |
breadcrumbs.name | STRING | نام مرتبط با آرد سوخاری |
breadcrumbs.params | ضبط مکرر | پارامترهای مرتبط با پودر سوخاری |
breadcrumbs.params.key | STRING | یک کلید پارامتر مرتبط با پودر سوخاری |
breadcrumbs.params.value | STRING | یک مقدار پارامتر مرتبط با پودر سوخاری |
breadcrumbs.timestamp | TIMESTAMP | مهر زمانی مرتبط با پودر سوخاری |
bundle_identifier | STRING | شناسه منحصر به فرد برنامه همانطور که در پروژه Firebase ثبت شده است (به عنوان مثال،com.google.gmail )برای برنامه های پلتفرم اپل، این شناسه بسته نرم افزاری است. برای برنامه های اندروید، این نام بسته برنامه است. |
crashlytics_sdk_versions | STRING | نسخه Crashlytics SDK که رویداد را ایجاد کرد |
custom_keys | ضبط مکرر | جفت های کلید-مقدار تعریف شده توسط توسعه دهنده |
custom_keys.key | STRING | یک کلید تعریف شده توسط توسعه دهنده |
custom_keys.value | STRING | یک مقدار تعریف شده توسط توسعه دهنده |
device | ضبط | دستگاهی که رویداد در آن رخ داده است |
device_orientation | STRING | به عنوان مثال، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN ، و غیره. |
device.architecture | STRING | به عنوان مثال، X86_32 ، X86_64 ، ARMV7 ، ARM64 ، ARMV7S ، یا ARMV7K |
device.manufacturer | STRING | سازنده دستگاه |
device.model | STRING | مدل دستگاه |
error | ضبط مکرر | (فقط برنامه های اپل) خطاهای غیر کشنده |
error_type | STRING | نوع خطای رویداد (به عنوان مثال، FATAL ، NON_FATAL ، ANR ، و غیره) |
error.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
error.code | INT64 | کد خطا مرتبط با خطای NSE ثبت شده سفارشی برنامه |
error.frames | ضبط مکرر | فریم های stacktrace |
error.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است |
error.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
error.frames.file | STRING | نام فایل فریم |
error.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
error.frames.line | INT64 | شماره خط فایل قاب |
error.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند |
error.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
error.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
error.queue_name | STRING | صفی که تاپیک در حال اجرا بود |
error.subtitle | STRING | زیرنویس تاپیک |
error.title | STRING | عنوان تاپیک |
event_id | STRING | شناسه منحصر به فرد رویداد |
event_timestamp | TIMESTAMP | زمانی که واقعه رخ داد |
exceptions | ضبط مکرر | (فقط اندروید) استثناهایی که در طول این رویداد رخ داده است. استثناهای تودرتو به ترتیب زمانی معکوس ارائه می شوند، به این معنی که آخرین رکورد اولین استثنا پرتاب شده است. |
exceptions.blamed | بولین | درست است اگر Crashlytics تشخیص دهد که استثنا مسئول خطا یا خرابی است |
exceptions.exception_message | STRING | یک پیام مرتبط با استثنا |
exceptions.frames | ضبط مکرر | فریم های مرتبط با استثنا |
exceptions.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است برای فریم های جاوا تنظیم نشده است |
exceptions.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
exceptions.frames.file | STRING | نام فایل فریم |
exceptions.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
exceptions.frames.line | INT64 | شماره خط فایل قاب |
exceptions.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند برای استثناهای جاوا تنظیم نشده است |
exceptions.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
exceptions.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیرقابل آبرسانی باشد |
exceptions.nested | بولین | درست برای همه به جز آخرین مورد استثنا (به معنی اولین رکورد) |
exceptions.subtitle | STRING | زیرنویس تاپیک |
exceptions.title | STRING | عنوان تاپیک |
exceptions.type | STRING | نوع استثنا (به عنوان مثال،java.lang.IllegalStateException) |
installation_uuid | STRING | شناسه ای که نصب یک برنامه و دستگاه منحصر به فرد را مشخص می کند |
is_fatal | بولین | این که آیا برنامه از کار افتاده است |
issue_id | STRING | موضوع مرتبط با رویداد |
logs | ضبط مکرر | پیامهای گزارش مهر زمانی تولید شده توسط Crashlytics Logger، در صورت فعال بودن |
logs.message | STRING | پیام ثبت شده |
logs.timestamp | TIMESTAMP | زمانی که لاگ ساخته شد |
memory | ضبط | وضعیت حافظه دستگاه |
memory.free | INT64 | بایت حافظه باقی مانده است |
memory.used | INT64 | بایت حافظه استفاده شده |
operating_system | ضبط | جزئیات سیستم عامل روی دستگاه |
operating_system.device_type | STRING | نوع دستگاه (به عنوان مثال، MOBILE ، TABLET ، TV و غیره)؛ همچنین به عنوان "دسته دستگاه" شناخته می شود |
operating_system.display_version | STRING | نسخه سیستم عامل روی دستگاه |
operating_system.modification_state | STRING | این که آیا دستگاه تغییر کرده است یا نه (برای مثال، یک برنامه جیلبریک MODIFIED و یک برنامه روت شده UNMODIFIED است) |
operating_system.name | STRING | نام سیستم عامل روی دستگاه |
operating_system.type | STRING | (فقط برنامه های اپل) نوع سیستم عامل در حال اجرا بر روی دستگاه (به عنوان مثال، IOS ، MACOS ، و غیره) |
platform | STRING | پلت فرم برنامه همانطور که در پروژه Firebase ثبت شده است (مقادیر معتبر: IOS یا ANDROID ) |
process_state | STRING | BACKGROUND یا FOREGROUND |
storage | ضبط | ذخیره سازی دائمی دستگاه |
storage.free | INT64 | بایت های ذخیره سازی باقی مانده است |
storage.used | INT64 | بایت های ذخیره سازی استفاده شده |
threads | ضبط مکرر | موضوعات موجود در زمان رویداد |
threads.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خرابی یا خطا است |
threads.code | INT64 | (فقط برنامه های اپل) کد خطای خطای NSE ثبت شده سفارشی برنامه |
threads.crash_address | INT64 | آدرس سیگنالی که باعث از کار افتادن برنامه شد. فقط در رشته های بومی خراب شده وجود دارد |
threads.crashed | بولین | این که آیا نخ خراب شده است |
threads.frames | ضبط مکرر | قاب های نخ |
threads.frames.address | INT64 | آدرس موجود در تصویر باینری که حاوی کد است |
threads.frames.blamed | بولین | آیا Crashlytics تشخیص داده است که این فریم دلیل خطا است یا خیر |
threads.frames.file | STRING | نام فایل فریم |
threads.frames.library | STRING | نام نمایشی کتابخانه که شامل قاب است |
threads.frames.line | INT64 | شماره خط فایل قاب |
threads.frames.offset | INT64 | بایت به تصویر باینری که حاوی کد است تغییر می کند |
threads.frames.owner | STRING | به عنوان مثال، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM ، یا SYSTEM |
threads.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورتی که غیر قابل آبرسانی باشد |
threads.queue_name | STRING | (فقط برنامه های اپل) صفی که رشته در حال اجرا بود |
threads.signal_code | STRING | کد سیگنالی که باعث از کار افتادن برنامه شد. فقط در رشته های بومی خراب شده وجود دارد |
threads.signal_name | STRING | نام سیگنالی که باعث از کار افتادن برنامه شد، فقط در رشتههای اصلی خراب شده وجود دارد |
threads.subtitle | STRING | زیرنویس تاپیک |
threads.thread_name | STRING | نام تاپیک |
threads.title | STRING | عنوان تاپیک |
unity_metadata.debug_build | بولین | اگر این یک ساخت اشکال زدایی است |
unity_metadata.graphics_copy_texture_support | STRING | پشتیبانی از کپی بافت گرافیکی همانطور که در Unity API تعریف شده است |
unity_metadata.graphics_device_id | INT64 | شناسه دستگاه گرافیکی |
unity_metadata.graphics_device_name | STRING | نام دستگاه گرافیکی |
unity_metadata.graphics_device_type | STRING | نوع دستگاه گرافیکی |
unity_metadata.graphics_device_vendor_id | INT64 | شناسه فروشنده پردازنده گرافیکی |
unity_metadata.graphics_device_vendor | STRING | فروشنده دستگاه گرافیکی |
unity_metadata.graphics_device_version | STRING | نسخه دستگاه گرافیکی |
unity_metadata.graphics_max_texture_size | INT64 | حداکثر اندازه اختصاص داده شده به رندر بافت |
unity_metadata.graphics_memory_size_mb | INT64 | حافظه گرافیکی در مگابایت |
unity_metadata.graphics_render_target_count | INT64 | تعداد اهداف رندر گرافیکی |
unity_metadata.graphics_shader_level | INT64 | سطح سایه زن گرافیک |
unity_metadata.processor_count | INT64 | تعداد پردازنده ها (هسته ها) |
unity_metadata.processor_frequency_mhz | INT64 | فرکانس پردازنده(ها) بر حسب مگاهرتز |
unity_metadata.processor_type | STRING | نوع پردازنده |
unity_metadata.screen_refresh_rate_hz | INT64 | نرخ تازه سازی صفحه نمایش بر حسب هرتز |
unity_metadata.screen_resolution_dpi | STRING | DPI صفحه به عنوان یک عدد ممیز شناور |
unity_metadata.screen_size_px | STRING | اندازه صفحه نمایش بر حسب پیکسل، فرمت شده به صورت عرض x ارتفاع |
unity_metadata.system_memory_size_mb | INT64 | اندازه حافظه سیستم بر حسب مگابایت |
unity_metadata.unity_version | STRING | نسخه Unity در حال اجرا بر روی این دستگاه |
user | ضبط | (اختیاری) اطلاعات جمع آوری شده در مورد کاربر برنامه |
user.email | STRING | (اختیاری) آدرس ایمیل کاربر |
user.id | STRING | (اختیاری) شناسه مخصوص برنامه مرتبط با کاربر |
user.name | STRING | (اختیاری) نام کاربر |
variant_id | STRING | نوع مسئله مرتبط با این رویداد توجه داشته باشید که همه رویدادها دارای یک نوع مشکل مرتبط نیستند. |
ارتقاء به زیرساخت جدید صادرات
در اواسط اکتبر 2024، Crashlytics زیرساخت جدیدی را برای صادرات دسته ای داده های Crashlytics به BigQuery راه اندازی کرد.
همه پروژههای Firebase از 15 سپتامبر 2025 بهطور خودکار به زیرساخت صادرات دستهای جدید ارتقا داده میشوند. میتوانید قبل از این تاریخ ارتقا دهید ، اما مطمئن شوید که جداول دستهای BigQuery شما پیشنیازهای ارتقا را دارند.
می توانید به زیرساخت جدید ارتقا دهید ، اما مطمئن شوید که جداول دسته ای BigQuery شما پیش نیازهای ارتقا را برآورده می کنند.
تعیین کنید که آیا در زیرساخت جدید هستید یا خیر
اگر صادرات دستهای را در اواسط اکتبر ۲۰۲۴ یا بعد از آن فعال کردهاید، پروژه Firebase شما بهطور خودکار از زیرساخت صادرات جدید استفاده میکند.
میتوانید بررسی کنید که پروژه شما از کدام زیرساخت استفاده میکند: به کنسول Google Cloud بروید، و اگر «پیکربندی انتقال داده» شما برچسب Firebase Crashlytics with Multi-Region Support
دارد، پروژه شما از زیرساخت صادرات جدید استفاده میکند.
تفاوت های مهم بین زیرساخت صادرات قدیمی و زیرساخت صادرات جدید
زیرساخت جدید از مکان های داده Crashlytics در خارج از ایالات متحده پشتیبانی می کند.
صادرات قبل از اواسط اکتبر 2024 فعال شد و به زیرساخت صادرات جدید ارتقا یافت — اکنون می توانید به صورت اختیاری مکان را برای صادرات داده تغییر دهید .
صادرات در اواسط اکتبر 2024 یا بعد از آن فعال شد - در حین تنظیم از شما خواسته شد مکانی را برای صادرات داده انتخاب کنید.
زیرساخت جدید از پر کردن دادههای قبل از فعال کردن صادرات پشتیبانی نمیکند.
زیرساخت قدیمی تا 30 روز قبل از تاریخی که صادرات را فعال کردهاید، پشتیبان را پشتیبانی میکرد.
زیرساخت جدید تا 30 روز گذشته یا برای آخرین تاریخی که صادرات به BigQuery را فعال کردهاید (هر کدام که جدیدترین باشد) پشتیبانی میکند.
زیرساخت جدید جداول دسته ای BigQuery با استفاده از شناسه های تنظیم شده برای برنامه های Firebase شما در پروژه Firebase نامگذاری می کند.
زیرساخت قدیمی دادهها را به جداول دستهای با نامهایی بر اساس شناسههای بسته یا نام بسته در باینری برنامه شما مینوشت.
زیرساخت جدید دادهها را در جداول دستهای با نامهایی بر اساس شناسههای بسته یا نامهای بسته تنظیمشده برای برنامههای Firebase ثبتشده شما در پروژه Firebase مینویسد.
مرحله 1 : پیش نیاز برای ارتقا
بررسی کنید که جداول دستهای BigQuery شما از شناسههای منطبق با شناسههای بسته یا نام بستههای تنظیمشده برای برنامههای Firebase ثبتشده شما در پروژه Firebase استفاده میکنند. اگر مطابقت ندارند، ممکن است در دادههای دستهای صادر شده با اختلال مواجه شوید. اکثر پروژه ها در وضعیت مناسب و سازگار خواهند بود، اما مهم است که قبل از ارتقا بررسی شود.
میتوانید همه برنامههای Firebase ثبتشده در پروژه Firebase خود را در کنسول Firebase پیدا کنید: به خود بروید ، تنظیمات پروژه ، سپس به کارت برنامههای شما بروید تا همه برنامههای Firebase و اطلاعات آنها را ببینید.
میتوانید تمام جداول دستهای BigQuery خود را در صفحه BigQuery کنسول Google Cloud پیدا کنید.
برای مثال، در اینجا حالتهای ایدهآلی وجود دارد که در آنها هیچ مشکلی در ارتقاء نخواهید داشت:
شما یک جدول دسته ای به نام
com_yourcompany_yourproject_IOS
و یک برنامه Firebase iOS+ با شناسه بستهcom.yourcompany.yourproject
دارید که در پروژه Firebase شما ثبت شده است.شما یک جدول دسته ای به نام
com_yourcompany_yourproject_ANDROID
و یک برنامه Android Firebase با نام بستهcom.yourcompany.yourproject
دارید که در پروژه Firebase شما ثبت شده است.
اگر نامهای جدول دستهای دارید که با شناسههای تنظیمشده برای برنامههای Firebase ثبتشده شما مطابقت ندارد ، دستورالعملهای بعدی این صفحه را قبل از ارتقای دستی یا قبل از ۱۵ سپتامبر ۲۰۲۵ دنبال کنید تا از اختلال در صادرات دستهای خود جلوگیری کنید.
مرحله 2 : به صورت دستی به زیرساخت جدید ارتقا دهید
اگر صادرات دستهای را قبل از اواسط اکتبر 2024 فعال کرده باشید، میتوانید بهصورت دستی به زیرساخت جدید ارتقا دهید، فقط با غیرفعال کردن صادرات دادههای Crashlytics و سپس فعال کردن مجدد آن در کنسول Firebase .
در اینجا مراحل دقیق وجود دارد:
در کنسول Firebase ، به صفحه ادغام بروید.
در کارت BigQuery ، روی مدیریت کلیک کنید.
برای غیرفعال کردن صادرات، نوار لغزنده Crashlytics را خاموش کنید. وقتی از شما خواسته شد، تأیید کنید که میخواهید صادرات داده متوقف شود.
بلافاصله نوار لغزنده Crashlytics را مجدداً روشن کنید تا صادرات مجدد فعال شود. وقتی از شما خواسته شد، تأیید کنید که میخواهید دادهها را صادر کنید.
صادر کردن داده های Crashlytics شما به BigQuery اکنون از زیرساخت صادرات جدید استفاده می کند.
نام جدول دسته ای موجود شما با شناسه برنامه Firebase شما مطابقت ندارد
اگر جدولهای دستهای BigQuery در این حالت دارید، به این معنی است که آنها با زیرساخت جدید صادرات دستهای به BigQuery Firebase سازگار نیستند. توجه داشته باشید که تمام پروژه های Firebase به طور خودکار به زیرساخت صادرات جدید از 15 سپتامبر 2025 منتقل می شوند.
برای جلوگیری از اختلال در صدور دسته ای داده های Crashlytics به BigQuery ، قبل از ارتقای دستی یا قبل از 15 سپتامبر 2025، راهنمایی های این بخش را دنبال کنید.
برای جلوگیری از اختلال، به دستورالعملها بروید
درک کنید که چگونه زیرساخت صادرات از شناسه ها برای نوشتن داده ها در جداول BigQuery استفاده می کند
در اینجا نحوه نوشتن داده های Crashlytics توسط دو زیرساخت صادراتی در جداول دسته ای BigQuery آمده است:
زیرساخت صادرات قدیمی : دادهها را در جدولی با نامی مینویسد که بر اساس شناسه بسته یا نام بسته در باینری برنامه شما است.
زیرساخت صادرات جدید : دادهها را در جدولی با نامی مینویسد که بر اساس شناسه بسته یا نام بسته برای برنامه Firebase ثبتشده شما در پروژه Firebase تنظیم شده است .
متأسفانه، گاهی اوقات شناسه بسته یا نام بسته در باینری برنامه شما با شناسه بسته یا نام بسته تنظیم شده برای برنامه Firebase ثبت شده شما در پروژه Firebase مطابقت ندارد. این معمولاً در صورتی اتفاق میافتد که شخصی شناسه واقعی را در هنگام ثبت برنامه وارد نکرده باشد.
اگر قبل از ارتقا رفع نشود، چه اتفاقی میافتد؟
اگر شناسههای این دو مکان مطابقت نداشته باشند، پس از ارتقا به زیرساخت صادرات جدید، موارد زیر اتفاق میافتد:
دادههای Crashlytics شما در یک جدول دستهای BigQuery جدید شروع به نوشتن میکنند - یعنی یک جدول جدید با نامی بر اساس شناسه بسته یا نام بسته تنظیم شده برای برنامه Firebase ثبتشده شما در پروژه Firebase شما .
هر جدول "میراث" موجود با نامی بر اساس شناسه در باینری برنامه شما، دیگر داده ای روی آن نوشته نخواهد شد.
سناریوهای نمونه از شناسههای نامتناسب
توجه داشته باشید که نامهای جدول دستهای BigQuery به طور خودکار با _IOS
یا _ANDROID
اضافه میشوند تا پلتفرم برنامه را نشان دهند.
شناسه(های) در باینری برنامه شما | شناسه(های) برای برنامه(های) Firebase شما تنظیم شد | رفتار میراثی | رفتار پس از ارتقا زیرساخت های صادراتی جدید | راه حل |
---|---|---|---|---|
foo | bar | روی یک جدول تکی به نام شناسه در باینری برنامه می نویسد ( foo ) | ایجاد می کند و سپس روی یک جدول می نویسد که به نام مجموعه شناسه برنامه Firebase ( bar ) نامگذاری شده است. | گزینه 1 یا 2 که در زیر توضیح داده شده است را اجرا کنید. |
foo | bar ، qux و غیره | روی یک جدول تکی به نام شناسه در باینری برنامه می نویسد ( foo ) | ایجاد* می کند و سپس در چندین جدول با نام شناسه های تنظیم شده برای برنامه های Firebase ( bar ، qux و غیره) می نویسد. | گزینه 2 که در زیر توضیح داده شده را اجرا کنید. |
foo ، baz و غیره | bar | در چندین جدول با نام چند شناسه در باینری برنامه ( foo ، baz و غیره) مینویسد. | ایجاد می کند** سپس داده های هر برنامه را در یک جدول می نویسد که نام آن بر اساس شناسه تنظیم شده برای برنامه Firebase ( bar ) است. | هیچ کدام از گزینه ها قابل اجرا نیستند. همچنان میتوانید با استفاده از |
* اگر شناسه در باینری برنامه شما با یکی از شناسه های تنظیم شده برای یک برنامه Firebase مطابقت داشت، زیرساخت صادرات جدید جدول جدیدی برای آن شناسه ایجاد نمی کند. درعوض، به نوشتن دادههای آن برنامه خاص روی آن ادامه میدهد. همه برنامه های دیگر در جداول جدید نوشته می شوند.
** اگر یکی از شناسههای موجود در باینری برنامه شما با شناسه تنظیمشده برای برنامه Firebase مطابقت داشت، زیرساخت صادرات جدید جدول جدیدی ایجاد نمیکند. در عوض، آن جدول را حفظ می کند و شروع به نوشتن داده برای همه برنامه ها در آن می کند.
گزینه هایی برای جلوگیری از اختلال
برای جلوگیری از هرگونه اختلال، دستورالعملهای یکی از گزینههای شرح داده شده در زیر را قبل از ارتقای دستی یا قبل از ۱۵ سپتامبر ۲۰۲۵ دنبال کنید.
گزینه 1 :
از جدول جدید ایجاد شده توسط زیرساخت صادرات جدید استفاده کنید. داده ها را از جدول موجود خود در جدول جدید کپی خواهید کرد.در کنسول Firebase ، با خاموش کردن صادرات و سپس روشن کردن مجدد برای برنامه مرتبط ، به زیرساخت صادرات جدید ارتقا دهید .
این اقدام یک جدول دستهای جدید با نامی ایجاد میکند که براساس شناسه بسته یا نام بسته تنظیم شده برای برنامه Firebase ثبتشده شما در پروژه Firebase شما است .
در کنسول Google Cloud ، تمام داده ها را از جدول قدیمی خود در جدول جدیدی که به تازگی ایجاد شده است کپی کنید .
اگر وابستگی های پایین دستی دارید که به جدول دسته ای شما بستگی دارد، آنها را برای استفاده از جدول جدید تغییر دهید.
گزینه 2 :
به نوشتن در جدول موجود خود ادامه دهید. برای رسیدن به این هدف، برخی از پیشفرضها را در یک پیکربندی BigQuery لغو میکنید.در کنسول Firebase ، شناسه برنامه Firebase (به عنوان مثال،
1:1234567890:ios:321abc456def7890
) برنامه را با نام و شناسه جدول دسته ای ناهمخوان پیدا کنید و یادداشت کنید:
به تنظیمات پروژه خود بروید ، سپس به کارت برنامه های خود بروید تا تمام برنامه های Firebase و اطلاعات آنها را ببینید.در کنسول Firebase ، با خاموش کردن صادرات و سپس دوباره برای برنامه مرتبط ، به زیرساخت های جدید صادرات ارتقاء دهید .
این عمل دو چیز را انجام می دهد:
یک جدول دسته ای جدید با نامی ایجاد می کند که بر اساس شناسه بسته نرم افزاری یا نام بسته برای برنامه Firebase ثبت شده شما در پروژه Firebase شما تنظیم شده است . (در نهایت این جدول را حذف خواهید کرد ، اما هنوز آن را حذف نکنید .)
یک "پیکربندی انتقال داده" BigQuery با منبع
Firebase Crashlytics with Multi-Region Support
ایجاد می کند.
در کنسول Google Cloud ، "پیکربندی انتقال داده" جدید را تغییر دهید تا داده ها همچنان به جدول موجود خود بنویسند:
برای مشاهده "پیکربندی انتقال داده" به BigQuery > انتقال داده ها بروید.
پیکربندی را انتخاب کنید که دارای Source
Firebase Crashlytics with Multi-Region Support
است.روی ویرایش در گوشه بالا سمت راست کلیک کنید.
در بخش جزئیات منبع داده ، لیستی برای GMP_APP_ID و لیستی برای Client_Namespace پیدا کنید.
در BigQuery ، شناسه برنامه Firebase
gmp_app_id
نامیده می شود. به طور پیش فرض ، مقدارclient_namespace
در BigQuery ، شناسه بسته نرم افزاری منحصر به فرد / نام بسته برنامه است ، اما شما این پیکربندی پیش فرض را نادیده می گیرید.BigQuery از مقدار
client_namespace
برای نام جدول دسته ای که هر برنامه Firebase Linked Linked می نویسد ، استفاده می کند.GMP_APP_ID برنامه Firebase را که می خواهید تنظیمات پیش فرض را نادیده بگیرید ، پیدا کنید. مقدار Client_Namespace خود را به نام جدول مورد نظر خود تغییر دهید که می خواهید برنامه Firebase به جای آن بنویسد (معمولاً این نام جدول میراثی است که برنامه با زیرساخت های صادراتی میراث برای آن می نویسد).
تغییر پیکربندی را ذخیره کنید.
برای روزهایی که جدول موجود شما از دست داده است ، یک برگشتی را برنامه ریزی کنید .
پس از اتمام کار برگشت ، جدول جدیدی را که به طور خودکار توسط زیرساخت های جدید صادراتی ایجاد شده است ، حذف کنید .
برای تجزیه و تحلیل بیشتر می توانید داده های Firebase Crashlytics خود را به BigQuery صادر کنید. BigQuery به شما امکان می دهد داده ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید ، آن را به یک ارائه دهنده ابر دیگر صادر کنید و از آن برای تجسم و داشبورد های سفارشی با Looker Studio استفاده کنید.
با داده های صادر شده چه کاری می توانید انجام دهید؟
صادرات به BigQuery حاوی داده های خرابی خام از جمله نوع دستگاه ، سیستم عامل ، استثنائات (برنامه های Android) یا خطاها (برنامه های اپل) و گزارش های Crashlytics و سایر داده ها است. شما می توانید دقیقاً آنچه را که داده های Crashlytics صادر شده و جدول جدول آن بعداً در این صفحه بررسی کنید.
در اینجا چند نمونه از آنچه می توانید با داده های صادر شده Crashlytics خود انجام دهید آورده شده است:
نمایش داده شد
شما می توانید در مورد داده های Crashlytics خود نمایش داده شود تا گزارش هایی را ایجاد کنید که داده های رویداد تصادف جمع شده به خلاصه های آسان تر درک می شود. از آنجا که این نوع گزارش ها در داشبورد Crashlytics کنسول Firebase در دسترس نیست ، آنها می توانند تجزیه و تحلیل و درک شما از داده های خرابی را تکمیل کنند. بعداً در این صفحه ، مجموعه ای از نمایش داده های مثال را پیدا کنید.از الگوی Looker Studio استفاده کنید
Crashlytics یک الگوی Looker Studio از پیش ساخته برای تجسم داده های صادر شده شما فراهم می کند.نمای ایجاد کنید
با استفاده از UI BigQuery ، می توانید "نمای" ایجاد کنید ، که یک جدول مجازی است که توسط یک پرس و جو SQL تعریف شده است. برای دستورالعمل های دقیق در مورد انواع مختلف نماها و نحوه ایجاد آنها ، به مستندات BigQuery مراجعه کنید.
Crashlytics Export به BigQuery
می توانید داده های Crashlytics خود را در زمان واقعی با پخش BigQuery پخش کنید. شما می توانید از آن برای هر منظور که به داده های زنده نیاز داشته باشد ، مانند ارائه اطلاعات در داشبورد زنده ، تماشای یک برنامه زنده یا نظارت بر مشکلات برنامه که باعث هشدار و گردش کار سفارشی می شود ، استفاده کنید.
هنگامی که Crashlytics را فعال کنید ، علاوه بر جدول دسته BigQuery ، یک جدول Realtime نیز خواهید داشت. در اینجا تفاوت هایی که باید از آن آگاه باشید بین جداول وجود دارد:
میز دسته | جدول زمان واقعی |
---|---|
|
|
جدول دسته ای برای تجزیه و تحلیل طولانی مدت و شناسایی روندها در طول زمان ایده آل است زیرا ما به طور دوام قبل از نوشتن آنها رویدادها را ذخیره می کنیم و می توان آنها را تا 30 روز به جدول بازگرداند. وقتی داده ها را به جدول زمان واقعی شما می نویسیم ، بلافاصله آن را برای BigQuery می نویسیم ، بنابراین برای داشبوردهای زنده و هشدارهای سفارشی ایده آل است. این دو جدول را می توان با یک پرس و جو دوخت ترکیب کرد تا مزایای هر دو را بدست آورد.
به طور پیش فرض ، جدول Realtime دارای مدت زمان انقضا 30 روز است. برای یادگیری نحوه اصلاح این موضوع ، به تنظیم انقضا پارتیشن در مستندات BigQuery مراجعه کنید.
* جزئیات مربوط به پشتیبانی Backfill را در ارتقاء زیرساخت های جدید صادرات مشاهده کنید.
صادرات به BigQuery را فعال کنید
در کنسول Firebase به صفحه ادغام بروید.
در کارت BigQuery ، روی پیوند کلیک کنید.
برای فعال کردن صادرات به BigQuery ، دستورالعمل های روی صفحه را دنبال کنید.
اگر می خواهید دسترسی نزدیک به زمان واقعی به داده های Crashlytics خود در BigQuery داشته باشید ، پس به روزرسانی در جریان صادرات را در نظر بگیرید.
پخش جریان Crashlytics را به BigQuery فعال کنید
در کنسول Firebase به صفحه ادغام بروید.
در کارت BigQuery ، روی مدیریت کلیک کنید.
کادر انتخاب شامل جریان را انتخاب کنید.
این عمل امکان پخش همه برنامه های مرتبط شما را فراهم می کند.
اطمینان حاصل کنید که حداقل دو رویداد از برنامه خود را به Crashlytics ارسال کرده اید و چند دقیقه پس از ارسال آنها صبر کرده اید.
اطمینان حاصل کنید که پروژه Firebase شما در برنامه قیمت گذاری Blaze Pay-As-You-Go قرار دارد.
می توانید با نگاه کردن در گوشه پایین سمت چپ کنسول Firebase ، این مورد را بررسی کنید.اگر بعد از ارسال دو رویداد و انتظار چند دقیقه در جدول Realtime هنوز اطلاعاتی در جدول Realtime وجود ندارد:
به کارت BigQuery در کنسول Firebase بروید.
غیرفعال و سپس صادرات جریان مجدد را دوباره فعال کنید.
اطمینان حاصل کنید که حساب خدمات
service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.com
در پروژه Firebase شماست و نقش آژانس خدمات CrashLytics Firebase را دارد.
می توانید این کار را در صفحه IAM کنسول Google Cloud بررسی کنید (حتماً کادر انتخاب را برای کمک های مالی نقش ارائه شده در Google انتخاب کنید).حداقل دو رویداد را برای Crashlytics ارسال کنید و چند دقیقه صبر کنید.
اگر هنوز داده ها را در جدول زمان واقعی خود نمی بینید ، به پشتیبانی Firebase دسترسی پیدا کنید .
چه اتفاقی می افتد که صادرات را فعال کنید؟
شما مکان مجموعه داده را انتخاب می کنید. پس از ایجاد مجموعه داده ، مکان قابل تغییر نیست ، اما می توانید مجموعه داده ها را در یک مکان متفاوت کپی کرده یا به صورت دستی حرکت داده (بازآفرینی) مجموعه داده را در یک مکان متفاوت قرار دهید. برای کسب اطلاعات بیشتر ، به تغییر مکان برای صادرات موجود مراجعه کنید.
این مکان فقط برای داده های صادر شده به BigQuery قابل اجرا است و بر محل داده های ذخیره شده برای استفاده در داشبورد Crashlytics کنسول Firebase یا در استودیوی اندرویدی تأثیر نمی گذارد.
به طور پیش فرض ، تمام برنامه های پروژه شما به BigQuery مرتبط هستند و هر برنامه ای که بعداً به پروژه اضافه می کنید به طور خودکار با BigQuery مرتبط می شوند. شما می توانید مدیریت کنید که برنامه ها داده ها را ارسال می کنند .
Firebase همگام سازی روزانه داده های شما را به BigQuery تنظیم می کند.
بعد از پیوند پروژه خود ، معمولاً باید تا همگام سازی روز بعد منتظر بمانید تا اولین مجموعه داده های خود را به BigQuery صادر کنید.
همگام سازی روزانه یک بار در روز اتفاق می افتد ، صرف نظر از هرگونه صادرات برنامه ریزی شده ای که ممکن است در BigQuery تنظیم کرده باشید. توجه داشته باشید که زمان و مدت زمان کار همگام سازی می تواند تغییر کند ، بنابراین ما برنامه ریزی برای انجام عملیات پایین دست یا مشاغل را بر اساس زمان خاص صادرات توصیه نمی کنیم.
Firebase نسخه ای از داده های موجود خود را به BigQuery صادر می کند. انتشار اولیه داده ها برای صادرات ممکن است تا 48 ساعت طول بکشد.
برای هر برنامه مرتبط ، این صادرات شامل یک جدول دسته ای است که حاوی داده های مربوط به همگام سازی روزانه است.
شما می توانید تا 30 روز گذشته یا جدیدترین تاریخ را که می توانید صادرات به BigQuery را فعال کنید (هر کدام از جدیدترین موارد) را به صورت دستی تنظیم کنید .
توجه داشته باشید که اگر قبل از اواسط اکتبر 2024 ، داده های Crashlytics را فعال کرده اید ، می توانید 30 روز قبل از روزی که صادرات را فعال کرده اید ، دوباره به عقب برگردید.
اگر صادرات جریان Crashlytics را به BigQuery فعال کنید ، تمام برنامه های مرتبط نیز دارای یک جدول زمان واقعی هستند که حاوی داده های دائماً به روز می شود.
برای غیرفعال کردن صادرات به BigQuery ، پروژه خود را در کنسول Firebase مجدداً جستجو کنید.
پرس و جوهای نمونه
مثال 1: تصادفات روز
بعد از کار برای رفع هرچه بیشتر اشکالات ، فکر می کنید تیم شما در نهایت آماده راه اندازی برنامه جدید اشتراک عکس شما است. قبل از انجام این کار ، می خواهید تعداد تصادفات در روز را برای یک ماه گذشته بررسی کنید ، تا مطمئن شوید که اشکال شما با گذشت زمان این برنامه را پایدارتر کرده است.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
مثال 2: بیشترین تصادفات را پیدا کنید
برای اولویت بندی صحیح برنامه های تولید ، می خواهید 10 تصادف برتر در برنامه خود را پیدا کنید. شما یک پرس و جو تولید می کنید که نقاط مربوط به داده ها را ارائه می دهد.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
مثال 3: 10 دستگاه بالای تصادف
پاییز فصل جدید تلفن است! شرکت شما می داند که این همچنین به این معنی است که فصل جدید مشکلات خاص دستگاه است-به خصوص برای اندروید. برای پیشروی از نگرانی های سازگاری فراگیر ، شما یک پرس و جو را در کنار هم قرار داده اید که 10 دستگاهی را که بیشترین تصادفات را در هفته گذشته (168 ساعت) تجربه کرده اند ، مشخص می کند.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
مثال 4: فیلتر توسط کلید سفارشی
شما یک توسعه دهنده بازی هستید که می خواهید بدانید که کدام سطح از بازی شما بیشترین تصادفات را تجربه می کند.
برای کمک به ردیابی آن آمار ، شما یک کلید Crashlytics سفارشی به نام current_level
تنظیم کرده اید و هر بار که کاربر به سطح جدیدی برسد ، آن را به روز می کنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از این کلید در صادرات به BigQuery ، می توانید یک پرس و جو برای گزارش توزیع مقادیر current_level
مرتبط با هر رویداد تصادف بنویسید.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESC
مثال 5: استخراج شناسه کاربر
شما یک برنامه Android در دسترسی زودهنگام دارید. بیشتر کاربران شما آن را دوست دارند ، اما سه نفر تعداد تصادفات غیرمعمول را تجربه کرده اند. برای رسیدن به پایین مشکل ، شما یک پرس و جو می نویسید که با استفاده از شناسه های کاربری خود ، تمام وقایع تصادف را برای آن کاربران جلب می کند.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
مثال 6: همه کاربران را که با مشکل تصادف خاصی روبرو هستند پیدا کنید
تیم شما به طور اتفاقی یک اشکال مهم را برای گروهی از آزمایش کنندگان بتا منتشر کرده است. تیم شما برای شناسایی شناسه مسئله تصادف خاص قادر به استفاده از پرس و جو از مثال "پیدا کردن بیشترین تصادفات فراگیر" در بالا بود. اکنون تیم شما دوست دارد یک پرس و جو برای استخراج لیست کاربران برنامه ای که تحت تأثیر این تصادف قرار گرفته اند ، اجرا کنند.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;
مثال 7: تعداد کاربرانی که تحت تأثیر یک مسئله تصادف قرار گرفته اند ، توسط کشور تقسیم شده اند
تیم شما در هنگام انتشار نسخه جدید یک اشکال مهم را تشخیص داده است. شما قادر به استفاده از پرس و جو از مثال "پیدا کردن بیشترین تصادفات فراگیر" در بالا برای شناسایی شناسه مسئله تصادف خاص هستید. تیم شما اکنون دوست دارد ببیند که آیا این تصادف در کشورهای مختلف جهان به کاربران گسترش یافته است یا خیر.
برای نوشتن این پرس و جو ، تیم شما باید موارد زیر را انجام دهد:
صادرات داده های Google Analytics را به BigQuery فعال کنید. داده های پروژه صادرات به BigQuery را ببینید.
برنامه خود را به روز کنید تا یک شناسه کاربر را به Google Analytics SDK و Crashlytics SDK منتقل کنید.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
هدف-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
یک پرس و جو بنویسید که از قسمت شناسه کاربر برای پیوستن به رویدادها در مجموعه داده های Google Analytics با خرابی در مجموعه داده های Crashlytics استفاده می کند.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و
IOS
خود (به جای نام بسته وANDROID
) استفاده کنید.SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
مثال 8: امروز 5 شماره برتر امروز
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
مثال 9: 5 شماره برتر از تاریخ ، از جمله امروز
همچنین می توانید جداول دسته و زمان واقعی را با یک پرس و جو دوخت ترکیب کنید تا اطلاعات زمان واقعی را به داده های دسته ای قابل اعتماد اضافه کنید. از آنجا که event_id
یک کلید اصلی است ، می توانید از DISTINCT event_id
استفاده کنید تا هر یک از رویدادهای مشترک را از دو جدول Dedupe کنید.
در اینجا یک نمونه پرس و جو برای یک برنامه Android آورده شده است. برای یک برنامه iOS ، از شناسه بسته نرم افزاری و IOS
خود (به جای نام بسته و ANDROID
) استفاده کنید.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
داده های صادر شده Crashlytics با Looker Studio تجسم کنید
Looker Studio مجموعه داده های Crashlytics خود را در BigQuery به گزارش هایی تبدیل می کند که خواندن آن آسان تر ، به اشتراک گذاری آسان تر و کاملاً قابل تنظیم است.
برای کسب اطلاعات بیشتر در مورد استفاده از Looker Studio ، راهنمای خوش آمدید آنها را بررسی کنید.
از الگوی گزارش Crashlytics استفاده کنید
Looker Studio دارای یک گزارش نمونه برای Crashlytics است که شامل مجموعه ای جامع از ابعاد و معیارها از طرحواره BigQuery Crashlytics صادر شده است. اگر صادر کردن جریان Crashlytics به BigQuery را فعال کرده اید ، می توانید آن داده ها را در صفحه روندهای Realtime از الگوی Looker Studio مشاهده کنید. شما می توانید از نمونه به عنوان یک الگوی استفاده کنید تا به سرعت گزارش ها و تجسم های جدید را بر اساس داده های خرابی خام برنامه خود ایجاد کنید:
الگوی داشبورد استودیوی Crashlytics Looker Studio را باز کنید.
روی استفاده از الگو در گوشه بالا سمت راست کلیک کنید.
در پایین آمدن منبع داده جدید ، ایجاد منبع داده جدید را انتخاب کنید.
روی انتخاب روی کارت BigQuery کلیک کنید.
با انتخاب پروژه های من> PROJECT_ID > firebase_crashlytics> TABLE_NAME جدول حاوی داده های صادر شده Crashlytics را انتخاب کنید.
جدول دسته ای شما همیشه برای انتخاب در دسترس است. اگر Crashlytics جریان صادرات به BigQuery فعال است ، می توانید به جای آن جدول Realtime خود را انتخاب کنید.
تحت پیکربندی ، سطح الگوی Crashlytics را به طور پیش فرض تنظیم کنید.
برای ایجاد منبع داده جدید ، روی اتصال کلیک کنید.
برای بازگشت به الگوی Crashlytics ، روی افزودن کلیک کنید.
در آخر ، روی ایجاد گزارش کلیک کنید تا نسخه خود از الگوی داشبورد استودیوی Crashlytics Looker Studio ایجاد کنید.
طرح Crashlytics در BigQuery درک کنید
داده های Firebase Crashlytics به یک مجموعه داده BigQuery به نام firebase_crashlytics
صادر می شود. مجموعه داده ها کل پروژه شما را پوشش می دهد ، حتی اگر برنامه های مختلفی داشته باشد.
جداول
به طور پیش فرض ، Firebase جداول جداگانه ای را در داخل مجموعه داده های Crashlytics برای هر برنامه در پروژه شما ایجاد می کند که به BigQuery مرتبط است. جداول بر اساس شناسه برنامه (با دوره های تبدیل به زیرزمین ها) نامگذاری شده و با پلت فرم برنامه ( _IOS
یا _ANDROID
) ضمیمه می شوند. به عنوان مثال ، داده ها برای یک برنامه Android با نام بسته com.google.test
در جدول به نام com_google_test_ANDROID
قرار دارد.
اگر صادرات جریان Crashlytics را به BigQuery فعال کنید ، داده های Crashlytics نیز در زمان واقعی به یک جدول اضافه می شوند که با _REALTIME
(به عنوان مثال ، com_google_test_ANDROID_REALTIME
) پخش می شود.
هر ردیف در یک جدول نشانگر رویدادی است که در برنامه رخ داده است ، از جمله تصادفات ، خطاهای غیر کشنده و ANR.
جداول علاوه بر هرگونه کلیدهای Crashlytics سفارشی که توسط شما در برنامه خود تعریف شده است ، مجموعه استاندارد از داده های Crashlytics را شامل می شود.
ردیف ها
هر ردیف در یک جدول خطایی را که برنامه با آن روبرو است نشان می دهد.
ستون ها
ستون های یک جدول برای تصادفات ، خطاهای غیر کشنده و ANR یکسان هستند. اگر صادرات جریان Crashlytics به BigQuery فعال شود ، جدول Realtime دارای ستون های مشابه جدول دسته ای خواهد بود. توجه داشته باشید که ممکن است ستون هایی در ردیف داشته باشید که نمایانگر رویدادهایی هستند که اثری از پشته ندارند.
در اینجا ستون های جدول برای داده های صادر شده Crashlytics آمده است:
نام فیلد | نوع داده | توضیحات |
---|---|---|
app_orientation | STRING | به عنوان مثال ، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN و غیره. |
application | ضبط | برنامه ای که این رویداد را ایجاد کرده است |
application.build_version | STRING | نسخه ساخت برنامه |
application.display_version | STRING | |
blame_frame | ضبط | قاب شناخته شده به عنوان علت اصلی تصادف یا خطا |
blame_frame.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
blame_frame.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
blame_frame.file | STRING | نام پرونده قاب |
blame_frame.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
blame_frame.line | int64 | شماره خط پرونده قاب |
blame_frame.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
blame_frame.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
blame_frame.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
breadcrumbs | سابقه مکرر | در صورت فعال بودن ، نان آنالیز Google Analytics |
breadcrumbs.name | STRING | نام مرتبط با آرد سوخاری |
breadcrumbs.params | سابقه مکرر | پارامترهای مرتبط با نان |
breadcrumbs.params.key | STRING | یک کلید پارامتر مرتبط با آرد سوخاری |
breadcrumbs.params.value | STRING | مقدار پارامتر مرتبط با آرد سوخاری |
breadcrumbs.timestamp | زمان سنج | Timestamp مرتبط با آرد سوخاری |
bundle_identifier | STRING | شناسه منحصر به فرد برای برنامه به عنوان ثبت شده در پروژه Firebase (به عنوان مثال ،com.google.gmail )برای برنامه های Apple Platform ، این شناسه بسته برنامه است. برای برنامه های Android ، این نام بسته برنامه است. |
crashlytics_sdk_versions | STRING | نسخه SDK Crashlytics که این رویداد را ایجاد کرده است |
custom_keys | سابقه مکرر | جفت های ارزش کلید تعریف شده توسط توسعه دهنده |
custom_keys.key | STRING | یک کلید تعریف شده توسط توسعه دهنده |
custom_keys.value | STRING | یک مقدار تعریف شده توسط توسعه دهنده |
device | ضبط | دستگاهی که این رویداد در آن رخ داده است |
device_orientation | STRING | به عنوان مثال ، PORTRAIT ، LANDSCAPE ، FACE_UP ، FACE_DOWN و غیره. |
device.architecture | STRING | به عنوان مثال ، X86_32 ، X86_64 ، ARMV7 ، ARM64 ، ARMV7S یا ARMV7K |
device.manufacturer | STRING | سازنده دستگاه |
device.model | STRING | مدل دستگاه |
error | سابقه مکرر | (فقط برنامه های اپل) خطاهای غیر کشنده |
error_type | STRING | نوع خطای رویداد (به عنوان مثال ، FATAL ، NON_FATAL ، ANR و غیره) |
error.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
error.code | int64 | کد خطا مرتبط با NSERROR ورود به سیستم سفارشی برنامه |
error.frames | سابقه مکرر | قاب های StackTrace |
error.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است |
error.frames.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
error.frames.file | STRING | نام پرونده قاب |
error.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
error.frames.line | int64 | شماره خط پرونده قاب |
error.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است |
error.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
error.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
error.queue_name | STRING | صف که نخ در حال اجرا بود |
error.subtitle | STRING | زیرنویس موضوع |
error.title | STRING | عنوان موضوع |
event_id | STRING | شناسه منحصر به فرد برای این رویداد |
event_timestamp | زمان سنج | وقتی این رویداد رخ داد |
exceptions | سابقه مکرر | (فقط Android) استثنائاتی که در این رویداد رخ داده است. استثنائات تو در تو به ترتیب زمانی معکوس ارائه شده است ، به این معنی که آخرین رکورد اولین استثناء است |
exceptions.blamed | بولین | درست است اگر Crashlytics استثناء مسئول خطا یا تصادف است |
exceptions.exception_message | STRING | پیام مرتبط با استثنا |
exceptions.frames | سابقه مکرر | قاب های مرتبط با استثنا |
exceptions.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است برای قاب های جاوا غیرقانونی است |
exceptions.frames.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
exceptions.frames.file | STRING | نام پرونده قاب |
exceptions.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
exceptions.frames.line | int64 | شماره خط پرونده قاب |
exceptions.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است برای استثنائات جاوا غیرقانونی است |
exceptions.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
exceptions.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم پذیرش |
exceptions.nested | بولین | درست برای همه به جز استثناء آخرین پرتاب (به معنی رکورد اول) |
exceptions.subtitle | STRING | زیرنویس موضوع |
exceptions.title | STRING | عنوان موضوع |
exceptions.type | STRING | نوع استثنا (به عنوان مثال ،java.lang.IllegalStateException) |
installation_uuid | STRING | شناسه ای که یک برنامه منحصر به فرد و نصب دستگاه را مشخص می کند |
is_fatal | بولین | آیا برنامه خراب شده است |
issue_id | STRING | مسئله مرتبط با این رویداد |
logs | سابقه مکرر | پیام های ورود به سیستم Timestamped تولید شده توسط گزارش Crashlytics ، در صورت فعال کردن |
logs.message | STRING | پیام وارد شده |
logs.timestamp | زمان سنج | وقتی ورود به سیستم ساخته شد |
memory | ضبط | وضعیت حافظه دستگاه |
memory.free | int64 | بایت حافظه باقی مانده |
memory.used | int64 | بایت حافظه استفاده شده |
operating_system | ضبط | جزئیات سیستم عامل در دستگاه |
operating_system.device_type | STRING | نوع دستگاه (به عنوان مثال ، MOBILE ، TABLET ، TV و غیره) ؛ همچنین به عنوان "دسته دستگاه" شناخته می شود |
operating_system.display_version | STRING | نسخه سیستم عامل در دستگاه |
operating_system.modification_state | STRING | آیا دستگاه اصلاح شده است (به عنوان مثال ، یک برنامه Jailbroken MODIFIED و یک برنامه ریشه دار UNMODIFIED است) |
operating_system.name | STRING | نام سیستم عامل در دستگاه |
operating_system.type | STRING | (فقط برنامه های اپل) نوع سیستم عامل در حال اجرا بر روی دستگاه (به عنوان مثال ، IOS ، MACOS و غیره) |
platform | STRING | بستر برنامه به عنوان ثبت شده در پروژه Firebase (مقادیر معتبر: IOS یا ANDROID ) |
process_state | STRING | BACKGROUND یا FOREGROUND |
storage | ضبط | ذخیره مداوم دستگاه |
storage.free | int64 | بایت ذخیره سازی باقی مانده |
storage.used | int64 | بایت ذخیره سازی استفاده شده |
threads | سابقه مکرر | موضوعات موجود در زمان رویداد |
threads.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت تصادف یا خطا است |
threads.code | int64 | (فقط برنامه های اپل) کد خطای NSERROR ثبت شده برنامه کاربردی برنامه |
threads.crash_address | int64 | آدرس سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.crashed | بولین | آیا موضوع خراب شده است |
threads.frames | سابقه مکرر | قاب های نخ |
threads.frames.address | int64 | آدرس در تصویر باینری که حاوی کد است |
threads.frames.blamed | بولین | آیا Crashlytics تعیین کرده است که این قاب علت خطا است |
threads.frames.file | STRING | نام پرونده قاب |
threads.frames.library | STRING | نام نمایشگر کتابخانه که شامل قاب است |
threads.frames.line | int64 | شماره خط پرونده قاب |
threads.frames.offset | int64 | جبران بایت به تصویر باینری که حاوی کد است |
threads.frames.owner | STRING | به عنوان مثال ، DEVELOPER ، VENDOR ، RUNTIME ، PLATFORM یا SYSTEM |
threads.frames.symbol | STRING | نماد هیدراته یا نماد خام در صورت عدم درمان |
threads.queue_name | STRING | (فقط برنامه های اپل) صف که موضوع در حال اجرا بود |
threads.signal_code | STRING | کد سیگنال که باعث خراب شدن برنامه شد. فقط در موضوعات بومی سقوط شده موجود است |
threads.signal_name | STRING | نام سیگنالی که باعث خراب شدن برنامه شد ، فقط در موضوعات بومی خراب شده وجود دارد |
threads.subtitle | STRING | زیرنویس موضوع |
threads.thread_name | STRING | نام موضوع |
threads.title | STRING | عنوان موضوع |
unity_metadata.debug_build | بولین | اگر این یک ساخت اشکال است |
unity_metadata.graphics_copy_texture_support | STRING | پشتیبانی از کپی کردن بافت گرافیکی همانطور که در API وحدت تعریف شده است |
unity_metadata.graphics_device_id | int64 | شناسه دستگاه گرافیکی |
unity_metadata.graphics_device_name | STRING | نام دستگاه گرافیکی |
unity_metadata.graphics_device_type | STRING | نوع دستگاه گرافیک |
unity_metadata.graphics_device_vendor_id | int64 | شناسه فروشنده پردازنده گرافیک |
unity_metadata.graphics_device_vendor | STRING | فروشنده دستگاه گرافیک |
unity_metadata.graphics_device_version | STRING | نسخه دستگاه گرافیکی |
unity_metadata.graphics_max_texture_size | int64 | حداکثر اندازه اختصاص یافته به ارائه بافت |
unity_metadata.graphics_memory_size_mb | int64 | حافظه گرافیکی در MB |
unity_metadata.graphics_render_target_count | int64 | تعداد اهداف ارائه گرافیکی |
unity_metadata.graphics_shader_level | int64 | سطح سایه بان گرافیک |
unity_metadata.processor_count | int64 | تعداد پردازنده ها (هسته) |
unity_metadata.processor_frequency_mhz | int64 | فراوانی پردازنده (ها) در MHz |
unity_metadata.processor_type | STRING | نوع پردازنده |
unity_metadata.screen_refresh_rate_hz | int64 | نرخ تازه کردن صفحه در هرتز |
unity_metadata.screen_resolution_dpi | STRING | DPI صفحه به عنوان یک شماره نقطه شناور |
unity_metadata.screen_size_px | STRING | اندازه صفحه نمایش در پیکسل ها ، به عنوان عرض x ارتفاع فرمت شده است |
unity_metadata.system_memory_size_mb | int64 | اندازه حافظه سیستم در MB |
unity_metadata.unity_version | STRING | نسخه وحدت در این دستگاه اجرا می شود |
user | ضبط | (اختیاری) اطلاعات جمع آوری شده در مورد کاربر برنامه |
user.email | STRING | (اختیاری) آدرس ایمیل کاربر |
user.id | STRING | (اختیاری) شناسه خاص برنامه مرتبط با کاربر |
user.name | STRING | (اختیاری) نام کاربر |
variant_id | STRING | نوع مسئله مرتبط با این رویداد توجه داشته باشید که همه رویدادها یک نوع مسئله مرتبط ندارند. |
به زیرساخت های جدید صادرات ارتقا دهید
در اواسط اکتبر 2024 ، Crashlytics زیرساخت جدیدی را برای صادرات دسته ای از داده های Crashlytics به BigQuery راه اندازی کرد.
تمام پروژه های Firebase به طور خودکار از اوایل 15 سپتامبر 2025 به زیرساخت های صادرات دسته ای جدید ارتقا می یابند. می توانید قبل از این تاریخ ارتقا دهید ، اما اطمینان حاصل کنید که میزهای دسته ای BigQuery شما پیش نیازهای ارتقا را برآورده می کند.
شما می توانید به زیرساخت های جدید ارتقا دهید ، اما اطمینان حاصل کنید که میزهای دسته ای BigQuery شما پیش نیازهای ارتقا را برآورده می کنند.
تعیین کنید که آیا در زیرساخت های جدید هستید
اگر صادرات دسته ای را در اواسط اکتبر 2024 یا بعد از آن فعال کنید ، پروژه Firebase شما به طور خودکار از زیرساخت های جدید صادرات استفاده می کند.
شما می توانید بررسی کنید که از کدام زیرساخت پروژه شما استفاده می کند: به کنسول Google Cloud بروید ، و اگر "پیکربندی انتقال داده" شما با عنوان Firebase Crashlytics with Multi-Region Support
گذاری شده است ، پروژه شما از زیرساخت های جدید صادرات استفاده می کند.
تفاوت های مهم بین زیرساخت های صادراتی قدیمی و زیرساخت های جدید صادرات
زیرساخت های جدید از مکان های مجموعه داده های Crashlytics در خارج از ایالات متحده پشتیبانی می کند.
صادرات قبل از اواسط اکتبر 2024 فعال شده و به زیرساخت های جدید صادرات ارتقا یافته است-اکنون می توانید به صورت اختیاری مکان را برای صادرات داده تغییر دهید .
صادرات در اواسط اکتبر 2024 یا بعد از آن فعال شد-از شما در هنگام راه اندازی خواسته شد تا مکانی برای صادرات داده را انتخاب کنید.
زیرساخت های جدید قبل از فعال کردن صادرات ، از داده های برگشتی پشتیبانی نمی کنند.
زیرساخت های قدیمی تا 30 روز قبل از تاریخ فعال کردن صادرات ، از پشتی پشتیبانی می کردند.
زیرساخت های جدید تا 30 روز گذشته یا برای جدیدترین تاریخ پشتیبانی می کنند که شما می توانید صادرات به BigQuery را فعال کنید (هر کدام از جدیدترین ها).
زیرساخت های جدید با استفاده از شناسه های تنظیم شده برای برنامه های Firebase شما در پروژه Firebase ، جداول دسته ای BigQuery را نامگذاری می کنند.
زیرساخت های قدیمی داده هایی را برای جداول دسته ای با نام های مبتنی بر شناسه های بسته نرم افزاری یا نام های بسته بندی شده در باینری برنامه خود نوشت.
زیرساخت های جدید داده ها را به جداول دسته ای بر اساس شناسه های بسته نرم افزاری یا نام بسته بندی شده برای برنامه های Firebase ثبت شده شما در پروژه Firebase خود می نویسد.
مرحله 1 : پیش نیاز برای به روزرسانی
بررسی کنید که جداول دسته ای BigQuery موجود شما از شناسه های مطابق با شناسه های بسته نرم افزاری یا نام های بسته بندی شده برای برنامه های ثبت شده Firebase در پروژه Firebase خود استفاده می کند. اگر آنها مطابقت نداشته باشند ، ممکن است شما در داده های دسته ای صادر شده خود اختلال ایجاد کنید. بیشتر پروژه ها در وضعیت مناسب و سازگار خواهند بود ، اما بررسی قبل از به روزرسانی مهم است.
می توانید تمام برنامه های Firebase ثبت شده در پروژه Firebase خود را در کنسول Firebase پیدا کنید: به تنظیمات پروژه خود بروید ، سپس به کارت برنامه های خود بروید تا تمام برنامه های Firebase و اطلاعات آنها را ببینید.
می توانید تمام میزهای دسته بزرگ BigQuery خود را در صفحه BigQuery کنسول Google Cloud پیدا کنید.
به عنوان مثال ، در اینجا کشورهای ایده آل وجود دارد که در آن هیچ مشکلی در ارتقا نخواهید داشت:
شما یک جدول دسته ای به نام
com_yourcompany_yourproject_IOS
و یک برنامه iOS+ Firebase با شناسه بسته نرم افزاریcom.yourcompany.yourproject
ثبت شده در پروژه Firebase خود دارید.شما یک جدول دسته ای به نام
com_yourcompany_yourproject_ANDROID
و یک برنامه Android Firebase با نام بستهcom.yourcompany.yourproject
ثبت شده در پروژه Firebase خود دارید.
اگر نام جدول دسته ای دارید که با شناسه های تنظیم شده برای برنامه های ثبت شده Firebase خود مطابقت ندارد ، بعداً قبل از به روزرسانی دستی یا قبل از 15 سپتامبر 2025 ، دستورالعمل ها را دنبال کنید تا از اختلال در صادرات دسته ای خودداری کنید.
مرحله 2 : به صورت دستی به زیرساخت های جدید ارتقا دهید
اگر قبل از اواسط اکتبر 2024 ، صادرات دسته ای را فعال کرده اید ، می توانید به طور دستی با جابجایی داده های Crashlytics به صورت دستی به زیرساخت های جدید ارتقا دهید و دوباره در کنسول Firebase روشن شوید.
در اینجا مراحل مفصلی آورده شده است:
در کنسول Firebase به صفحه ادغام بروید.
در کارت BigQuery ، روی مدیریت کلیک کنید.
برای غیرفعال کردن صادرات ، کشویی Crashlytics را خاموش کنید. در صورت درخواست ، تأیید کنید که می خواهید صادرات داده متوقف شود.
بلافاصله دوباره به کشویی Crashlytics برای صادرات مجدد تغییر دهید. در صورت درخواست ، تأیید کنید که می خواهید داده ها را صادر کنید.
صادرات داده های Crashlytics شما به BigQuery اکنون از زیرساخت های جدید صادرات استفاده می کند.
نام جدول دسته ای موجود شما با شناسه برنامه Firebase شما مطابقت ندارد
اگر در این حالت جداول دسته ای BigQuery موجود دارید ، این بدان معنی است که آنها با زیرساخت های جدید صادرات به میزان BigQuery Firebase سازگار نیستند. توجه داشته باشید که تمام پروژه های Firebase به طور خودکار از اوایل 15 سپتامبر 2025 به زیرساخت های جدید صادرات منتقل می شوند.
قبل از به روزرسانی دستی یا قبل از 15 سپتامبر 2025 ، راهنمایی های موجود در این بخش را دنبال کنید تا از اختلال در صادرات دسته ای از داده های Crashlytics خود به BigQuery جلوگیری کنید.
برای جلوگیری از اختلال به دستورالعمل گزینه ها پرش کنید
درک کنید که چگونه زیرساخت های صادراتی از شناسه ها برای نوشتن داده ها به جداول BigQuery استفاده می کنند
در اینجا نحوه نوشتن دو زیرساخت صادراتی داده های Crashlytics به میزهای دسته ای BigQuery :
زیرساخت های صادرات میراث : داده ها را با نامی که بر اساس شناسه بسته نرم افزاری یا نام بسته در باینری برنامه شما ساخته شده است ، به یک جدول می نویسد.
زیرساخت های جدید صادرات : داده ها را با نامی که بر اساس شناسه بسته نرم افزاری یا نام بسته برای برنامه Firebase ثبت شده شما در پروژه Firebase خود تنظیم شده است ، به یک جدول می نویسد.
متأسفانه ، گاهی اوقات شناسه بسته نرم افزاری یا نام بسته موجود در باینری برنامه شما با شناسه بسته نرم افزاری یا نام بسته تنظیم شده برای برنامه ثبت شده Firebase در پروژه Firebase خود مطابقت ندارد. این امر معمولاً در صورتی اتفاق می افتد که شخصی در هنگام ثبت نام ، شناسه واقعی را وارد نکند.
چه اتفاقی می افتد اگر این مسئله قبل از به روزرسانی برطرف نشود؟
اگر شناسه های این دو مکان با هم مطابقت نداشته باشند ، پس از بروزرسانی به زیرساخت های جدید صادرات ، موارد زیر اتفاق می افتد:
داده های Crashlytics شما شروع به نوشتن در یک جدول دسته جدید BigQuery می کند - یعنی یک جدول جدید با نامی بر اساس شناسه بسته نرم افزاری یا نام بسته ای که برای برنامه Firebase ثبت شده شما در پروژه Firebase خود تنظیم شده است .
هر جدول "میراث" موجود با نامی بر اساس شناسه در باینری برنامه شما دیگر داده هایی برای آن نوشته نشده است.
به عنوان مثال سناریوهای شناسه های ناسازگار
توجه داشته باشید که نام های جدول دسته BigQuery به طور خودکار با _IOS
یا _ANDROID
برای نشان دادن بستر برنامه ضمیمه می شوند.
شناسه (ها) در باینری برنامه شما | شناسه (های) تنظیم شده برای برنامه (های) Firebase شما | رفتار میراث | رفتار پس از به روزرسانی به زیرساخت های صادراتی جدید | راه حل |
---|---|---|---|---|
foo | bar | به یک جدول واحد به نام شناسه در باینری برنامه ( foo ) می نویسد | ایجاد سپس به یک جدول واحد به نام شناسه تنظیم شده برای برنامه Firebase ( bar ) می نویسد | گزینه 1 یا 2 را که در زیر شرح داده شده است پیاده سازی کنید. |
foo | bar ، qux و غیره | به یک جدول واحد به نام شناسه در باینری برنامه ( foo ) می نویسد | ایجاد* سپس به چند جدول به نام شناسه های تنظیم شده برای برنامه های Firebase ( bar ، qux و غیره) می نویسد | گزینه 2 را که در زیر شرح داده شده است پیاده سازی کنید. |
foo ، baz ، و غیره | bar | می نویسد به چند جداول به نام های متعدد در باینری برنامه ( foo ، baz و غیره) | ایجاد ** سپس داده های هر برنامه را به یک جدول واحد به نام شناسه تنظیم شده برای برنامه Firebase ( bar ) می نویسد | None of the options can be implemented. You can still differentiate data from each app within the single table by using the app's |
* If the identifier in your app's binary matched one of the identifiers set for a Firebase App, then the new export infrastructure won't create a new table for that identifier. Instead, it will continue writing data for that specific app to it. All other apps will be written to new tables.
** If one of the identifiers in your app's binary matched the identifier set for the Firebase App, then the new export infrastructure won't create a new table. Instead, it will maintain that table and start writing data for all apps to it.
Options to avoid disruption
To avoid any disruptions, follow the instructions for one of the options described below before you manually upgrade or before September 15, 2025.
گزینه 1 :
Use the new table created by the new export infrastructure. You'll copy data from your existing table to the new table.In the Firebase console, upgrade to the new export infrastructure by turning export off and then on again for the linked app.
This action creates a new batch table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project .
In the Google Cloud console, copy all the data from your legacy table to the new table that was just created.
If you have any downstream dependencies that depend on your batch table, change them to use the new table.
OPTION 2 :
Continue writing to your existing table. You'll override some defaults in a BigQuery config to achieve this.In the Firebase console, find and take note of the Firebase App ID (for example,
1:1234567890:ios:321abc456def7890
) of the app with the mismatched batch table name and identifier:
Go to your Project settings , then scroll to the Your apps card to see all your Firebase Apps and their information.In the Firebase console, upgrade to the new export infrastructure by turning export off and then on again for the linked app.
This action does two things:
Creates a new batch table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project . (You'll eventually delete this table, but do not delete it yet.)
Creates a BigQuery "data transfer config" with the source
Firebase Crashlytics with Multi-Region Support
.
In the Google Cloud console, change the new "data transfer config" so that data will continue to write to your existing table:
Go to BigQuery > Data transfers to view your "data transfer config".
Select the config that has the source
Firebase Crashlytics with Multi-Region Support
.Click Edit in the top-right corner.
In the Data source details section, find a list for gmp_app_id and a list for client_namespace .
In BigQuery , the Firebase App ID is called the
gmp_app_id
. By default, theclient_namespace
value in BigQuery is the corresponding unique bundle ID / package name of the app, but you'll be overriding this default configuration.BigQuery uses the
client_namespace
value for the name of the batch table that each linked Firebase App writes to.Find the gmp_app_id of the Firebase App for which you want to override default settings. Change its client_namespace value to the name of the table you want the Firebase App to write to instead (usually this is the name of the legacy table the app was writing to with the legacy export infrastructure).
Save the config change.
Schedule a backfill for the days that your existing table is missing data.
Once the backfill is done, delete the new table that was automatically created by the new export infrastructure.