Краш в продакшене, который не воспроизводится на тестовых устройствах, — частая боль мобильных команд. Session Replay даёт точную запись действий пользователя за секунды до ошибки, сокращая время поиска причины в 2–3 раза. За 15+ проектов (от финтеха до e-commerce) мы выработали практики, позволяющие записывать сессии с overhead менее 1% и полной маскировкой персональных данных, соответствующей GDPR и PCI DSS.
Что такое Session Replay и зачем он нужен?
Session Replay — технология, которая фиксирует все действия пользователя: тапы, скроллы, ввод текста. Полученная запись позволяет в точности воспроизвести сессию, что критически важно для отладки ошибок и анализа UX. Отличается от логирования тем, что даёт полную визуальную картину. При этом запись не требует вмешательства пользователя и работает в фоне.
Screenshot или Wire-frame: что выбрать?
Screenshot-based (UXCam, Smartlook) делает снимки экрана с частотой 1–5 fps, маскирует чувствительные области и отправляет на сервер. Точно передаёт кастомные View и WebView, но требует 200–500 KB трафика/мин и нагружает CPU на 3–8%.
Wire-frame based (Sentry, Datadog) сериализует View-иерархию — позиции, цвета, текст — и воспроизводит UI на сервере по шаблонам. Объём данных 50–150 KB/мин, CPU нагрузка < 1%. WebView и сложная графика не передаются точно. Выбор зависит от приоритета: точность или производительность.
| Параметр | Screenshot-based | Wire-frame based |
|---|---|---|
| CPU (background) | 3–8% | < 1% |
| Трафик (мин) | 200–500 KB | 50–150 KB |
| Точность | Высокая (все элементы) | Средняя (пропуск WebView) |
Как Session Replay помогает отлаживать краши?
Sentry SR для мобильных доступен с SDK 8.x, использует wire-frame подход. Ключевой параметр onErrorSampleRate = 1.0 — записывать replay для всех сессий с ошибкой. SDK буферизует последние N секунд в памяти и отправляет вместе с error report. Подробнее в документации Sentry Session Replay.
// iOS import Sentry SentrySDK.start { options in options.dsn = "https://[email protected]/project" options.experimental.sessionReplay = SentryReplayOptions( sessionSampleRate: 0.1, onErrorSampleRate: 1.0 ) } // Android SentryAndroid.init(this) { options -> options.dsn = "https://[email protected]/project" options.experimental.sessionReplay.apply { sessionSampleRate = 0.1 onErrorSampleRate = 1.0 } } Как настроить маскировку чувствительных данных?
По умолчанию Sentry маскирует UITextField и поля с isSecureTextEntry = true. Этого недостаточно — нужно скрывать номера карт, персональные данные, OTP-поля. Пример для iOS и Android:
// iOS — маркировка View для маскировки class PaymentCardView: UIView { override func didMoveToWindow() { super.didMoveToWindow() SentrySDK.replay.maskView(self) } } // Android — маскировка через тег val cardNumberField = findViewById<EditText>(R.id.cardNumber) cardNumberField.setTag(io.sentry.android.replay.Recorder.MASK_TAG, true) Для SwiftUI и Jetpack Compose используйте модификаторы:
// SwiftUI Text(userEmail).sentryReplayMask() // Kotlin Compose Text(text = cardNumber, modifier = Modifier.sentryReplayMask()) Мы гарантируем, что маскировка проходит аудит приватности в соответствии с GDPR и PCI DSS. Верификация осуществляется через Privacy Audit в Sentry/Datadog UI.
Интеграция с crash reports
В Sentry реплей автоматически прикрепляется к error report. В Datadog Session Replay связывается с RUM View — можно открыть экран и посмотреть replay с метриками (latency, FPS) на таймлайне.
Чек-лист внедрения
- Выбор инструмента (Sentry / Datadog) под стек и бюджет.
- Подключение SDK и настройка sample rate (onError = 1.0, session = 0.1).
- Маркировка всех чувствительных экранов и полей (маскировка).
- Проведение Privacy Audit.
- Интеграция с существующими crash reports.
- Документация по настройке и команда на поддержку.
Сравнение инструментов: Sentry vs Datadog
| Критерий | Sentry Session Replay | Datadog Session Replay |
|---|---|---|
| Режим записи | Wire-frame (по умолчанию) | Wire-frame + screenshot |
| Маскировка | Автоматическая + ручная | Автоматическая (maskUserInput) |
| Интеграция с ошибками | Автоматическая (error report) | Через RUM |
| CPU нагрузка | < 1% | 1–3% (wire-frame) |
Sentry wire-frame лучше по CPU, чем UXCam screenshot-режим, в 2–3 раза. Если нужна точная запись WebView — подойдёт Datadog в screenshot-режиме (CPU 3–8%).
Что входит в нашу работу по внедрению Session Replay
При заказе услуги вы получаете:
- Аудит существующего приложения: определение чувствительных экранов и полей.
- Выбор оптимального инструмента и подхода (screenshot/wire-frame).
- Подключение SDK с настройкой sample rate и маскировки.
- Разработку кастомных маскировок для специфических элементов UI.
- Проведение Privacy Audit с формированием отчёта.
- Интеграцию с вашей системой мониторинга ошибок (Sentry/Datadog).
- Документацию по настройке и рекомендации для команды.
- Поддержку на этапе тестирования и деплоя.
Процесс внедрения Session Replay
Внедрение проходит в 5 этапов:
- Аналитика — определяем экраны и чувствительные поля, выбираем инструмент (Sentry или Datadog).
- Подключение SDK — настройка
onErrorSampleRate = 1.0,sessionSampleRate, конфигурация DSN. - Настройка маскировки — маркировка всех полей ввода, карточных данных, OTP.
- Тестирование — проверка маскировки, Privacy Audit.
- Деплой — публикация в магазины, мониторинг метрик.
Пример: для финтех-проекта мы настроили маскировку 15 экранов за 2 дня. После аудита убедились, что ни один чувствительный символ не попал в запись.
Сроки и стоимость
Базовое подключение с маскировкой: 2–3 дня. Полная интеграция с аудитом приватности: 4–5 дней. Стоимость рассчитывается индивидуально. Экономия времени на отладку крашей после внедрения составляет до 60% — для команды из 5 разработчиков это может составлять существенную экономию в месяц.
Свяжитесь с нами для консультации по интеграции Session Replay. Получите оценку вашего проекта и рекомендации по инструменту.







