Hotjar мобильный SDK: где ломается сбор тепловых карт
Тепловые карты приложения ломаются тише, чем на сайте: сбор событий формально идёт, отчёт открывается, но картинка не совпадает с реальностью. Почти весь брак дают три причины — потерянная привязка к элементам, оборванные сессии на слабой сети и разъезжающаяся разметка экранов после релиза.
Первый сбой — события не привязываются к элементам. Мобильный интерфейс собирается из переиспользуемых контейнеров, у которых нет стабильных идентификаторов: обработчик стоит на корневом слое, и нажатие уходит в него, а не в конкретную кнопку. В отчёте такие клики схлопываются в одну точку, и карта показывает активность там, где её нет.
Второй — потерянные сессии. События копятся в буфере и уходят пачками, а если сеть пропала, приложение ушло в фон или система выгрузила процесс, буфер исчезает. Без записи на диск и повторной отправки теряется до трети сессий, причём неравномерно: выпадают как раз длинные сценарии, где пользователь уходит в подэкран и возвращается.
Третий — разметка экранов после обновления интерфейса. Если привязка держится на позиции элемента в дереве, перестановка блоков сдвигает все ключи, и данные прошлой версии накладываются на новую. Лечится стабильными ключами на каждом интерактивном элементе и версией схемы экрана в самом событии — старые и новые срезы больше не смешиваются.
Разбираем, как это закрывается: где нужны правки в обвязке мобильного SDK, где — в разметке экранов, а где — в приёме и хранении событий.
Что даёт корректная тепловая карта в приложении
Поэкранная тепловая карта отвечает на вопрос «куда жмут», но не на вопрос «почему не доходят». Когда события привязаны к устойчивым идентификаторам элементов, а не к координатам касания, сбор даёт сквозной путь пользователя: видно экран входа, возвраты назад и шаг, на котором воронка экранов обрывается. Находится не «некрасивая кнопка», а конкретный переход, теряющий заметную долю аудитории.
Качество данных держится на двух вещах — привязке к элементам интерфейса и единой схеме именования событий. Без них карта врёт системно: прозрачные зоны появляются там, где фактически лежит перекрывающий слой, а «мёртвые» области — там, где разметка просто не сработала.
Ошибочная разметка опаснее её отсутствия: она даёт уверенные, но неверные решения. Типовой сбой — элемент переименовали или перенесли, событие продолжает уходить на старую привязку, и команда оптимизирует блок, которого в текущей сборке уже нет.
На новых версиях интерфейса поведение разметки должно быть предсказуемым: перед релизом сверяем события с деревом экранов, и расхождение ловится до выкладки, а не через неделю по странным цифрам. Сбор организуем на стороне приложения, а Hotjar используем как витрину — карты, записи сессий и воронки в одном окне. Тогда решения по интерфейсу опираются на данные, а не на догадки.
Способы сбора: облачный сервис, свой сбор, гибрид
Выбор способа сбора поведенческих данных диктует не удобство панели, а то, какие события приложение готово отдать наружу и что с ними разрешено делать дальше. Облачный сервис аналитики забирает приём, хранение и визуализацию на себя, но накладывает свои правила на состав событий и частоту их отправки.
Собственный сбор событий снимает эти правила, зато добавляет свой конвейер приёма, хранилище и отрисовку карт — это отдельный контур в эксплуатации. Гибридная схема делит поток: обезличенная телеметрия уходит в облако, чувствительные события остаются внутри периметра.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Облачный сервис аналитики | Тепловые карты и записи сессий нужны быстро, своей инфраструктуры нет | Ограничения сбора: часть событий приходится отбрасывать, данные лежат на стороне поставщика |
| Собственный сбор событий | Жёсткие требования к хранению и составу данных, нестандартная разметка нативных экранов | Свой приём, хранилище и визуализация, нужна команда на поддержку |
| Гибридная схема | Часть метрик нужна быстро, часть не должна покидать контур | Сложнее согласовать схему событий и убрать дубли между контурами |
Hotjar — пример облачного пути: в мобильном приложении он даёт меньше, чем в вебе, потому что нативные экраны приходится размечать вручную, а карты строятся по ограниченному набору событий. Если такой полноты хватает, облако выигрывает по срокам; если нет — считаем гибрид или собственный сбор.
Внедрение сбора тепловых карт: этапы работ
Тепловая карта искажает картину, если касания привязаны к координатам экрана, а не к элементам: на другом разрешении, в тёмной теме или после переверстки точки уезжают и рисуют несуществующие проблемы. Поэтому сбор не включают одним переключателем, а разворачивают по шагам — от аудита до регламента для команды, которая будет добавлять события дальше.
- Аудит разметки. Проходим экраны и состояния: что размечено, где события дублируются, где теряются на переходах между окнами и после авторизации.
- Схема событий. Единый справочник: имя, параметры, момент отправки, привязка к элементу. Правила именования фиксируем сразу — иначе по одному тапу появятся пять разных событий.
- Настройка сбора. Подключаем Hotjar в тестовой сборке, включаем запись сессий и карты касаний по справочнику, проверяем на реальных устройствах и версиях системы, а не только в эмуляторе.
- Контроль полноты. Сверяем поток с продуктовой аналитикой: доля дошедших тапов, пропуски на переходах, расхождения между платформами.
- Приёмочная проверка. Прогон по чек-листу на релизной сборке: потеря сети, отказ отправки, обновление экрана. Сбор не должен блокировать интерфейс и растягивать время отклика.
- Передача команды. Документация по разметке и регламент ревизии перед релизом: кто добавляет событие, где его проверяет и когда удаляет устаревшее.
Дальше схема живёт по этим правилам, а не по вкусу отдельного разработчика: новые экраны размечаются так же, устаревшие события удаляются. Поэтому карты остаются читаемыми через десяток релизов, а не превращаются в набор несовместимых данных.
Схема событий, маскирование полей и регламенты
Схема событий — такой же артефакт проекта, как конфигурация сборки: она передаётся вместе с кодом, а не остаётся в переписке. Ниже состав комплекта, по которому инженер включает сбор за день, а аналитик строит отчёты без правок в приложении.
- Реестр событий: имя, смысл, экран, место вызова, состав свойств и ответственный. Каждое имя сверяется с реальной вёрсткой, чтобы в схеме не осталось мёртвых событий.
- Правила именования: шаблон «раздел_действие_результат» в нижнем регистре, лимит длины, запрет сокращений и версий в имени — иначе одно действие обрастает дублями и воронка не сходится.
- Политика маскирования: перечень полей, которые не уходят в открытом виде — телефон, почта, платёжные реквизиты, свободный текст. Для каждого указан способ замены на маску или необратимый хеш и точка проверки до отправки.
- Политика сбора: что пишется до согласия, как учитывается отказ, сколько живут выгрузки и как удаляются по запросу.
- Карта экранов и переходов: ключевые маршруты размечены, видно, где сценарии расходятся между платформами и какие пути не покрыты.
- Регламент изменений: у документа есть версия и владелец, правка схемы идёт вместе с изменением интерфейса, устаревшие события выводятся из оборота по плану.
- Инструкция по проверке: как убедиться, что событие уходит с нужными свойствами, и как выключить сбор во внутренней сборке.
Отдельно фиксируем, какие отчёты в Hotjar строятся на этих событиях, — чтобы панель не превращалась в свалку.
Кейс: доля потерянных сессий упала до единиц процентов
В приложении с плотным потоком пользователей запись сессий доходила фрагментами: уход в фон, смена ориентации экрана и быстрые переходы между разделами обрывали запись. В отчётах по тепловым картам не хватало части нажатий — по замерам терялось около 40% событий, а в отдельных сценариях цепочка распадалась на середине. Команда принимала решения по искажённой картине: «мёртвые» зоны на карте оказывались участками, где данных просто не было.
Что изменили
Сбор перевели на Hotjar не «как есть»: каждому экрану присвоили стабильный идентификатор, а ключевые действия разметили отдельными событиями с понятными именами. Это убрало привязку к номеру экрана в навигации — раньше после переименования раздела события уезжали в чужую ветку и статистика смешивалась. Отдельно настроили поведение при обрыве связи: записи ставятся в очередь и уходят на сервер при следующем запуске, а не пропадают.
Метрики до и после
Доля потерянных сессий упала с 40% до 3-4%, полнота цепочки экранов в ключевом сценарии выросла с 58% до 96%. Разметку нового экрана теперь выпускают за один-два дня вместо двух недель: идентификаторы и события описываются декларативно, без правок в коде навигации.
Класс отказов «слепые зоны в аналитике» закрыт — тепловые карты строятся на непрерывных записях. Проверка изменений в интерфейсе идёт по фактическому поведению, а не по догадкам о том, куда пользователь «должен был» нажать.
Что делать, если Hotjar уже развёрнут в приложении?
Если Hotjar уже развёрнут, переустанавливать ничего не нужно — вопрос в диагностике. Чаще всего данные неполные не из-за инструмента, а из-за порядка инициализации: сбор поднимается позже первого экрана, и часть переходов уходит раньше, чем открылся сеанс.
Проверяем по порядку: стартует ли сбор до отрисовки первого экрана, передаётся ли идентификатор экрана во все переходы, не глушит ли отправку согласие на обработку данных, не дублируются ли события при возврате из фона. Такой прогон отделяет ложные срабатывания от реальных пробелов в разметке.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Точечная правка разметки | Сбор работает, но экраны и элементы названы произвольно | Старые срезы остаются, но плохо сопоставимы с новыми |
| Пересбор событий на текущем слое | Структура экранов изменилась после релиза | Нужен единый справочник имён и правки в нескольких местах |
| Переход на другой сбор | Возможностей текущего не хватает: нет нужных карт, высокая нагрузка | Требуется период параллельного сбора для сверки |
| Свой слой аналитики | Нужен полный контроль над данными и выгрузкой | Поддержку берём на себя, растут требования к сопровождению |
Миграцию разметки делаем без обрыва истории: имена экранов и элементов фиксируем в справочнике, старые события не удаляем, а помечаем, новый сбор включаем за переключателем. Так появляется период параллельных данных, где видно, что расхождение в поведении, а не в разметке.
Сомнения по точности данных и приватности
Запись касаний в мобильном приложении восстанавливается по координатам жестов, а не по видеопотоку экрана. Если элемент отрисован нативным слоем поверх окна, на тепловой карте он появится, но привязка к узлу интерфейса сдвинется — и карта начнёт врать. Поэтому мы сверяем разметку экранов с иерархией представлений и помечаем контейнеры явными идентификаторами: тогда записи одного и того же экрана ложатся в одну карту, а не в пять разных.
С приватностью работаем на уровне сборки: значения полей ввода маскируются и не покидают устройство, наружу уходит только факт заполнения. Экраны с платежами, документами и личным кабинетом попадают в список исключений, а старт сбора Hotjar привязан к согласию пользователя — до его подтверждения запись не запускается вообще.
Запись замедлит приложение?
Отправка данных идёт асинхронно и пачками, а не в момент касания. На слабых устройствах мы ограничиваем частоту опроса и отключаем снятие тяжёлых экранов, поэтому на время отклика влияет не сбор, а сам разбор записей в отчётах.
Персональные данные могут утечь в запись?
Технически — только то, что разработчик не замаскировал. Мы проходим по всем формам и спискам, помечаем поля с именами, телефонами и адресами как скрытые, а доступ к просмотру записей выдаём по ролям и ограничиваем сроком хранения.
Вырастет ли размер сборки?
Библиотека мобильного SDK — это доли процента от веса приложения. Прирост замеряем до релиза в тестовой сборке и, если он выходит за оговорённый порог, переносим инициализацию в отложенный запуск.
Обсудим задачу — вернёмся с оценкой и планом работ
Чтобы вернуться с планом внедрения и оценкой работ, а не с общими словами, нам нужно понять, как устроено ваше приложение и что вы хотите увидеть в данных. Расскажите задачу: какие вопросы о поведении пользователей остаются без ответа и какие решения вы собираетесь принять по итогам — от этого зависит схема разметки и глубина записи сессий.
Полезно узнать до начала:
- платформа и актуальная ветка фреймворка, есть ли нативные вставки и модули на разных языках;
- что уже размечено и куда собирается аналитика — чтобы не дублировать события и сохранить преемственность отчётов;
- ключевые сценарии по приоритету: регистрация, оплата, поиск, оформление заказа — под них настраивается запись и воронки;
- требования приватности: какие поля нельзя записывать, нужны ли маскирование и явное согласие пользователя;
- доступы: репозиторий или архив проекта, тестовые сборки, учётная запись в Hotjar с правами на проект, канал для сборки и распространения билдов;
- ограничения релизного цикла — как часто выкатываетесь и есть ли окна, куда можно встроить изменения.
В ответ вы получите план внедрения по этапам с порядком работ и зависимостями, оценку работ по трудозатратам и состав передаваемых материалов: конфигурацию проекта, схему разметки событий, политику маскирования чувствительных данных, инструкцию для команды и заметки по эксплуатации.
Опишите задачу в удобном виде — коротким письмом или созвоном на 30 минут. Мы зададим уточняющие вопросы и вернёмся с планом и оценкой.







