Ошибки не должны быть безмолвными: Sentry, Firebase Crashlytics и Datadog в одном Flutter-приложении

Для Flutter-приложения предлагается гибридная схема мониторинга: Firebase Crashlytics быстро выявляет массовые сбои, Sentry помогает разбирать редкие ошибки по контексту, а Datadog RUM связывает ошибки с производительностью и сетевыми задержками.

Глобальный перехват строится на трёх механизмах Flutter: FlutterError.onError для ошибок виджетов, PlatformDispatcher.instance.onError для асинхронных ошибок и изолятов, runZonedGuarded для ошибок внутри зон. При использовании Zones инициализация WidgetsFlutterBinding и запуск runApp должны происходить в одной зоне, иначе Flutter начиная с версии 3.10 выводит предупреждение.

Crashlytics подходит для фатальных и приоритетных non-fatal ошибок, показывает долю затронутых пользователей и позволяет добавлять custom keys с экраном, состоянием корзины или способом оплаты. Sentry дополняет стектрейс цепочкой действий пользователя, сетевыми запросами, тегами и контекстом приложения, поэтому помогает воспроизводить сложные сбои бизнес-логики.

Datadog Real User Monitoring отслеживает загрузку экранов, фризы, FPS и задержки API, связывая их с конкретной пользовательской сессией. Ошибки можно одновременно отправлять во все три системы, но персональные идентификаторы следует анонимизировать, а вместо белого экрана пользователю показывать резервный интерфейс через ErrorWidget.builder.

Коротко

  • Non-fatal ошибки в Crashlytics группируются отдельно и не ухудшают показатель пользователей без сбоев.
  • Breadcrumbs в Sentry фиксируют навигацию, API-запросы и действия в бизнес-логике перед возникновением ошибки.
  • Datadog RUM отслеживает загрузку экранов, фризы интерфейса, FPS и задержки сетевых запросов.
  • Идентификаторы пользователей в отчётах об ошибках рекомендуется анонимизировать, например хешировать email.
  • ErrorWidget.builder позволяет заменить белый экран понятным сообщением с предложением перезапустить приложение.

FAQ

Зачем подключать Crashlytics, Sentry и Datadog одновременно, если каждый из сервисов уже умеет собирать ошибки приложения?

Crashlytics быстрее показывает масштаб сбоя, Sentry сохраняет подробный контекст, а Datadog связывает ошибки с производительностью и сетевыми запросами.

Как в Flutter перехватить ошибки виджетов, асинхронного кода, изолятов и зон, чтобы они не потерялись между системами мониторинга?

Для этого используют FlutterError.onError, PlatformDispatcher.instance.onError и при необходимости runZonedGuarded. Обработчики могут передавать одну ошибку сразу в несколько сервисов.

Какие данные следует добавлять к отчётам об ошибках и какие ограничения нужно учитывать при работе с пользовательским контекстом?

Полезны экран, версия приложения, состояние сценария, действия пользователя и параметры запроса. Персональные данные и идентификаторы нужно минимизировать или анонимизировать.

Читайте также

  1. OpenAI расширяет ChatGPT Health и заявляет о медицинских рассуждениях выше уровня клиницистов
  2. Как приложение для транскрибации YouTube-видео вышло на $3000+ в месяц
  3. Сколько стоит контроль над ИИ-агентом? Считаем экономику
  4. Как я склеиваю 23 тысячи событий из пяти афиш — и почему дедуп нельзя делать необратимым
  5. Как показывать клиентам документацию из приватного репозитория, не открывая им доступ к репозиторию
Ключевые инсайты из новости (по версии ChatGPT)
  • Разделение ролей между Crashlytics, Sentry и Datadog: В гибридной схеме Firebase Crashlytics используют для быстрого выявления массовых сбоев и оценки числа затронутых пользователей. Sentry отвечает за разбор редких ошибок по цепочке действий, а Datadog RUM связывает инциденты с загрузкой экранов, фризами и сетевыми задержками.
    [Наблюдаемость]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!