Publishers
Подключение SDK и согласие пользователя
SDK собирает URL и поисковые запросы, поэтому по GDPR (ст. 6) и ePrivacy (ст. 5(3)) ему нужно явное согласие пользователя. Пока пользователь не нажал «Разрешить», SDK не создаёт идентификатор, не хранит события и не обращается к серверу. Функциональность вашего расширения от выбора не зависит.
Установка
В кабинете: Расширения → SDK → «Скачать». Архив распакуйте в корень расширения.
intentd.min.js SDK с ключами вашего расширения — не переименовывать
intentd-consent.html страница согласия для расширений без popup
intentd-consent.js скрипт этой страницы (MV3 запрещает inline-скрипты) {
"manifest_version": 3,
"background": { "service_worker": "background.js", "type": "module" },
"action": { "default_popup": "popup.html" },
"permissions": ["storage", "webNavigation", "tabs", "alarms", "unlimitedStorage"],
"host_permissions": ["https://api.intentd.io/*"]
} // background.js — первой строкой, на верхнем уровне
import './intentd.min.js'; Consent Flow
Расширение с popup
Вызовите IntentD.mountConsent() в popup. Если вы этого не
сделаете, пользователь увидит только вкладку согласия при установке, а SDK останется
неактивным до его выбора — ответственность за вызов лежит на расширении.
<div id="consent-root"></div>
<!-- ... интерфейс вашего расширения ... -->
<script src="intentd.min.js"></script>
<script src="popup.js"></script> // Плашка появится, только если согласия на текущую версию текста нет.
// Промис разрешается выбором пользователя: true — разрешил, false — отказался.
IntentD.mountConsent(document.getElementById('consent-root')); Плашка рендерится в закрытом Shadow DOM: ваши стили на неё не влияют, её стили не влияют на вас. Тема (светлая или тёмная) подбирается по фону popup, ширина — от 320 до 800 px. Кнопки «Отказаться» и «Разрешить» одного размера, предустановленных галочек нет. После согласия плашка исчезает и больше не показывается; после отказа появляется при следующем открытии popup.
Расширение без popup
SDK сам открывает вкладку intentd-consent.html при установке и
при старте браузера, пока согласия нет. Вторая вкладка не открывается — существующая получает
фокус. После выбора вкладка закрывается.
Когда показывается запрос
| Событие | Поведение |
|---|---|
| Установка или обновление расширения | Вкладка согласия, если нет согласия на текущую версию |
| Старт браузера | Вкладка согласия — только у расширений без popup |
| Открытие popup | Плашка, если вы вызываете mountConsent и согласия нет |
| Любое другое пробуждение service worker | Ничего не показывается |
| Согласие уже дано | Плашка больше не показывается |
| Смена версии текста согласия | Согласие запрашивается заново |
Отзыв согласия
Текст согласия обещает пользователю возможность отозвать его в настройках. Добавьте в страницу настроек переключатель:
const allowed = await IntentD.hasConsent();
// Кнопка «Отозвать согласие»
await IntentD.revokeConsent(); // сбор остановлен, локальные данные удалены
// Кнопка «Разрешить сбор» (например, после отказа)
await IntentD.grantConsent(); Не добавляйте страницу согласия в web_accessible_resources
Страницы расширения доступны ему самому без этого списка. Если страница станет web-accessible, любой сайт сможет встроить её во фрейм и незаметно получить клик «Разрешить» — такое согласие недействительно.
API
| Метод | Назначение |
|---|---|
| IntentD.mountConsent(element) | Показать плашку в popup, если согласия нет. Promise<boolean>. |
| IntentD.hasConsent() | Есть ли согласие на текущую версию текста. Promise<boolean>. |
| IntentD.getConsentState() | 'approved' | 'declined' | null. |
| IntentD.grantConsent() | Записать согласие (из вашего собственного UI). |
| IntentD.revokeConsent() | Отзыв: сбор останавливается, очередь и идентификатор установки удаляются. |
| IntentD.openConsentTab() | Открыть вкладку согласия вручную (или сфокусировать открытую). |
| IntentD.status() | Состояние SDK, включая consent. |
Решение хранится только в chrome.storage.local этого профиля
браузера: каждое устройство спрашивает отдельно, сервер не хранит, кто и когда согласился. На
сервер с каждым пакетом уходит лишь версия текста согласия.