Интеграция Smartlook для записи сессий мобильного приложения
Smartlook отличается от UXCam одной ключевой особенностью — автоматический трекинг событий. SDK анализирует жесты и взаимодействия с UI-элементами и автоматически создаёт события без написания кода. Нажал пользователь на кнопку «Купить» — событие создано, привязано к сессии, доступно в воронке. Для быстрого старта это ускоряет работу: аналитика без разметки.
Установка
iOS:
// Swift Package Manager
.package(url: "https://github.com/smartlook/smartlook-ios-sdk", from: "2.0.0")
import Smartlook
// AppDelegate или @main App struct
@main
struct MyApp: App {
init() {
Smartlook.setup(key: "YOUR_API_KEY")
Smartlook.start()
}
var body: some Scene {
WindowGroup { ContentView() }
}
}
Android:
// build.gradle
implementation("com.smartlook.recording:app:2.+")
// Application.onCreate()
Smartlook.setupAndStartRecording("YOUR_API_KEY")
Настройка рендеринга
Smartlook по умолчанию использует screenshot-based запись. Для приложений с WebView или кастомной графикой это предпочтительно — wire-frame такие элементы не воспроизводит.
Можно переключить режим рендеринга:
// iOS — настройка рендеринга
let setupConfig = Smartlook.SetupConfiguration(key: "YOUR_API_KEY")
setupConfig.renderingMode = .native // wire-frame: меньше трафика
// или
setupConfig.renderingMode = .noRendering // только события, без видео
Smartlook.setup(configuration: setupConfig)
Автоматический трекинг событий
Smartlook автоматически создаёт события для:
-
click— нажатие на любой интерактивный элемент -
input— взаимодействие с текстовым полем (без содержимого) -
focus— фокус на поле -
scroll— скролл списков
// Проверить автотрекинг в логах (debug)
Smartlook.setEventTrackingMode(.fullTracking) // всё
// или
Smartlook.setEventTrackingMode(.ignoreUserInteractionEvents) // только кастомные
Для конкретных элементов можно присвоить читаемые имена — иначе в дашборде будет UIButton@(123,456):
// iOS — имя элемента для автотрекинга
let purchaseButton = UIButton()
purchaseButton.slTrackId = "purchase_button_pdp" // Smartlook track ID
// Android — через View tag
binding.purchaseButton.tag = Smartlook.registerBlacklisted(binding.purchaseButton) // исключить
// или имя:
SmartlookHint.setViewId(binding.purchaseButton, "purchase_button_pdp")
Маскировка данных
// iOS — маскировать конкретный View
view.slSensitive = true // скрыть из записи
// Маскировать весь UIViewController
class PaymentViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
Smartlook.setViewIsSensitive(view, isSensitive: true)
}
}
// Android — маскировать через атрибут в XML
<EditText
android:id="@+id/cvvField"
app:smartlook_sensitive="true" />
// Или программно
Smartlook.registerSensitiveView(binding.cvvField)
Кастомные события и воронки
// Кастомное событие
Smartlook.trackCustomEvent(name: "checkout_step_completed", props: [
"step": "payment_method",
"method": "card"
])
// Свойства пользователя
Smartlook.setUserIdentifier("user_123", sessionProperties: [
"plan": "premium",
"country": "RU"
])
В дашборде Smartlook можно построить воронку из любой комбинации автоматических + кастомных событий. Нет необходимости заранее определять воронку в коде — её можно собрать ретроспективно из уже записанных событий.
Семплинг
// Записывать 25% сессий
let config = Smartlook.SetupConfiguration(key: "YOUR_API_KEY")
config.framerate = 2 // fps для screenshot-режима (1-10)
// Старт записи по условию (например, только для конкретного сегмента)
if user.isPremium || user.isInBetaGroup {
Smartlook.start()
} else {
// 20% случайных
if Int.random(in: 0..<5) == 0 {
Smartlook.start()
}
}
Что делаем
- Подключаем SDK и выбираем режим рендеринга (screenshot vs wire-frame)
- Настраиваем маскировку чувствительных View и экранов
- Присваиваем
slTrackId/SmartlookHintключевым UI-элементам - Добавляем кастомные события под бизнес-воронку
- Конфигурируем семплинг под объём трафика
Сроки
Базовое подключение: 4–8 часов. С разметкой элементов и кастомными событиями: 1–2 дня. Стоимость рассчитывается индивидуально.







