Інтеграція UXCam для запису сесій мобільного додатку
UXCam спеціалізується саме на мобільних UX-дослідженнях — на відміну від Sentry чи Datadog, тут сесії записуються з акцентом на розуміння поведінки користувача, а не діагностику помилок. Теплові карти жестів, фокусні зони на екрані, розділ Screen Flow — це інструменти для UX-команди та product manager, а не інженера з надійності.
Встановлення
iOS (Swift Package Manager):
// Package.swift
.package(url: "https://github.com/uxcam/ios-sdk", from: "3.6.0")
import UXCam
// AppDelegate
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
}
Android:
// build.gradle
implementation("com.uxcam:uxcam:3.+")
// Application.onCreate()
val config = UXCamConfiguration.Builder("YOUR_APP_KEY")
.enableAdvancedGestureRecognizers(true)
.build()
UXCam.startWithConfiguration(config)
Маскування приватних даних
UXCam за замовчуванням маскує поля з isSecureTextEntry (iOS) та поля типу password (Android). Для кастомних View з чутливим контентом:
// iOS — маскувати конкретний UIView
UXCam.occlude(view: cardNumberView, hideGestures: true)
// Маскувати весь екран
UXCam.occlude(view: self.view, hideGestures: false)
// Android — маскувати View
UXCam.occludeSensitiveView(binding.cardNumberField)
// Маскувати через XML
android:tag="uxcam_unmask" // виключити з маскування
android:tag="uxcam_mask" // примусово маскувати
Для екранів оплати рекомендую приховувати весь екран через UXCam.tagScreenName("Payment", isOccluded: true) — це простіше, ніж маскувати кожен елемент окремо.
Тегування екранів
UXCam автоматично визначає імена екранів за іменем класу ViewController/Activity. На практиці імена класів вроде VC_3_Step2Fragment нечитаємі в дашборді. Додаємо явні теги:
// iOS — тег екрана
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UXCam.tagScreenName("Product Detail")
}
// Android — в Fragment.onResume()
override fun onResume() {
super.onResume()
UXCam.tagScreenName("Product Detail")
}
Кастомні события та властивості користувача
// Событие
UXCam.logEvent("add_to_cart", withProperties: [
"product_id": product.id,
"category": product.category,
"price": product.price
])
// Властивості користувача (для сегментації в дашборді)
UXCam.setUserProperty("plan", value: "premium")
UXCam.setUserProperty("registration_cohort", value: "2024-Q1")
Властивості користувача дозволяють у UXCam дашборді фільтрувати записи по сегменту: дивитися сесії тільки premium-користувачів або тільки нових.
Семплінг та управління записом
// Записувати тільки 30% сесій
let config = UXCamConfiguration(appKey: "YOUR_APP_KEY")
config.userAppKey = "YOUR_APP_KEY"
// Старт/стоп вручну
UXCam.stopSessionAndUploadData() // завершити та відправити поточну сесію
// Не записувати в debug-збірці
if !isDebugBuild {
UXCam.startWithConfiguration(config)
}
Для додатків з високою DAU варто подумати про семплювання: записувати 100% сесій дорого за storage у UXCam. Хороша стратегія — 10% випадкових + 100% сесій з помилками або конкретними подіями:
// Примусово записати сесію при критичній подіїї
UXCam.allowShortBreakForAnotherApp(true) // не завершувати сесію при переключенні
Analytics.shared.onCriticalError { error in
UXCam.logEvent("critical_error", withProperties: ["error": error.localizedDescription])
// Сесія буде помічена та доступна в дашборді
}
Що ми робимо
- Підключаємо SDK через SPM (iOS) або Gradle (Android)
- Налаштовуємо маскування чутливих екранів та View
- Розставляємо
tagScreenNameдля читабельних імен у дашборді - Додаємо ключові события та властивості користувача для сегментації
- Налаштовуємо семплінг під обсяг трафіку
Часові оцінки
Базова інтеграція з маскуванням та тегуванням: 1–2 дні. Ціна розраховується індивідуально.







