Реалізація Session Replay (запис сесії користувача) для мобільного застосунку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація Session Replay (запис сесії користувача) для мобільного застосунку
Складний
~5 днів
Часті запитання

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

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація Session Replay (запис сесії користувача) для мобільного додатку

Session Replay на мобільних пристроях — технічно складніше, ніж у вебі. Браузер завжди рендерить DOM, який можна серіалізувати. Мобільний додаток рендерить нативний UI через UIKit, Jetpack Compose або Flutter engine, і «снімок» цього стану вимагає або скриншотів, або захоплення wireframe представлення View-ієрархії.

Погана реалізація Session Replay споживає 10–20% додаткового CPU та 100–200KB мережевого трафіку на хвилину. Хороша — невидима для користувача.

Два підходи до запису

Screenshot-based (UXCam, Smartlook, деякі режими Datadog): робить снімки екрана з заданим інтервалом (зазвичай 1–5 fps), маскує чутливі області, відправляє на сервер. Точно передає візуальний стан, включаючи кастомні View та WebView. Недолік: великий обсяг даних, складність маскування динамічного контенту.

Wire-frame / View-tree based (Sentry, деякі режими Datadog): серіалізує ієрархію View з позиціями, кольорами та текстом, відтворює UI на сервері через шаблони. Легше по трафіку та CPU, але WebView та кастомна графіка не відтворюються точно.

Реалізація через Sentry Session Replay

Sentry Session Replay для мобільних доступен з SDK 8.x. Використовує wireframe підхід:

// iOS
import Sentry

SentrySDK.start { options in
    options.dsn = "https://[email protected]/project"
    options.experimental.sessionReplay = SentryReplayOptions(
        sessionSampleRate: 0.1,    // 10% випадкових сесій
        onErrorSampleRate: 1.0     // 100% сесій з крахом/помилкою
    )
}
// Android
SentryAndroid.init(this) { options ->
    options.dsn = "https://[email protected]/project"
    options.experimental.sessionReplay.apply {
        sessionSampleRate = 0.1
        onErrorSampleRate = 1.0
    }
}

onErrorSampleRate = 1.0 — ключовий параметр. Це значить: записувати replay для всіх сесій, де сталася помилка. SDK буферизує останні N секунд replay у пам'яті та відправляє їх разом з error report. Так ви бачите, що саме робив користувач до крахе.

Маскування чутливих даних

За замовчуванням Sentry маскує UITextField та поля з isSecureTextEntry = true. Цього недостатньо — потрібно також приховувати дані карток, персональні дані та OTP-поля.

// 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()
// Compose
Text(
    text = cardNumber,
    modifier = Modifier.sentryReplayMask()
)

Інтеграція з крах-репортами

Найцінніша функція Session Replay — link з крах-репорта на запис сесії. У Sentry це працює автоматично: якщо в момент помилки був активний replay-буфер, у Issue з'являється кнопка «Watch Session Replay».

Це змінює процес дебаггінгу: замість відтворення за кроками з описання користувача — дивишся запис та бачиш точно, що сталося.

Налаштування Datadog Session Replay

Datadog підтримує два режими: wireframe (за замовчуванням) та screenshot. Screenshot включається явно:

import DatadogSessionReplay

SessionReplay.enable(
    with: SessionReplay.Configuration(
        replaySampleRate: 20, // 20% сесій
        defaultPrivacyLevel: .maskUserInput
    )
)

Datadog Session Replay пов'язується з RUM View — у інтерфейсі можна відкрити конкретний View та подивитися replay саме цього екрана, з метриками (latency, FPS) на таймлайні.

Продуктивність та overhead

Тестування Sentry wireframe режиму на production пристроях показує:

Показник Overhead
CPU (background sampling) < 1%
Memory (буфер 60 сек) ~8–15 MB
Мережевий трафік (при відправці) ~50–150 KB/хвилина
Серіалізація View-tree < 2ms per frame

Screenshot-based режими дороже: CPU 3–8%, трафік 200–500 KB/хвилина при 2 fps.

Що ми робимо

  • Вибираємо інструмент та режим запису під вимоги безпеки та продуктивності
  • Підключаємо SDK з onErrorSampleRate = 1.0 для запису сесій з помилками
  • Налаштовуємо маскування всіх екранів та елементів з персональними даними
  • Верифікуємо маскування через Privacy Audit у Sentry/Datadog UI
  • Налаштовуємо link replay → crash report для швидкої діагностики

Часові оцінки

Базова настройка з маскуванням: 2–3 дні. Повна інтеграція з аудитом приватності: 4–5 днів. Ціна розраховується індивідуально.