Вы запустили мобильное приложение, но конверсия падает, а аналитика не показывает, где именно пользователи спотыкаются. Sentry и Datadog фиксируют ошибки, но не дают ответа на вопрос «почему» касания не сработали. Мы подключаем UXCam — сервис записи сессий, тепловых карт и анализа жестов. За 1–2 дня интегрируем SDK под ключ, настроим маскировку чувствительных данных и тегирование экранов, чтобы ваша UX-команда видела реальные сессии пользователей, отфильтрованные по событиям и свойствам. Наш опыт — более 50 успешных интеграций в iOS и Android проектах, гарантия качества на всех этапах. Экономия времени анализа — до 30% за счёт готовых воронок и тепловых карт.
Почему UXCam, а не Sentry или Hotjar?
UXCam специализируется на мобильных UX-исследованиях. Вот ключевые отличия:
| Критерий | UXCam | Sentry | Hotjar |
|---|---|---|---|
| Фокус | Мобильные UX | Ошибки и крэши | Веб и десктоп |
| Запись жестов (тапы, скроллы) | Да | Нет | Ограничено |
| Тепловые карты | Тапы, жесты, зоны | Нет | Клики (веб) |
| Маскировка данных | Автоматическая + UI-тэги | N/A | Поля ввода |
| Фильтрация сессий | По событиям, свойствам | По ошибкам | По страницам |
| API для событий | Нативное SDK | REST API | JavaScript |
В отличие от Sentry, UXCam записывает видео сессии с жестами, что позволяет увидеть, где пользователь зависает и что тапает зря. Для мобильных проектов это незаменимый инструмент.
Установка и настройка SDK
iOS (Swift Package Manager)
// 1. Подключение через SPM (Package.swift)
// .package(url: "https://github.com/uxcam/ios-sdk", from: "3.6.0")
// 2. Инициализация в AppDelegate
import UXCam
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = UXCamConfiguration(appKey: "YOUR_APP_KEY")
config.enableAdvancedGestureRecognizers = true
UXCam.startWithConfiguration(config)
return true
}
// 3. Маскировка чувствительных View
UXCam.occlude(view: cardNumberView, hideGestures: true)
// Скроет весь экран оплаты
UXCam.tagScreenName("Payment", isOccluded: true)
// 4. Тегирование экранов (в viewDidAppear)
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UXCam.tagScreenName("Product Detail")
}
// 5. Кастомное событие
UXCam.logEvent("add_to_cart", withProperties: [
"product_id": product.id,
"category": product.category,
"price": product.price
])
// 6. Свойства пользователя
UXCam.setUserProperty("plan", value: "premium")
// 7. Семплинг: записывать только 30% сессий
// (установить в config до старта)
config.userAppKey = "YOUR_APP_KEY" // для семплирования
// 8. Принудительное завершение сессии
UXCam.stopSessionAndUploadData()
Android (Kotlin/Gradle)
// 1. Подключение через Gradle
// implementation("com.uxcam:uxcam:3.+")
// 2. Инициализация в Application.onCreate()
val config = UXCamConfiguration.Builder("YOUR_APP_KEY")
.enableAdvancedGestureRecognizers(true)
.build()
UXCam.startWithConfiguration(config)
// 3. Маскировка View
UXCam.occludeSensitiveView(binding.cardNumberField)
// Весь экран оплаты
UXCam.tagScreenName("Payment", isOccluded: true)
// 4. Тегирование экрана (в Fragment.onResume())
override fun onResume() {
super.onResume()
UXCam.tagScreenName("Product Detail")
}
// 5. Кастомное событие
UXCam.logEvent("add_to_cart", mapOf(
"product_id" to product.id,
"category" to product.category,
"price" to product.price
))
// 6. Свойства пользователя
UXCam.setUserProperty("plan", "premium")
// 7. Семплинг: запись 30% сессий (через config)
// (установить до старта)
// 8. Завершение сессии
UXCam.stopSessionAndUploadData()
Маскировка приватных данных
UXCam автоматически скрывает поля с isSecureTextEntry (iOS) и типом password (Android). Для кастомных элементов используйте тэги в XML или вызовы в коде:
| Элемент | Метод маскировки |
|---|---|
| Поле номера карты | UXCam.occludeSensitiveView() |
| Весь экран оплаты | tagScreenName("Payment", isOccluded: true) |
| Поле ввода кода | android:tag="uxcam_mask" в XML |
| Изображение с паспортом | UXCam.occlude(view: passportImage) |
Почему маскировка данных критична для соответствия требованиям?
App Store Review Guidelines (Section 5.1.4) и Google Play Политика конфиденциальности требуют, чтобы приложения не передавали чувствительные данные без согласия. UXCam помогает соблюдать эти требования: автоматическое скрытие полей ввода и возможность принудительно occlude любой View. Если не настроить маскировку, запись сессии может содержать номера карт, пароли — это приведёт к отклонению апдейта или юридическим последствиям. Мы в проектах обязательно добавляем маскировку на все экраны с персональными данными: оплата, регистрация, профиль.
Как правильно тегировать экраны?
Автоматические имена по типу ViewController_3_Step2Fragment нечитаемы. Добавляйте явные теги в viewDidAppear / onResume. Лучше использовать константные строки: "Product Detail" вместо "detail". Это позволит строить воронки и тепловые карты по экранам в дашборде.
Кастомные события и свойства пользователя
События нужны для отслеживания бизнес-действий: add_to_cart, checkout_start, payment_failure. Свойства пользователя (plan, registration_cohort) сегментируют аудиторию — можно посмотреть сессии только premium-пользователей. Мы рекомендуем добавлять 10–15 ключевых событий и 3–5 свойств.
Семплинг и управление записью
Для приложений с DAU > 10k стоит ограничить процент записываемых сессий, чтобы не превысить лимиты по storage. Типичная стратегия: 10% случайных сессий + 100% сессий с интересующим нас событием (например, critical_error). В коде это реализуется через флаг в конфиге и принудительный запуск записи при ключевом событии.
Как настроить семплинг, чтобы сократить затраты на хранение?
Настройка семплинга начинается с выбора процента случайных сессий (обычно 10-30%) и условий сохранения. Пример конфигурации для iOS: установите config.sessionRecordingChance = 0.1 и в обработчике события critical_error вызовите UXCam.stopSessionAndUploadData(). Для Android используйте UXCam.setSessionRecordingProbability(0.1f). Дополнительно можно установить максимальное количество сессий в день. Мы помогаем подобрать оптимальные параметры под ваш трафик.
Пример конфигурации семплинга для iOS с приоритетными событиями
// Конфигурация семплинга: 10% случайных сессий
let config = UXCamConfiguration(appKey: "YOUR_APP_KEY")
config.sessionRecordingChance = 0.1
UXCam.startWithConfiguration(config)
// Принудительно сохраняем сессию при наступлении critical_error
// Вызовите в обработчике ошибки:
UXCam.stopSessionAndUploadData()
Что входит в работу
- Подключение SDK на обе платформы
- Настройка маскировки всех чувствительных экранов и полей
- Тегирование всех основных экранов читаемыми именами
- Установка 10+ ключевых событий с параметрами
- Свойства пользователя для сегментации
- Настройка семплинга под ваш трафик
- Документация по интеграции и обучение команды
Сроки и стоимость
Базовое подключение с маскировкой и тегированием — от 1 дня. Полная настройка с кастомными событиями и семплингом — от 3 дней. Стоимость рассчитывается индивидуально в зависимости от сложности и количества платформ. Оценим ваш проект в течение 24 часов при обращении.
Получите консультацию: напишите нам, чтобы обсудить интеграцию UXCam в ваше приложение. Мы гарантируем качественный результат, подтверждённый 5+ годами работы и 50 реализованными проектами в сфере мобильных аналитик-сервисов. Закажите интеграцию под ключ — мы сделаем всё за 1-3 дня.







