К содержанию
ActionPulse

Согласие на сбор данных

Как ActionPulse ведёт себя до решения посетителя, чем отличаются granted, denied и revoked, как связать сбор с баннером согласия и почему решение нужно передавать на каждой загрузке страницы.

Кому
Тем, кто отвечает за баннер согласия и приватность
Проверено
На этой странице

Согласие относится только к браузерному сбору. События, которые ваш бэкенд отправляет сам, — это ваша обработка ваших же данных, и трекер к ней отношения не имеет.

Четыре состояния

Состояние Что происходит
pending Ожидание решения. Сбор не начат, следов в браузере нет
granted Сбор идёт
denied Сбор не идёт, накопленное удалено
revoked То же, что denied, но после ранее данного согласия

Прочитать текущее состояние можно вызовом pp.getConsent().

Включение ожидания согласия

Ожидание включается явно — атрибутом тега или полем конфигурации:

<script
  src="https://YOUR_ACTIONPULSE_HOST/v1/sdk/browser/0.6.0/tracker.js"
  integrity="SRI_FROM_MANIFEST"
  crossorigin="anonymous"
  data-token="YOUR_BROWSER_TOKEN"
  data-consent="required"
></script>

Атрибут принимает значения required, pending, granted и denied. required и pending означают одно и то же — ждать решения. Неизвестное значение трактуется как ожидание: поведение по умолчанию безопасное.

Что происходит до решения

Пока состояние pending, трекер полностью пассивен:

  • не создаёт ни анонимного, ни сессионного идентификатора;
  • не читает и не пишет localStorage и sessionStorage;
  • не ставит cookie;
  • не запрашивает конфигурацию;
  • не отправляет ни одного запроса;
  • не подписывается на события страницы.

Связь с баннером согласия

Вызовите нужный метод из колбэка вашего CMP:

function onAnalyticsConsentGranted() {
  pp.setConsent('granted');
}

function onAnalyticsConsentDenied() {
  pp.setConsent('denied');
}

function onAnalyticsConsentRevoked() {
  pp.setConsent('revoked');
}

setConsent() принимает только granted, denied и revoked. Вернуть состояние обратно в ожидание вызовом нельзя — это делает перезагрузка страницы.

Практическое правило: обработчик, который вызывает setConsent, должен срабатывать не только на клик по баннеру, но и при инициализации CMP на новой странице, когда решение восстанавливается из его хранилища.

Что происходит при отказе и отзыве

denied и revoked работают одинаково:

  • сбор прекращается, последующие вызовы track() и identify() ничего не делают;
  • запросы, которые были в полёте, прерываются;
  • очередь неотправленных событий выбрасывается;
  • состояние трекера в браузере удаляется — ключи pp_anon_id, pp_user_id, pp_buffer_v2, pp_session в localStorage и данные записи сессий в sessionStorage;
  • активная запись сессии отбрасывается без досылки: незавершённые фрагменты не уходят на сервер.

Проверка

  1. Откройте страницу в новом приватном окне, не нажимая ничего в баннере.
  2. В инструментах разработчика проверьте localStorage — ключей pp_* быть не должно; во вкладке «Сеть» не должно быть запросов к вашей установке ActionPulse.
  3. Нажмите «Согласен» в баннере.
  4. Убедитесь, что появился запрос на /v1/track с ответом 202.
  5. Обновите страницу и убедитесь, что запросы продолжают идти — это подтверждает, что CMP повторно сообщает решение.

Шаг 5 пропускают чаще всего, и именно он ловит самую частую ошибку интеграции.

Do Not Track

Заголовок Do Not Track браузера по умолчанию не учитывается. При подключении через npm-пакет его можно включить отдельным параметром конфигурации; в режиме скрипта такой настройки нет — используйте своё условие показа тега.

Что дальше