Команды мобильной аналитики нередко зажаты между двумя крайностями. С одной стороны — несколько общих событий просмотра экрана, которые не отвечают ни на один продуктовый вопрос. С другой — гигантский массив данных, фиксирующий каждое касание, но не вызывающий доверия ни у кого. Хорошая таксономия событий избегает обеих крайностей. Она измеряет, к какой цели движется пользователь, где он застревает и какой результат выдаёт продукт, — и при этом не считает сбор персональных данных вариантом по умолчанию. План измерений начинается с продуктовых решений, а не с установки SDK.
Имя события выглядит как техническая деталь, но на деле это общий язык компании. Если в iOS используется `checkout_completed`, в Android — `purchase_done`, а в хранилище данных — `order_success`, одно и то же поведение превращается в три разные реальности. Смысл события, момент срабатывания, параметры, владелец, правовое основание и тест качества должны храниться в одном словаре. Тогда продакт-менеджер, разработчик, аналитик и специалист по приватности обсуждают один вопрос на одних и тех же данных.
1. Начинайте не с экранов, а с вопросов для принятия решений
Сначала выпишите решения, которые команда примет в ближайшем квартале. До какой базовой ценности не доходят новые пользователи? Что работает лучше — поиск или навигация по категориям? Влияет ли экран запроса разрешений на завершение задачи? Какая ошибка останавливает оплату? Если у вопроса нет вероятного решения, поставьте под сомнение приоритет его измерения. Аналитика — инструмент продуктового управления, а не архив любопытных фактов.
Для каждого вопроса опишите цепочку поведения: стартовое условие, действие, показывающее намерение пользователя, успешный исход и допустимое время. Запуск приложения целью не является; целью может быть подтверждённое бронирование или первый файл, сохранённый офлайн. Просмотр экрана даёт контекст, но его нужно связать с событием, которое отражает реальную ценность.
И наконец, добавьте балансирующую метрику. Рост числа разрешений на уведомления выглядит хорошо, но вместе с ним могут вырасти удаления приложения и жалобы. Более короткий процесс оформления заказа способен умножить число ошибочных заказов. Читайте метрику скорости вместе с сигналами об ошибках, отменах и обращениях в поддержку.
2. Стройте словарь событий на глаголе, объекте и контексте
Схема именования должна быть короткой, последовательной и не зависящей от технологий. Конструкция «глагол в прошедшем времени плюс объект» — `product_viewed`, `search_submitted`, `payment_failed` — сообщает, что событие уже произошло. Если превратить текст экрана или кнопки прямо в имя события, любое изменение интерфейса ломает аналитический смысл. Выберите язык и используйте один и тот же словарь на всех платформах; различия в регистре и в числе не должны порождать новые события.
Параметры описывают событие, а не переносят лишние подробности, по которым можно заново идентифицировать пользователя. Для `payment_failed` полезны класс ошибки, категория способа оплаты и версия сценария; полные данные карты, свободный текст сообщения об ошибке или персональные сведения — нет. Поля со свободным вводом способны унести с собой неожиданные чувствительные данные. Ограничьте допустимые значения словарём.
В каждой записи должны быть описание, правило срабатывания, обязательные параметры, пример, платформа, владелец, первая версия, класс хранения и идентификатор теста. Ведите заметки о версиях изменений: тихая подмена смысла существующего события разрывает временной ряд.
| Событие | Точный триггер | Обязательный параметр | Что собирать нельзя |
|---|---|---|---|
| onboarding_completed | Последний обязательный шаг сохранён | flow_version | Имя, e-mail, свободный текст |
| search_submitted | Поисковый запрос отправлен | result_count_bucket | Сырой чувствительный запрос |
| item_saved | Локальное сохранение успешно завершено | item_type, offline_state | Содержимое документа |
| payment_failed | Транзакция получила ответ об отказе | error_category, flow_version | Данные карты или банка |
| permission_responded | Системный ответ получен | permission_type, status | Отпечаток устройства |
3. Проведите границу приватности до подключения SDK
Свяжите реестр данных со словарём событий. Для каждого поля задокументируйте цель, необходимость, срок хранения, команды с доступом, сервисы-получатели и способ удаления. «Вдруг пригодится» — не цель измерения. Данные, которые вы не собрали, не утекут, не попадут в неверный сегмент и не создадут лишнего обслуживания. Если продуктовый вопрос закрывается агрегированными данными или расчётом на устройстве, не выбирайте более детальный сбор идентификаторов.
Официальная документация Apple по App Tracking Transparency указывает: если данные приложения или устройства используются для отслеживания между приложениями и сайтами других компаний, разрешение нужно запрашивать через механизм ATT. Apple также поясняет, что за код и практики работы с данными сторонних SDK отвечает сам разработчик. Не считайте аналитику и рекламное отслеживание одним понятием — технически разберите, какие данные и с какой целью реально уходят из вашего SDK.Apple Developer — User Privacy and Data Use
Разрешение платформы не заменяет общего согласия по действующим обязательствам о защите данных. Правовая роль, основание, порядок информирования и обработка запросов субъектов различаются в зависимости от страны и цели обработки — проверяйте это с юристами и специалистами по приватности. В дизайне держите рабочими пути отказа и последующего изменения выбора.
4. Гипотетический сценарий: упрощение событий в приложении доставки
Сценарий гипотетический и не описывает результат реального продукта. В приложении доставки команда iOS отправляет 140 пользовательских событий, команда Android — 95. Один и тот же сценарий добавления адреса измеряется на платформах под разными именами; в одних событиях лежит полный текст ошибки, в других — фрагмент введённого адреса. Продуктовая команда не может объяснить потери в онбординге, потому что правила между открытием экрана и успехом расходятся.
Сначала команда сужает вопрос для решения: почему пользователь не может подтвердить адрес доставки? В общем словаре появляются события `address_started`, `address_validation_failed` и `address_saved`. Параметр ошибки сводится к ограниченному набору категорий — `network`, `unsupported_area`, `missing_field`; адрес и свободный текст убираются. Добавляются версия сценария и состояние сети. Обе платформы прогоняют одни и те же тест-кейсы.
Новый словарь не подмешивают в старые дашборды напрямую. На переходный период настраивают параллельную сверку с меткой версии, после чего старые события выводят из обращения по плану. Решение опирается не только на конверсию: вместе разбирают задержку валидации, технические ошибки, обращения в поддержку и отказы от сбора данных. Упрощение таксономии не гарантирует успеха; главный выигрыш в том, что смысл метрики снова становится надёжным.
5. Управляйте внедрением через код-ревью и контроль качества данных
Официальное руководство Firebase Analytics по событиям поясняет, что наряду с автоматически собираемыми и рекомендованными событиями можно записывать пользовательские, что имена событий чувствительны к регистру и что рекомендованные события с их описанными параметрами позволяют полнее использовать возможности отчётов. Ограничения платформы меняются от версии к версии, поэтому сверяйтесь с актуальной документацией: широкая квота на имена не означает цель штамповать сотни событий без нужды.Firebase Documentation — Log events
Не разбрасывайте вызовы аналитики по коду экранов. Типобезопасный слой событий централизованно проверяет допустимые имена и параметры. В среде разработки отклоняйте события вне схемы, в продакшне применяйте журналирование ошибок и политику сэмплирования. Если iOS и Android генерируют код или тестовые фикстуры из одного словаря, расхождений становится меньше.
Проверка качества идёт на трёх уровнях: юнит-тест подтверждает правило срабатывания, интеграционный тест — полезную нагрузку, сквозной тест — реальный пользовательский сценарий. Появления события в режиме отладки недостаточно; в хранилище данных нужно проверить тип, время, дубли, статус согласия и связь с сессией.
- Проверяйте имена событий валидацией по схеме.
- Пишите автотесты для обязательных и запрещённых параметров.
- Контролируйте повторные события при одном действии пользователя.
- Изучайте поведение SDK и сети при отказе в разрешении на реальном устройстве.
- Настройте оповещения об объёме данных и пустых параметрах после релиза.
6. Восьминедельный план по таксономии и управлению
Первые две недели уходят на инвентаризацию текущих SDK, событий, параметров, дашбордов и получателей данных. На третьей неделе выберите самые важные продуктовые решения и ключевые пользовательские маршруты. На четвёртой утвердите стандарт именования, классы данных и владение событиями. На пятой и шестой реализуйте один критичный сценарий на обеих платформах и настройте автотесты. Последние две недели закройте сверкой в хранилище данных, миграцией старых событий и аудитом доступов.
Управление не обязано превращаться в тяжёлый комитет. Заявка на новое событие проходит по короткому шаблону: вопрос для решения, отличие от существующих событий, требования к параметрам и проверка приватности. Еженедельный журнал изменений и ежемесячный разбор неиспользуемых событий держат словарь живым.
- Для каждого события ясно, на какое продуктовое решение оно отвечает.
- Момент срабатывания и условие успеха описаны так, что их можно протестировать.
- Параметры используют словарь контролируемых значений.
- Персональный или чувствительный свободный текст не отправляется.
- Поток данных SDK и сторонние получатели задокументированы.
- iOS и Android используют одну версию словаря.
- Для устаревших событий назначены переход и дата отключения.
7. Границы и режимы отказа: измеренное поведение не равно намерению
Данные о событиях показывают, что произошло, но сами по себе редко объясняют почему. Когда пользователь бросает поиск, дело может быть в качестве выдачи, сетевой задержке, отвлечении или просто в изменившейся потребности. Соединяйте аналитику с юзабилити-тестами, интервью, обращениями в поддержку и данными о производительности. Не выдавайте корреляцию за причинность.
Идентификация и атрибуция бывают неполными. Пользователь меняет устройство, отказывает в разрешении, удаляет приложение, а офлайн-события приходят с задержкой. Один человек выглядит как несколько записей, а разные люди на общем устройстве — как один человек. Показывайте на дашборде охват, задержку и правила исключения. Когда качество данных падает, указывайте диапазон и неопределённость вместо точной доли.
Последний режим отказа — превращение таксономии из живого продукта в неприкасаемый словарь. Открывайте новую версию при изменениях, ломающих смысл; удаляйте неиспользуемые события; регулярно проверяйте критичные бизнес-результаты. Более качественные решения даёт не больший объём данных, а надёжные данные, ограниченные целью.
Заключение
Таксономия мобильных событий — не список настроек SDK, а общий язык продуктовых решений. Начните с вопроса, дайте событию точное определение, сведите параметры к минимуму, проверьте платформенные и правовые границы, затем протестируйте код вместе с конвейером данных. Когда объём измерений остаётся прозрачным, команда сохраняет доверие пользователей и увереннее обсуждает, какое продуктовое изменение действительно имеет значение.
Часто задаваемые вопросы
Источники
- Apple Developer — User Privacy and Data Use
Область применения ATT, ответственность за сторонние SDK и разрешение пользователя
- Firebase Documentation — Log events
Официальное руководство по автоматическим, рекомендованным и пользовательским событиям аналитики
Превратите набор событий в надёжную систему принятия решений
Построим вместе таксономию событий, которая объединяет продуктовые вопросы, границы приватности и план кросс-платформенного тестирования.
Спроектировать мою таксономию аналитики


