Следуя инструкциям Google я устанавливаю согласие на сайте, над которым работаю.
Я могу установить gtag() согласие через GTM и все остальное. Мне было интересно: как мне вернуть значения, которые пользователь установил gtag('consent')? (например, default|update и ad_user_data,functionality_storage и т. д.)
В документации Google объясняется, что в gtag() есть опция gtag('get') , но gtag('consent') кажется совершенно другим вариантом, с которым gtag('get') не работает, и я не могу получить значения набор.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не эксперт в этом вопросе, но нашел кое-что, что мне помогло:
dataLayer
Это переменная, которая включает в себя все внутренние данные gtag. Итак, что вы можете сделать:
Object.values(dataLayer).filter(a=> typeof a === 'object' && a?.[0] === 'consent')
Должен вернуть все согласия. Это должно вернуть все объекты согласия из dataLayer относительно согласия.
Поскольку он хранит историю всех изменений уровня данных, лично я предпочитаю иметь объект, который просто представляет текущее состояние согласия:
//merges an array of objects into a single object, where properties from later objects overwrite those from earlier ones
function mergeObjects(array) {
return array.reduce((acc, obj) => ({ ...acc, ...obj }), {});
}
const consentHistory = Object.values(dataLayer).filter(a=> typeof a === 'object' && a[0] === 'consent');
mergeObjects(consentHistory.map(a=>a?.[2]||{}));
Этот фрагмент кода возвращается с моей стороны:
{
"ad_storage": "granted",
"ad_user_data": "granted",
"ad_personalization": "granted",
"analytics_storage": "granted",
"functionality_storage": "granted",
"personalization_storage": "granted",
"security_storage": "granted"
}
Заметьте, я не проверял это подробно.
Если у вас есть GTM, то window.google_tag_data.ics.entries содержит информацию о текущих состояниях согласия.
Хитрый метод — перехватывать все запросы на уровень данных и отслеживать команды согласия. Сделать это правильно немного сложно, поскольку вам нужно объединить данные в командах и обновить переопределенные значения по умолчанию. Он также не знает обо всех изменениях согласия в GTM.
Эту функцию можно использовать:
window.google_tag_data.ics.getConsentState("analytics_storage");
0 означает отсутствие согласия (отказано), а 1 означает, что согласие было предоставлено.
Пожалуйста, ознакомьтесь с разделом Как задавать вопросы , а затем измените заголовок, чтобы задать четкий и конкретный вопрос. Не добавляйте теги (особенно сокращения). Кроме того, никогда не ссылайтесь «здесь».