در داشبورد Crashlytics ، میتوانید روی یک مشکل کلیک کنید و گزارش رویداد مفصلی دریافت کنید. میتوانید آن گزارشها را سفارشی کنید تا به شما کمک کند بهتر بفهمید در برنامهتان چه اتفاقی میافتد و شرایط پیرامون رویدادهای گزارششده به Crashlytics .
استثناهای کشف نشده و استثناهای کشف شده را به Crashlytics گزارش دهید.
برنامه خود را برای ثبت کلیدهای سفارشی ، پیامهای گزارش سفارشی و شناسههای کاربر ابزار کنید.
اگر برنامه شما از Firebase SDK برای Google Analytics استفاده میکند، بهطور خودکار گزارشهای خرده نان را دریافت کنید. این گزارشها به شما امکان مشاهده اقدامات کاربر را میدهند که منجر به رویداد جمعآوریشده Crashlytics در برنامه شما میشود.
گزارش خودکار خرابی را خاموش کنید و گزارش انتخابی را برای کاربران خود فعال کنید . توجه داشته باشید که بهطور پیشفرض، Crashlytics بهطور خودکار گزارشهای خرابی بومی پلتفرم را برای همه کاربران برنامه شما جمعآوری میکند.
استثناهای کشف نشده را گزارش کنید
میتوانید بهطور خودکار تمام خطاهای «مرگبار» را که در چارچوب Flutter ایجاد میشوند، با نادیده گرفتن FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterFatalError
دریافت کنید. از طرف دیگر، برای گرفتن استثناهای «غیر کشنده»، FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterError
لغو کنید:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
خطاهای ناهمزمان
خطاهای ناهمزمان توسط چارچوب Flutter شناسایی نمی شوند:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
برای دریافت چنین خطاهایی، می توانید از کنترل کننده PlatformDispatcher.instance.onError
استفاده کنید:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
خطاهای خارج از فلاتر
برای دریافت خطاهایی که خارج از زمینه Flutter اتفاق میافتند، یک شنونده خطا را در Isolate
فعلی نصب کنید:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
گزارش موارد استثنا
علاوه بر گزارش خودکار خرابیهای برنامه، Crashlytics به شما امکان میدهد استثناهای غیرمرگبار را ضبط کنید و دفعه بعد که یک رویداد مرگبار گزارش شد یا زمانی که برنامه راهاندازی مجدد شد، آنها را برای شما ارسال میکند.
از روش recordError
برای ثبت استثناهای غیرمرگبار در بلوکهای catch برنامه خود استفاده کنید. به عنوان مثال:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
همچنین ممکن است بخواهید اطلاعات بیشتری در مورد خطا ثبت کنید که با استفاده از ویژگی information
امکان پذیر است:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
این استثناها به عنوان مسائل غیر کشنده در کنسول Firebase ظاهر می شوند. خلاصه مسئله شامل تمام اطلاعات وضعیتی است که معمولاً از خرابیها دریافت میکنید، همراه با خرابیها بر اساس نسخه و دستگاه سختافزار.
Crashlytics استثناها را در یک رشته پسزمینه اختصاصی پردازش میکند تا تأثیر عملکرد بر برنامه شما را به حداقل برساند. برای کاهش ترافیک شبکه کاربران، Crashlytics در صورت لزوم تعداد گزارشهای ارسال شده از دستگاه را محدود میکند.
کلیدهای سفارشی را اضافه کنید
کلیدهای سفارشی به شما کمک می کنند تا وضعیت خاص برنامه خود را که منجر به خرابی می شود، دریافت کنید. میتوانید جفتهای کلید/مقدار دلخواه را با گزارشهای خرابی خود مرتبط کنید، سپس از کلیدهای سفارشی برای جستجو و فیلتر کردن گزارشهای خرابی در کنسول Firebase استفاده کنید.
در داشبورد Crashlytics ، میتوانید مسائلی را جستجو کنید که با یک کلید سفارشی مطابقت دارند.
هنگامی که در حال بررسی یک مشکل خاص در کنسول هستید، میتوانید کلیدهای سفارشی مرتبط برای هر رویداد (زیربرگه کلیدها ) را مشاهده کنید و حتی رویدادها را با کلیدهای سفارشی فیلتر کنید (منوی فیلتر در بالای صفحه).
برای تنظیم جفت کلید/مقدار از روش نمونه setCustomKey
استفاده کنید. در اینجا چند نمونه آورده شده است:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
پیام های ثبت سفارشی را اضافه کنید
برای اینکه به خودتان زمینه بیشتری برای رویدادهایی که منجر به خرابی می شود بدهید، می توانید گزارش های Crashlytics سفارشی را به برنامه خود اضافه کنید. Crashlytics گزارشها را با دادههای خرابی شما مرتبط میکند و آنها را در کنسول Firebase در زیر برگه Crashlytics Logs نمایش میدهد.
log
برای کمک به شناسایی دقیق مشکلات استفاده کنید. به عنوان مثال:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
تعیین شناسه های کاربر
برای تشخیص یک مشکل، اغلب مفید است که بدانید کدام یک از کاربران شما یک خرابی را تجربه کرده اند. Crashlytics شامل راهی برای شناسایی ناشناس کاربران در گزارشهای خرابی شما است.
برای افزودن شناسههای کاربری به گزارشهای خود، به هر کاربر یک شناسه منحصربهفرد به شکل شماره شناسه، نشانه یا مقدار هش اختصاص دهید:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
اگر بعد از تنظیم یک شناسه کاربری نیاز به پاک کردن آن داشتید، مقدار آن را به یک رشته خالی بازنشانی کنید. پاک کردن شناسه کاربر، سوابق موجود Crashlytics را حذف نمی کند. اگر نیاز به حذف سوابق مرتبط با شناسه کاربری دارید، با پشتیبانی Firebase تماس بگیرید .
سیاهههای مربوط به پودر سوخاری را دریافت کنید
گزارشهای Breadcrumb به شما درک بهتری از تعاملاتی که کاربر با برنامه شما منجر به خرابی، رویداد غیرکشنده یا ANR میکند، میدهد. این گزارشها میتوانند هنگام تلاش برای بازتولید و رفع اشکال یک مشکل مفید باشند.
گزارشهای Breadcrumb توسط Google Analytics ارائه میشوند، بنابراین برای دریافت گزارشهای breadcrumb، باید Google Analytics را برای پروژه Firebase خود فعال کنید و Firebase SDK برای Google Analytics را به برنامه خود اضافه کنید . هنگامی که این الزامات برآورده شد، هنگام مشاهده جزئیات یک مشکل، گزارشهای خرده نان به طور خودکار با دادههای رویداد در برگه گزارشها گنجانده میشوند.
Analytics SDK بهطور خودکار رویداد screen_view
ثبت میکند که به گزارشهای خرده نان امکان میدهد فهرستی از صفحههای مشاهده شده قبل از خرابی، رویداد غیرمرگبار یا ANR را نشان دهند. یک سیاهه پودر screen_view
حاوی یک پارامتر firebase_screen_class
است.
گزارشهای Breadcrumb همچنین با هر رویداد سفارشی که به صورت دستی در جلسه کاربر ثبت میکنید، پر میشوند، از جمله دادههای پارامتر رویداد. این دادهها میتوانند به نمایش مجموعهای از اقدامات کاربر منجر به خرابی، رویداد غیرکشنده یا ANR کمک کنند.
توجه داشته باشید که میتوانید جمعآوری و استفاده از دادههای Google Analytics را کنترل کنید ، که شامل دادههایی است که گزارشهای خرده نان را پر میکند.
فعال کردن گزارش انتخابی
به طور پیش فرض، Crashlytics به طور خودکار گزارش های خرابی را برای همه کاربران برنامه شما جمع آوری می کند. برای اینکه کاربران کنترل بیشتری بر روی دادههایی که ارسال میکنند، داشته باشید، میتوانید با غیرفعال کردن گزارشدهی خودکار و ارسال دادهها به Crashlytics فقط در صورت انتخاب در کد، گزارش انتخاب را فعال کنید:
غیرفعال کردن مجموعه خودکار به صورت بومی:
پلتفرم های اپل
یک کلید جدید به فایل
Info.plist
خود اضافه کنید:- کلید:
FirebaseCrashlyticsCollectionEnabled
- مقدار:
false
اندروید
در بلوک
application
فایلAndroidManifest.xml
خود، یک تگmeta-data
اضافه کنید تا مجموعه خودکار خاموش شود:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- کلید:
با فراخوانی لغو مجموعه داده های Crashlytics در زمان اجرا، مجموعه را برای کاربران منتخب فعال کنید.
مقدار لغو در سراسر راه اندازی برنامه شما باقی می ماند بنابراین Crashlytics می تواند به طور خودکار گزارش ها را جمع آوری کند. برای انصراف از گزارش خودکار خرابی، مقدار
false
به عنوان مقدار نادیده بگیرید. وقتی رویfalse
تنظیم می شود، مقدار جدید تا اجرای بعدی برنامه اعمال نمی شود.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
دادههای Crash Insights را مدیریت کنید
Crash Insights به شما کمک میکند با مقایسه ردیابیهای پشته ناشناس خود با ردیابیهای سایر برنامههای Firebase، مشکلات را حل کنید و به شما اطلاع میدهد که آیا مشکل شما بخشی از یک روند بزرگتر است. برای بسیاری از مسائل، Crash Insights حتی منابعی را برای کمک به شما در رفع اشکال خرابی فراهم می کند.
Crash Insights از دادههای خرابی انبوه برای شناسایی روندهای رایج پایداری استفاده میکند. اگر ترجیح میدهید دادههای برنامه خود را به اشتراک نگذارید، میتوانید از منوی Crash Insights در بالای فهرست مشکلات Crashlytics در کنسول Firebase ، از Crash Insights انصراف دهید.
،در داشبورد Crashlytics ، میتوانید روی یک مشکل کلیک کنید و گزارش رویداد مفصلی دریافت کنید. میتوانید آن گزارشها را سفارشی کنید تا به شما کمک کند بهتر بفهمید در برنامهتان چه اتفاقی میافتد و شرایط پیرامون رویدادهای گزارششده به Crashlytics .
استثناهای کشف نشده و استثناهای کشف شده را به Crashlytics گزارش دهید.
برنامه خود را برای ثبت کلیدهای سفارشی ، پیامهای گزارش سفارشی و شناسههای کاربر ابزار کنید.
اگر برنامه شما از Firebase SDK برای Google Analytics استفاده میکند، بهطور خودکار گزارشهای خرده نان را دریافت کنید. این گزارشها به شما امکان مشاهده اقدامات کاربر را میدهند که منجر به رویداد جمعآوریشده Crashlytics در برنامه شما میشود.
گزارش خودکار خرابی را خاموش کنید و گزارش انتخابی را برای کاربران خود فعال کنید . توجه داشته باشید که بهطور پیشفرض، Crashlytics بهطور خودکار گزارشهای خرابی بومی پلتفرم را برای همه کاربران برنامه شما جمعآوری میکند.
استثناهای کشف نشده را گزارش کنید
شما می توانید به طور خودکار تمام خطاهای "کشنده" را که در چارچوب فلوتر پرتاب می شوند ، با غلبه بر FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterFatalError
قرار دهید. از طرف دیگر ، برای گرفتن استثنائات "غیر کشنده" ، بر روی FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterError
:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
خطاهای ناهمزمان
خطاهای ناهمزمان توسط چارچوب Flutter گرفتار نمی شوند:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
برای رسیدن به چنین خطاهایی ، می توانید از PlatformDispatcher.instance.onError
Handler استفاده کنید:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
خطاهای خارج از فلاتر
برای رسیدن به خطاهایی که در خارج از زمینه Flutter اتفاق می افتد ، شنونده خطا را روی Isolate
فعلی نصب کنید:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
گزارش استثنائات گرفتار
Crashlytics علاوه بر گزارش خودکار تصادفات برنامه خود ، به شما امکان می دهد استثنائات غیر کشنده را ضبط کنید و دفعه بعد که یک رویداد کشنده گزارش می شود یا زمان شروع مجدد برنامه ، آنها را برای شما ارسال می کند.
از روش recordError
برای ضبط استثنائات غیر کشنده در بلوک های صید برنامه خود استفاده کنید. به عنوان مثال:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
همچنین ممکن است بخواهید اطلاعات بیشتری در مورد خطایی که با استفاده از ویژگی information
ممکن است وارد کنید:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
این استثنائات به عنوان مسائل غیر کشنده در کنسول Firebase ظاهر می شوند. The issue summary contains all the state information you normally get from crashes, along with breakdowns by version and hardware device.
Crashlytics استثنائات مربوط به یک موضوع پس زمینه اختصاصی را برای به حداقل رساندن تأثیر عملکرد در برنامه شما انجام می دهد. برای کاهش ترافیک شبکه کاربران ، Crashlytics در صورت لزوم تعداد گزارش های ارسال شده از دستگاه را محدود می کند.
کلیدهای سفارشی اضافه کنید
کلیدهای سفارشی به شما کمک می کنند وضعیت خاص برنامه خود را که منجر به تصادف می شود ، بدست آورید. شما می توانید جفت های کلید/مقدار دلخواه را با گزارش های Crash خود مرتبط کنید ، سپس از کلیدهای سفارشی برای جستجو و فیلتر گزارش های خرابی در کنسول Firebase استفاده کنید.
در داشبورد Crashlytics ، می توانید مواردی را جستجو کنید که با یک کلید سفارشی مطابقت داشته باشد.
هنگامی که در حال بررسی یک مسئله خاص در کنسول هستید ، می توانید کلیدهای سفارشی مرتبط را برای هر رویداد ( Keys Subtab) مشاهده کنید و حتی رویدادها را با کلیدهای سفارشی فیلتر کنید (منوی فیلتر در بالای صفحه).
برای تنظیم جفت های کلید/مقدار از روش setCustomKey
استفاده کنید. در اینجا چند نمونه آورده شده است:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
پیام های ورود به سیستم سفارشی را اضافه کنید
برای اینکه زمینه بیشتری برای وقایع منتهی به تصادف داشته باشید ، می توانید سیاهههای مربوط Crashlytics سفارشی را به برنامه خود اضافه کنید. Crashlytics سیاههها را با داده های خرابی شما مرتبط می کند و آنها را در کنسول Firebase ، در زیر برگه Crashlytics Logs نمایش می دهد.
log
برای کمک به مشکلات مشخص استفاده کنید. به عنوان مثال:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
شناسه های کاربر را تنظیم کنید
برای تشخیص یک مسئله ، اغلب مفید است که بدانید کدام یک از کاربران شما یک تصادف خاص را تجربه کرده اند. Crashlytics شامل راهی برای شناسایی ناشناس کاربران در گزارش های تصادف شما است.
برای افزودن شناسه های کاربر به گزارش های خود ، به هر کاربر یک شناسه منحصر به فرد را در قالب شماره شناسه ، نشانه یا مقدار هش داده اختصاص دهید:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
اگر بعد از تنظیم آن نیاز به پاک کردن شناسه کاربر دارید ، مقدار را در یک رشته خالی تنظیم کنید. پاکسازی شناسه کاربر سوابق موجود Crashlytics موجود را حذف نمی کند. اگر نیاز به حذف سوابق مرتبط با شناسه کاربر دارید ، با پشتیبانی Firebase تماس بگیرید .
سیاهههای مربوط به خرده فروش را دریافت کنید
سیاهههای مربوط به نان های نان درک بهتر از تعامل هایی که کاربر با برنامه شما داشت منجر به یک رویداد تصادف ، غیر کشنده یا ANR می شود. These logs can be helpful when trying to reproduce and debug an issue.
سیاهههای مربوط به Breadcrumb از Google Analytics استفاده می شوند ، بنابراین برای به دست آوردن سیاهههای مربوط به نان ، باید Google Analytics را برای پروژه Firebase خود فعال کرده و SDK Firebase را برای Google Analytics به برنامه خود اضافه کنید . پس از برآورده شدن این الزامات ، هنگام مشاهده جزئیات یک مسئله ، سیاهههای مربوط به نان به طور خودکار با داده های یک رویداد در برگه سیاههها گنجانده می شوند.
Analytics SDK به طور خودکار رویداد screen_view
را که باعث می شود سیاهههای مربوط به نان آتشی را قادر می سازد لیستی از صفحه نمایش های مشاهده شده قبل از تصادف ، غیر کشنده یا رویداد ANR را نشان دهد. A screen_view
breadcrumb log contains a firebase_screen_class
parameter.
Breadcrumb logs are also populated with any custom events that you manually log within the user's session, including the event's parameter data. This data can help show a series of user actions leading up to a crash, non-fatal, or ANR event.
Note that you can control the collection and use of Google Analytics data , which includes the data that populates breadcrumb logs.
گزارش دهی را فعال کنید
به طور پیش فرض ، Crashlytics به طور خودکار گزارش های خرابی را برای همه کاربران برنامه شما جمع می کند. برای کنترل بیشتر کاربران بر داده های ارسال شده ، می توانید با غیرفعال کردن گزارش خودکار و فقط ارسال داده ها به Crashlytics هنگام انتخاب کد خود ، گزارش دهی را فعال کنید:
مجموعه اتوماتیک را بصورت بومی خاموش کنید:
پلتفرم های اپل
یک کلید جدید به پرونده
Info.plist
خود اضافه کنید:- کلید:
FirebaseCrashlyticsCollectionEnabled
- مقدار:
false
اندروید
در بلوک
application
پروندهAndroidManifest.xml
خود ، یک برچسبmeta-data
را اضافه کنید تا مجموعه اتوماتیک را خاموش کنید:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- کلید:
با فراخوانی مجموعه داده های Crashlytics در زمان اجرا ، مجموعه را برای کاربران انتخاب کنید.
مقدار Override در راه اندازی برنامه شما ادامه دارد ، بنابراین Crashlytics می تواند به طور خودکار گزارش ها را جمع آوری کند. برای امتناع از گزارش تصادف اتوماتیک ، به عنوان مقدار
false
گرفته شود. هنگام تنظیمfalse
، مقدار جدید تا اجرای بعدی برنامه اعمال نمی شود.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
داده های بینش Crash را مدیریت کنید
Crash Insights به شما کمک می کند تا با مقایسه آثار پشته ناشناس خود در مورد اثری از سایر برنامه های Firebase ، مسائل را حل کنید و به شما اطلاع می دهد که آیا مسئله شما بخشی از یک روند بزرگتر است یا خیر. برای بسیاری از مسائل ، Crash Insights حتی منابعی را برای کمک به اشکال زدایی در مورد تصادف فراهم می کند.
Crash Insights از داده های سقوط جمع شده برای شناسایی روند پایداری مشترک استفاده می کند. اگر ترجیح می دهید داده های برنامه خود را به اشتراک نگذارید ، می توانید از منوی Crash Insights در بالای لیست شماره Crashlytics خود در کنسول Firebase خودداری کنید.
،در داشبورد Crashlytics ، می توانید روی یک مسئله کلیک کرده و گزارش رویداد مفصلی را دریافت کنید. شما می توانید این گزارش ها را سفارشی کنید تا به شما در درک بهتر آنچه در برنامه خود می افتد و شرایط مربوط به وقایع گزارش شده به Crashlytics .
استثنائات غیر آموخته را گزارش دهید و استثنائات مربوط به Crashlytics را گرفت.
برنامه خود را برای ورود به کلیدهای سفارشی ، پیام های ورود به سیستم سفارشی و شناسه های کاربر سازگار کنید.
اگر برنامه شما از Firebase SDK برای Google Analytics استفاده می کند ، به طور خودکار سیاهههای مربوط به خرده فروش را دریافت کنید. These logs give you visibility into user actions leading up to a Crashlytics -collected event in your app.
گزارش تصادف خودکار را خاموش کرده و گزارش دهی را برای کاربران خود فعال کنید . توجه داشته باشید که به طور پیش فرض ، Crashlytics به طور خودکار گزارش های خرابی بومی پلتفرم را برای همه کاربران برنامه شما جمع می کند.
استثنائات غیر آموخته را گزارش دهید
شما می توانید به طور خودکار تمام خطاهای "کشنده" را که در چارچوب فلوتر پرتاب می شوند ، با غلبه بر FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterFatalError
قرار دهید. از طرف دیگر ، برای گرفتن استثنائات "غیر کشنده" ، بر روی FlutterError.onError
با FirebaseCrashlytics.instance.recordFlutterError
:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
خطاهای ناهمزمان
Asynchronous errors are not caught by the Flutter framework:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
برای رسیدن به چنین خطاهایی ، می توانید از PlatformDispatcher.instance.onError
Handler استفاده کنید:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
خطاهای خارج از فلاتر
برای رسیدن به خطاهایی که در خارج از زمینه Flutter اتفاق می افتد ، شنونده خطا را روی Isolate
فعلی نصب کنید:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
گزارش استثنائات گرفتار
Crashlytics علاوه بر گزارش خودکار تصادفات برنامه خود ، به شما امکان می دهد استثنائات غیر کشنده را ضبط کنید و دفعه بعد که یک رویداد کشنده گزارش می شود یا زمان شروع مجدد برنامه ، آنها را برای شما ارسال می کند.
Use the recordError
method to record non-fatal exceptions in your app's catch blocks. به عنوان مثال:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
You may also want to log further information about the error which is possible using the information
property:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
These exceptions appear as non-fatal issues in the Firebase console. The issue summary contains all the state information you normally get from crashes, along with breakdowns by version and hardware device.
Crashlytics processes exceptions on a dedicated background thread to minimize the performance impact to your app. To reduce your users' network traffic, Crashlytics will rate-limit the number of reports sent off device, if necessary.
Add custom keys
Custom keys help you get the specific state of your app leading up to a crash. You can associate arbitrary key/value pairs with your crash reports, then use the custom keys to search and filter crash reports in the Firebase console.
In the Crashlytics dashboard , you can search for issues that match a custom key.
When you're reviewing a specific issue in the console, you can view the associated custom keys for each event ( Keys subtab) and even filter the events by custom keys ( Filter menu at the top of the page).
Use the setCustomKey
instance method to set key/value pairs. در اینجا چند نمونه آورده شده است:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
Add custom log messages
To give yourself more context for the events leading up to a crash, you can add custom Crashlytics logs to your app. Crashlytics associates the logs with your crash data and displays them in the Firebase console , under the Crashlytics Logs tab.
Use log
to help pinpoint issues. به عنوان مثال:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Set user identifiers
To diagnose an issue, it's often helpful to know which of your users experienced a given crash. Crashlytics includes a way to anonymously identify users in your crash reports.
To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
If you ever need to clear a user identifier after you set it, reset the value to a blank string. Clearing a user identifier does not remove existing Crashlytics records. If you need to delete records associated with a user ID, contact Firebase support .
Get breadcrumb logs
Breadcrumb logs give you a better understanding of the interactions that a user had with your app leading up to a crash, non-fatal, or ANR event. These logs can be helpful when trying to reproduce and debug an issue.
Breadcrumb logs are powered by Google Analytics, so to get breadcrumb logs, you need to enable Google Analytics for your Firebase project and add the Firebase SDK for Google Analytics to your app. Once these requirements are met, breadcrumb logs are automatically included with an event's data within the Logs tab when you view the details of an issue.
The Analytics SDK automatically logs the screen_view
event which enables the breadcrumb logs to show a list of screens viewed before the crash, non-fatal, or ANR event. A screen_view
breadcrumb log contains a firebase_screen_class
parameter.
Breadcrumb logs are also populated with any custom events that you manually log within the user's session, including the event's parameter data. This data can help show a series of user actions leading up to a crash, non-fatal, or ANR event.
Note that you can control the collection and use of Google Analytics data , which includes the data that populates breadcrumb logs.
Enable opt-in reporting
By default, Crashlytics automatically collects crash reports for all your app's users. To give users more control over the data they send, you can enable opt-in reporting by disabling automatic reporting and only sending data to Crashlytics when you choose to in your code:
Turn off automatic collection natively:
پلتفرم های اپل
Add a new key to your
Info.plist
file:- Key:
FirebaseCrashlyticsCollectionEnabled
- Value:
false
اندروید
In the
application
block of yourAndroidManifest.xml
file, add ameta-data
tag to turn off automatic collection:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Key:
Enable collection for select users by calling the Crashlytics data collection override at runtime.
The override value persists across launches of your app so Crashlytics can automatically collect reports. To opt out of automatic crash reporting, pass
false
as the override value. When set tofalse
, the new value does not apply until the next run of the app.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Manage Crash Insights data
Crash Insights helps you resolve issues by comparing your anonymized stack traces to traces from other Firebase apps and letting you know if your issue is part of a larger trend. For many issues, Crash Insights even provides resources to help you debug the crash.
Crash Insights uses aggregated crash data to identify common stability trends. If you'd prefer not to share your app's data, you can opt-out of Crash Insights from the Crash Insights menu at the top of your Crashlytics issue list in the Firebase console .