Вы запустили мобильное приложение, но конверсия падает, а аналитика не показывает, где именно пользователи спотыкаются. 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 дня.







