| Выберите платформу: | iOS+ Android Flutter Unity |
На панели управления 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
Чтобы перехватывать ошибки, возникающие вне контекста 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 .
Используйте log для выявления проблем. Например:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Установить идентификаторы пользователей
Для диагностики проблемы часто полезно знать, у каких именно пользователей произошёл сбой. Crashlytics позволяет анонимно идентифицировать пользователей в отчётах о сбоях.
Чтобы добавить идентификаторы пользователей в отчеты, присвойте каждому пользователю уникальный идентификатор в виде идентификационного номера, токена или хешированного значения:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Если вам когда-либо потребуется удалить идентификатор пользователя после его установки, установите значение на пустую строку. Удаление идентификатора пользователя не приводит к удалению существующих записей Crashlytics . Если вам необходимо удалить записи, связанные с идентификатором пользователя, обратитесь в службу поддержки Firebase .
Получите хлебные крошки
Журналы "хлебных крошек" позволяют лучше понять взаимодействие пользователя с вашим приложением, предшествовавшее сбою, некритической ошибке или событию ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Отслеживание событий с помощью Google Analytics осуществляется на основе навигационной цепочки, поэтому для получения таких данных необходимо включить Google Analytics для вашего проекта Firebase и добавить SDK Firebase для Google Analytics в ваше приложение. После выполнения этих требований данные автоматически будут добавляться к данным события на вкладке «Журналы» при просмотре подробностей проблемы.
Analytics SDK автоматически регистрирует событие screen_view , что позволяет отображать в навигационной цепочке список экранов, просмотренных до сбоя, некритического события или события ANR. В навигационной цепочке screen_view содержится параметр firebase_screen_class .
В журналы "хлебных крошек" также добавляются любые пользовательские события , которые вы регистрируете вручную в рамках сеанса пользователя, включая данные параметров события. Эти данные могут помочь отобразить последовательность действий пользователя, приведших к сбою, некритическому событию или событию ANR.
Обратите внимание, что вы можете контролировать сбор и использование данных Google Analytics , включая данные, используемые для заполнения навигационной цепочки.
Включить возможность добровольной подачи отчетов
По умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения. Чтобы предоставить пользователям больше контроля над отправляемыми данными, вы можете включить отправку отчетов по желанию, отключив автоматическую отправку и отправляя данные в Crashlytics только тогда, когда вы сами этого захотите в своем коде.
Отключить автоматический сбор данных в настройках системы:
платформы Apple
Добавьте новый ключ в файл
Info.plist:- Ключ:
FirebaseCrashlyticsCollectionEnabled - Значение:
false
Android
В блоке
applicationфайла `AndroidManifest.xmlдобавьте метатегmeta-data, чтобы отключить автоматический сбор данных:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />- Ключ:
Включите сбор данных для отдельных пользователей, вызвав переопределение метода сбора данных Crashlytics во время выполнения. Значение переопределения сохраняется при всех последующих запусках вашего приложения, поэтому Crashlytics может автоматически собирать отчеты для этого пользователя.
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);Если пользователь впоследствии откажется от сбора данных, вы можете передать значение
falseв качестве параметра переопределения, которое будет применено при следующем запуске приложения пользователем и сохранится при всех последующих запусках для этого пользователя.
Управление данными Crash Insights
Crash Insights помогает решать проблемы, сравнивая анонимизированные трассировки стека с трассировками других приложений Firebase и сообщая, является ли ваша проблема частью более масштабной тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы для отладки сбоя.
Crash Insights использует агрегированные данные о сбоях для выявления общих тенденций стабильности. Если вы предпочитаете не делиться данными своего приложения, вы можете отказаться от использования Crash Insights в меню Crash Insights в верхней части списка проблем Crashlytics в консоли Firebase .