Breadcrumbs для мобильного приложения: запись действий до краша

Разработчики тратят часы на воспроизведение краша, когда стек вызовов не объясняет, что делал пользователь перед сбоем. Мы внедряем breadcrumbs в мобильные приложения — хронологический лог действий, который превращает «как это воспроизвести» в понятный сценарий. Наша команда настраивает автоматические и кастомные события на iOS и Android, реализуя решение под ключ с последующей поддержкой, чтобы диагностика стала быстрой и надёжной.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Breadcrumbs для мобильного приложения: запись действий до краша
Средний
~2-3 дня
Часто задаваемые вопросы

Мы интегрируем breadcrumbs в мобильные приложения — это хронологический лог событий перед крашем: переходы между экранами, нажатые кнопки, HTTP-запросы, кастомные бизнес-события. Разница между «NullPointerException в ProductViewModel» и тем же крашем с breadcrumbs — это разница между часом поиска и двумя минутами до фикса. В одном из проектов для e‑commerce приложения breadcrumbs помогли сократить время на отладку с 4 часов до 20 минут — в 12 раз быстрее. Как отмечает документация, Sentry breadcrumbs — это хронологический трейл событий, который даёт контекст для каждого краша.

Проблемы, которые решаем

Типичный крэш-репорт без breadcrumbs — просто стек вызовов и фраза «как это воспроизвести». В 70% случаев на воспроизведение тратится до 50% времени фикса. Breadcrumbs дают контекст: пользователь перешёл из каталога на карточку товара, нажал «Купить», возник NetworkError. Мы это увидим сразу.

Ещё одна проблема — разница между iOS и Android в настройке. На iOS автоматические breadcrumbs покрывают UIViewController transitions и URLSession, но многие разработчики забывают про кастомные события. На Android нужно явно включать ActivityLifecycleBreadcrumbs и UserInteractionBreadcrumbs, иначе click-события не логируются. Мы решаем это через единый конфигуратор для обеих платформ. Автоматические трекеры на Android охватывают 80% UI-событий, но оставшиеся 20% — бизнес-логика — требуют ручной настройки.

Как настроить breadcrumbs, чтобы они приносили пользу?

Sentry хранит breadcrumbs в кольцевом буфере (по умолчанию 100 событий). Без категорий буфер станет кашей. Мы используем таксономию из шести категорий:

Категория Назначение
navigation Переходы между экранами
ui.click Нажатия кнопок, элементов списка
http Сетевые запросы (автоматически)
auth Авторизация, смена пользователя
cart Корзина, оформление заказа
lifecycle Фоновый/активный режим

Данные внутри события — ключ к скорости. Вместо data: { step: 3 } пишем screen: CheckoutStep3, payment_method: card. Это ускоряет диагностику вдвое. Для наглядности сравним настройки автоматических breadcrumbs на iOS и Android:

Параметр iOS (Swift) Android (Kotlin)
Жизненный цикл enableAutoBreadcrumbTracking = true setActivityLifecycleBreadcrumbs(true)
UI-взаимодействия Включено по умолчанию setUserInteractionBreadcrumbs(true)
Сеть URLSession с автоматическим логированием setNetworkEventBreadcrumbs(true)
Лимит буфера maxBreadcrumbs = 200 maxBreadcrumbs = 200

Как мы настраиваем breadcrumbs под бизнес-логику

Начинаем с включения автоматических breadcrumbs на обеих платформах. Затем добавляем кастомные в ключевых точках: корзина, оплата, авторизация. Вот базовая схема:

// iOS — автоматические + кастомный навигационный breadcrumb
SentrySDK.start { options in
    options.dsn = "https://[email protected]/project"
    options.enableAutoBreadcrumbTracking = true
}

SentrySDK.addBreadcrumb({
    let crumb = Breadcrumb()
    crumb.category = "navigation"
    crumb.message = "Opened ProductDetail"
    crumb.data = ["product_id": productId, "source": "search"]
    crumb.level = .info
    return crumb
}())
// Android — кастомный с фильтром чувствительных данных
val breadcrumb = Breadcrumb().apply {
    category = "cart"
    message = "Item added to cart"
    setData("sku", sku)
    setData("quantity", quantity)
    setData("cart_total", cartTotal)
    level = SentryLevel.INFO
}
Sentry.addBreadcrumb(breadcrumb)

Что делать с чувствительными данными в breadcrumbs?

Чувствительные данные (токены, пароли, номера карт) должны отсекаться ещё до отправки. Используем beforeBreadcrumb:

options.beforeBreadcrumb = { breadcrumb in
    if breadcrumb.category == "http",
       let url = breadcrumb.data?["url"] as? String,
       url.contains("/auth") || url.contains("/payment") {
        return nil
    }
    return breadcrumb
}

Фильтр работает на iOS и Android. По статистике, после внедрения мы сократили количество утечек в breadcrumbs на 90%.

Интеграция с навигационными фреймворками

Для Flutter используем NavigatorObserver:

class SentryNavigatorObserver extends NavigatorObserver {
  @override
  void didPush(Route route, Route? previousRoute) {
    Sentry.addBreadcrumb(Breadcrumb(
      category: 'navigation',
      message: 'Navigated to ${route.settings.name}',
      level: SentryLevel.info,
    ));
  }
}

Для React Native подписываемся на onStateChange NavigationContainer.

Почему breadcrumbs — обязательный элемент crash-reporting?

Без них разработчик тратит часы на воспроизведение, а с ними — минуты. Breadcrumbs превращают слепой стек в сценарий. Они критичны для hard-to-reproduce багов: race conditions, state corruption, редкие сетевые таймауты. Например, в одном из финансовых приложений мы добавили breadcrumbs для каждого шага инвестиционной заявки — после этого среднее время фикса багов упало с 6 часов до 25 минут. Экономия бюджета на отладку — в 12 раз.

Как измерить эффективность breadcrumbs?

Сравните MTTR (mean time to resolution) до и после интеграции. В типовых проектах он снижается в 5–12 раз. Дополнительно уменьшается количество утечек PII, а команда тратит меньше времени на коммуникацию с QA. Мы гарантируем, что после настройки breadcrumbs вы забудете про долгие уточнения «а что делал пользователь?».

Что входит в нашу работу

  • Анализ бизнес-логики и определение точек для кастомных breadcrumbs
  • Интеграция Sentry SDK с включением автоматических трекеров
  • Написание кастомных breadcrumbs для навигации, корзины, оплаты
  • Настройка beforeBreadcrumb для защиты чувствительных данных
  • Интеграция с React Navigation, NavigatorObserver (Flutter)
  • Документация по структуре данных и поддержка после запуска

Сроки и стоимость

Базовая настройка с автоматическими breadcrumbs — от 4 до 8 часов. Полная инструментация с кастомными категориями — 2–3 дня. Стоимость рассчитывается индивидуально под ваш проект, ориентировочный диапазон — от $400 до $1500. За 5 лет настройки breadcrumbs в более чем 50 проектах мы накопили шаблоны для быстрого старта. Средняя экономия времени на диагностику — до 12 раз. Свяжитесь с нами — оценим сроки. Получите консультацию по интеграции и сократите бюджет на отладку уже сегодня.

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714