| Выберите платформу: | iOS+ Android Flutter Unity |
Нажмите на проблему, чтобы получить подробный отчет о событии на панели управления DevOps & Engagement > Crashlytics в консоли Firebase. Вы можете настроить эти отчеты, чтобы лучше понимать, что происходит в вашем приложении, и обстоятельства, связанные с событиями, которые передаются в 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'],
);
Эти исключения отображаются как некритические ошибки на панели DevOps & Engagement > Crashlytics в консоли Firebase. Сводка проблемы содержит всю информацию о состоянии, которую вы обычно получаете при сбоях, а также разбивку по версии и устройству.
Crashlytics обрабатывает исключения в отдельном фоновом потоке, чтобы минимизировать влияние на производительность приложения. Чтобы снизить сетевой трафик пользователей, Crashlytics при необходимости будет ограничивать количество отчетов, отправляемых с устройства.
Как добавить специальные ключи
Специальные ключи помогают получить информацию о состоянии приложения непосредственно перед сбоем. Вы можете связать с отчетами о сбоях произвольные пары "ключ-значение", а затем использовать специальные ключи для поиска и фильтрации отчетов на панели DevOps & Engagement > Crashlytics в консоли Firebase.
На панели мониторинга можно искать проблемы, соответствующие специальному ключу.
При просмотре определенной проблемы на панели управления можно посмотреть связанные с каждым событием специальные ключи (вкладка Ключи) и даже отфильтровать события по специальным ключам (меню Фильтр в верхней части страницы).
Чтобы задать пары "ключ-значение", используйте метод экземпляра 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 связывает журналы с данными о сбоях и показывает их на вкладке Журналы, когда вы просматриваете сведения о проблеме (все проблемы можно найти на панели управления Crashlytics в разделе DevOps и вовлечение консоли Firebase).
Используйте log, чтобы выявлять проблемы. Пример:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Как задать идентификаторы пользователей
Чтобы диагностировать проблему, часто полезно знать, у каких пользователей произошел сбой. Crashlytics позволяет анонимно идентифицировать пользователей в отчетах о сбоях.
Чтобы добавить идентификаторы пользователей в отчеты, назначьте каждому пользователю уникальный идентификатор в виде номера, токена или хешированного значения:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Если вам нужно удалить идентификатор пользователя после того, как вы его задали, сбросьте значение до пустой строки. При удалении идентификатора пользователя существующие записи не удаляются. Crashlytics Если вам нужно удалить записи, связанные с идентификатором пользователя, обратитесь в службу поддержки Firebase.
Как получить журналы навигации
Журналы навигации позволяют лучше понять, как пользователь взаимодействовал с приложением до сбоя, некритической ошибки или события ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Журналы цепочки навигации создаются на основе данных Google Аналитики, поэтому, чтобы их получать, вам нужно включить Google Аналитику для проекта Firebase и добавить в приложение Firebase SDK для Google Analytics. После этого журналы цепочки навигации будут автоматически включаться в данные о событиях на вкладке Журналы при просмотре сведений о проблеме (все проблемы можно найти на панели DevOps и вовлеченность > Crashlytics в консоли Firebase).
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 вы можете устранять проблемы, сравнивая анонимизированные трассировки стека с трассировками из других приложений Firebase и узнавая, является ли ваша проблема частью более масштабной тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, которые помогут вам отладить сбой.
Инструмент "Аналитика сбоев" использует агрегированные данные о сбоях, чтобы выявлять общие тенденции стабильности. Если вы не хотите делиться данными приложения, вы можете отключить функцию "Анализ сбоев" в меню Анализ сбоев вверху списка проблем на панели DevOps и вовлеченность > Crashlytics в консоли Firebase.
Дальнейшие действия
- Экспортируйте данные в BigQuery или Cloud Logging, чтобы использовать расширенные функции анализа, например отправлять запросы к данным, создавать собственные сводки и настраивать специальные оповещения.