Ten dokument jest przeznaczony dla deweloperów, którzy utrzymują platformę do zarządzania zgodą użytkowników w witrynach korzystających z Menedżera tagów Google (GTM).
Na tej stronie znajdziesz wprowadzenie do rodzajów zgody w Menedżerze tagów Google oraz dowiesz się, jak zintegrować je z platformą do zarządzania zgodą użytkowników.
Dlaczego warto używać szablonu tagu do uzyskiwania zgody?
Gdy udostępnisz szablon tagu, użytkownicy będą mogli zintegrować Twoje rozwiązanie do uzyskiwania zgody bez użycia kodu, co pozwoli im zaoszczędzić dużo czasu i wysiłku.
Użytkownicy mogą ustawiać domyślne stany zgody za pomocą szablonu trybu uzyskiwania zgody i przekazywać do Menedżera tagów Google informacje o wyborach użytkowników dotyczące zgody na przetwarzanie danych. Zapewnia to optymalne działanie tagów Google i innych firm, które obsługują tryb uzyskiwania zgody.
Jako twórca szablonów możesz wdrażać szablony trybu uzyskiwania zgody do użytku wewnętrznego lub publikować je w Galerii szablonów społeczności, aby udostępnić je publicznie. Dostawcy platform do zarządzania zgodą użytkowników (CMP), którzy oferują szablony trybu uzyskiwania zgody, mogą zostać wymienieni w naszej dokumentacji trybu uzyskiwania zgody, a ich szablony mogą być wyróżnione w selektorze Galerii szablonów.
Sposób przetwarzania informacji z warstwy danych.Stan zgody użytkownika i rodzaje zgody
Tagi Google i tagi innych usług dostosowują swoje działanie związane z przechowywaniem danych na podstawie stanu zgody, który może mieć wartość granted lub denied. Mogą one mieć wbudowane sprawdzanie zgody w przypadku dowolnego z tych rodzajów zgody:
| Rodzaj zgody | Opis |
|---|---|
ad_storage |
Umożliwia przechowywanie danych (np. plików cookie) związanych z reklamami. |
ad_user_data |
Określa stan zgody na wysyłanie danych użytkownika do Google w celach związanych z reklamą online. |
ad_personalization |
Określa stan zgody na reklamy spersonalizowane. |
analytics_storage |
Umożliwia przechowywanie danych (np. plików cookie) związanych z analityką (np. czasem trwania wizyty). |
functionality_storage |
Umożliwia przechowywanie danych, które obsługują funkcje witryny lub aplikacji, np. ustawień języka. |
personalization_storage |
Umożliwia przechowywanie danych dotyczących personalizacji, np. rekomendacji filmów. |
security_storage |
Umożliwia przechowywanie danych związanych z zabezpieczeniami, takimi jak funkcja uwierzytelniania, zapobieganie oszustwom i inne mechanizmy ochrony użytkowników |
Tworzenie nowego szablonu zgody
Tryb uzyskiwania zgody śledzi wybory użytkowników dotyczące zgody na przetwarzanie danych, a mechanizmy sprawdzania zgody w tagach zapewniają odpowiednie dostosowanie działania tagów. Podczas tworzenia nowego szablonu prośby o zgodę na przetwarzanie danych postępuj zgodnie z tymi sprawdzonymi metodami:
Zamiast
gtag consentużywaj interfejsów API trybu uzyskiwania zgody Menedżera tagów setDefaultConsentState i updateConsentState.Ustawiaj domyślne stany zgody natychmiast po uruchomieniu za pomocą reguły Inicjacja zgody – Wszystkie strony.
Platforma CMP musi jak najszybciej wyświetlić użytkownikowi prośbę o udzielenie lub odrzucenie zgody na wszystkie odpowiednie rodzaje zgody.
Gdy użytkownik wskaże swój wybór dotyczący zgody, platforma CMP musi przekazać zaktualizowany stan zgody użytkownika.
1. Utwórz nowy szablon
To podejście do wdrażania wykorzystuje jedno pole w szablonie do przechowywania domyślnego stanu zgody użytkownika. Kod implementacji odczytuje to pole, aby ustawić domyślny stan zgody użytkownika w czasie działania. W przypadku polecenia aktualizacji kod próbuje odczytać plik cookie ustawiony przez platformę do zarządzania zgodą użytkowników, aby przechowywać wybory użytkowników dotyczące zgody. Skonfigurujesz też wywołanie zwrotne dla
updateConsentState, aby obsługiwać przypadki, w których użytkownik nie dokonał jeszcze wyboru dotyczącego zgody lub zdecyduje się zmienić swoją decyzję.
Aby utworzyć szablon zgody:
- Zaloguj się na konto Menedżera tagów Google.
- W menu nawigacyjnym po lewej stronie kliknij Szablony.
- W okienku Szablony tagów kliknij Nowy.
Aby ustawić domyślne stany zgody użytkownika:
- Kliknij kartę Pola, a potem Dodaj pole > Tabela parametrów.
- Zmień nazwę na
defaultSettings. - Rozwiń pole.
- Zmień wyświetlaną nazwę na
Default settings. - Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu, zmień nazwę na
regioni zaznacz pole Wymagaj, aby wartości w kolumnie były unikalne. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Region (leave blank to have consent apply to all regions). Zdanie w nawiasie to dokumentacja dla użytkowników szablonu. Dowiedz się więcej o konfigurowaniu domyślnych ustawień zgody w różnych regionach. - Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu i zmień nazwę na
granted. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Granted Consent Types (comma separated). - Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu i zmień nazwę na
denied. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Denied Consent Types (comma separated).
Opcjonalnie: aby dodać obsługę pomijania danych reklam:
- Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na
ads_data_redaction. - Zmień wyświetlaną nazwę na
Redact Ads Data.
Dowiedz się więcej o działaniu plików cookie w przypadku pomijania danych reklamowych
Opcjonalnie: aby dodać obsługę przekazywania parametrów adresu URL:
- Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na
url_passthrough. - Zmień wyświetlaną nazwę na
Pass through URL parameters.
Dowiedz się więcej o przekazywaniu parametrów adresu URL
Aby dodać kod implementacji:
- W edytorze szablonów otwórz kartę Kod.
- W przykładowym kodzie poniżej zmień pola symboli zastępczych.
- Skopiuj kod i zastąp nim powtarzalny kod w edytorze szablonów.
- Zapisz szablon.
// The first two lines are optional, use if you want to enable logging
const log = require('logToConsole');
log('data =', data);
const setDefaultConsentState = require('setDefaultConsentState');
const updateConsentState = require('updateConsentState');
const getCookieValues = require('getCookieValues');
const callInWindow = require('callInWindow');
const gtagSet = require('gtagSet');
const JSON = require('JSON');
const COOKIE_NAME = 'Your_cookie_name';
/*
* Splits the input string using comma as a delimiter, returning an array of
* strings
*/
const splitInput = (input) => {
if (!input) return [];
return input.split(',')
.map(entry => entry.trim())
.filter(entry => entry.length !== 0);
};
/*
* Processes a row of input from the default settings table, returning an object
* which can be passed as an argument to setDefaultConsentState
*/
const parseCommandData = (settings) => {
const regions = splitInput(settings['region']);
const granted = splitInput(settings['granted']);
const denied = splitInput(settings['denied']);
const commandData = {};
if (regions.length > 0) {
commandData.region = regions;
}
granted.forEach(entry => {
commandData[entry] = 'granted';
});
denied.forEach(entry => {
commandData[entry] = 'denied';
});
return commandData;
};
/*
* Called when consent changes. Assumes that consent object contains keys which
* directly correspond to Google consent types.
*/
const onUserConsent = (consent) => {
const consentModeStates = {
ad_storage: consent['adConsentGranted'] ? 'granted' : 'denied',
ad_user_data: consent['adUserDataConsentGranted'] ? 'granted' : 'denied',
ad_personalization: consent['adPersonalizationConsentGranted'] ? 'granted' : 'denied',
analytics_storage: consent['analyticsConsentGranted'] ? 'granted' : 'denied',
functionality_storage: consent['functionalityConsentGranted'] ? 'granted' : 'denied',
personalization_storage: consent['personalizationConsentGranted'] ? 'granted' : 'denied',
security_storage: consent['securityConsentGranted'] ? 'granted' : 'denied',
};
updateConsentState(consentModeStates);
};
/*
* Executes the default command, sets the developer ID, and sets up the consent
* update callback
*/
const main = (data) => {
/*
* Optional settings using gtagSet
*/
gtagSet('ads_data_redaction', data.ads_data_redaction);
gtagSet('url_passthrough', data.url_passthrough);
gtagSet('developer_id.your_developer_id', true);
// Set default consent state(s). Add optional chaining to safely handle cases
// where defaultSettings might be null or undefined.
data.defaultSettings?.forEach(settings => {
const defaultData = parseCommandData(settings);
// wait_for_update (ms) allows for time to receive visitor choices from the CMP
defaultData.wait_for_update = 500;
setDefaultConsentState(defaultData);
});
// Check if cookie is set and has values that correspond to Google consent
// types. If it does, run onUserConsent().
const cookieValues = getCookieValues(COOKIE_NAME);
if (cookieValues && cookieValues.length > 0) {
try {
const settings = JSON.parse(cookieValues[0]);
if (settings) {
onUserConsent(settings);
}
} catch (e) {
// Log an error if the cookie value is not valid JSON.
}
}
/**
* Add event listener to trigger update when consent changes
*
* References an external method on the window object which accepts a
* function as an argument. If you do not have such a method, you will need
* to create one before continuing. This method should add the function
* that is passed as an argument as a callback for an event emitted when
* the user updates their consent. The callback should be called with an
* object containing fields that correspond to the five built-in Google
* consent types.
*/
callInWindow('addConsentListenerExample', onUserConsent);
};
main(data);
data.gtmOnSuccess();
Następnie skonfiguruj uprawnienia dostępu do stanu zgody użytkownika i plików cookie.
Aby dodać uprawnienia do zarządzania stanami zgody użytkownika:
- Wybierz kartę Uprawnienia i kliknij Stan zgody użytkownika dostępu.
- Kliknij Dodaj rodzaj zgody.
- Kliknij pole i w menu wybierz
ad_storage. - Zaznacz Pisz.
- Kliknij Dodaj.
- Powtórz kroki 2–5 w przypadku wartości
ad_user_data,ad_personalizationianalytics_storage. Jeśli potrzebujesz dodatkowych rodzajów zgody, dodaj je w ten sam sposób. - Kliknij Zapisz.
Aby dodać uprawnienia dostępu do plików cookie:
- Wybierz kartę Uprawnienia i kliknij Odczyt wartości plików cookie.
- W sekcji Konkretne wpisz nazwy wszystkich plików cookie, które kod musi odczytać, aby określić wybory użytkownika dotyczące zgody. Każda nazwa powinna znajdować się w osobnym wierszu.
- Kliknij Zapisz.
2. Tworzenie testów jednostkowych
Informacje o tworzeniu testów szablonu znajdziesz w sekcji Testy.
3. Integracja szablonu z rozwiązaniem do uzyskiwania zgody
Poniższy kod pokazuje przykład integracji tego szablonu z kodem platformy do zarządzania zgodą użytkowników przez dodanie detektora:
// Array of callbacks to be executed when consent changes
const consentListeners = [];
/**
* Called from GTM template to set callback to be executed when user consent is provided.
* @param {function} Callback to execute on user consent
*/
window.addConsentListenerExample = (callback) => {
consentListeners.push(callback);
};
/**
* Called when user grants/denies consent.
* @param {Object} Object containing user consent settings.
*/
const onConsentChange = (consent) => {
consentListeners.forEach((callback) => {
callback(consent);
});
};
Aktualizowanie stanu zgody użytkownika
Gdy użytkownik strony internetowej wskaże swoje wybory dotyczące zgody na przetwarzanie danych, zwykle poprzez interakcję z banerem z prośbą o zgodę na przetwarzanie danych, kod szablonu powinien odpowiednio zaktualizować stany zgody za pomocą interfejsu API updateConsentState.
W przykładzie poniżej pokazujemy wywołanie updateConsentState w przypadku użytkownika, który wyraził zgodę na wszystkie typy pamięci. W tym przykładzie ponownie używamy zakodowanych na stałe wartości granted, ale w praktyce powinny one być określane w czasie działania programu na podstawie zgody użytkownika zebranej przez platformę CMP.
const updateConsentState = require('updateConsentState');
updateConsentState({
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'analytics_storage': 'granted',
'functionality_storage': 'granted',
'personalization_storage': 'granted',
'security_storage': 'granted'
});
Informacje o zachowaniu w poszczególnych regionach
Aby ustawić domyślne stany zgody, które będą stosowane do użytkowników z określonych obszarów, w szablonie określ region (zgodnie z ISO 3166-2). Używanie wartości regionów umożliwia użytkownikom szablonu zachowanie zgodności z przepisami regionalnymi bez utraty informacji o osobach odwiedzających witrynę spoza tych regionów. Jeśli w poleceniu setDefaultConsentState nie określono regionu, wartość jest stosowana do wszystkich pozostałych regionów.
Na przykład ten kod ustawia domyślny stan analytics_storage na
denied w przypadku użytkowników z Hiszpanii i Alaski, a w przypadku wszystkich pozostałych ustawia analytics_storage na
granted:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
Pierwszeństwo ma najbardziej szczegółowe ustawienie
Jeśli na tej samej stronie występują 2 domyślne polecenia dotyczące zgody użytkownika z wartościami dla regionu i podregionu, obowiązuje polecenie z bardziej szczegółowym regionem. Jeśli na przykład w przypadku regionu US masz ustawioną wartość ad_storage = 'granted', a w przypadku regionu US-CA masz ustawioną wartość ad_storage = 'denied', to w przypadku użytkownika z Kalifornii będzie obowiązywać bardziej szczegółowe ustawienie US-CA.
| Region | ad_storage |
Zachowanie |
|---|---|---|
| US | 'granted' |
Dotyczy użytkowników w Stanach Zjednoczonych, którzy nie mieszkają w Kalifornii |
| US-CA | 'denied' |
Dotyczy użytkowników z US-CA |
| Nie określono | 'granted' |
Używa wartości domyślnej 'granted'. W tym przykładzie dotyczy to użytkowników, którzy nie znajdują się w Stanach Zjednoczonych ani w Stanach Zjednoczonych i Kanadzie.
|
Dodatkowe metadane
Za pomocą interfejsu gtagSet możesz ustawić te opcjonalne parametry:
Te interfejsy API są dostępne tylko w środowisku piaskownicy szablonów GTM.
Przekazywanie w adresach URL informacji o kliknięciu reklamy, identyfikatorze klienta i identyfikatorze sesji
Gdy użytkownik wejdzie na stronę reklamodawcy po kliknięciu reklamy, do adresów URL stron docelowych mogą być dołączane informacje o reklamie w postaci parametru zapytania. Aby zwiększyć dokładność konwersji, tagi Google zwykle zapisują te informacje we własnych plikach cookie w domenie reklamodawcy.
Jeśli jednak wartość parametru ad_storage to denied, tagi Google nie zapiszą tych informacji lokalnie. Aby w tym przypadku poprawić jakość pomiaru kliknięć reklam, reklamodawcy mogą opcjonalnie przekazywać informacje o kliknięciach reklam na kolejne strony za pomocą parametrów URL, korzystając z funkcji o nazwie przekazywanie adresu URL.
Podobnie jeśli wartość analytics_storage to „denied”, można użyć przekazywania adresów URL, aby wysyłać dane analityczne oparte na zdarzeniach i sesjach (w tym konwersje) bez plików cookie na różnych stronach.
Aby korzystać z przekazywania adresu URL, musisz spełnić te warunki:
- Na stronie znajdują się tagi Google uwzględniające ustawienia zgody użytkownika.
- Witryna włączyła funkcję przekazywania danych w adresie URL.
- Na stronie jest wdrożony tryb uzyskiwania zgody.
- Link wychodzący odnosi się do tej samej domeny co domena bieżącej strony.
- W adresie URL występuje parametr gclid/dclid (tylko tagi Google Ads i Floodlight)
Szablon powinien umożliwiać użytkownikowi skonfigurowanie, czy chce włączyć to ustawienie. Poniższy kod szablonu służy do ustawienia wartości url_passthrough na true:
gtagSet('url_passthrough', true);
Usuwanie danych reklam
Gdy użytkownik odmówi ad_storage, nie są ustawiane żadne nowe pliki cookie do celów reklamowych. Dodatkowo nie będą używane pliki cookie innych firm ustawione wcześniej na stronach google.com i doubleclick.net. Dane wysyłane do Google będą nadal zawierać pełny adres URL strony, w tym informacje o kliknięciu reklamy w parametrach adresu URL.
Aby dodatkowo redagować dane reklam, gdy ad_storage zostanie odrzucone, ustaw wartość ads_data_redaction na true.
Gdy wartość parametru ads_data_redaction to „true”, a wartość parametru ad_storage to „denied”, identyfikatory kliknięć reklam wysyłane w żądaniach sieciowych przez tagi Google Ads i Floodlight będą usuwane.
gtagSet('ads_data_redaction', true);
Identyfikator dewelopera
Jeśli jesteś dostawcą platformy CMP z identyfikatorem programisty wydanym przez Google, użyj tej metody, aby ustawić go w szablonie jak najwcześniej.
Identyfikator dewelopera jest potrzebny tylko wtedy, gdy wdrożenie będzie używane w wielu witrynach przez niezwiązane ze sobą firmy lub podmioty. Jeśli wdrożenie będzie używane przez 1 witrynę lub podmiot, nie ubiegaj się o identyfikator dewelopera.
gtagSet('developer_id.<your_developer_id>', true);
Udostępnianie dokumentacji użytkownikom
Użytkownicy będą używać Twojego szablonu zgody do konfigurowania tagu, który zbiera zgodę użytkowników. Udostępnij użytkownikom dokumentację, która wyjaśnia te sprawdzone metody:
- Jak ustawić domyślne wartości zgody w tabeli Ustawienia.
- Jak skonfigurować domyślne ustawienia zgody użytkownika dla różnych regionów, dodając dodatkowe wiersze tabeli.
- Uruchamiaj tag za pomocą reguły Inicjacja zgody – Wszystkie strony.
Dalsze kroki
Jeśli chcesz udostępnić swój szablon wszystkim użytkownikom Menedżera tagów, prześlij go do Galerii szablonów społeczności.