Tworzenie szablonu trybu uzyskiwania zgody

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.

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.

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

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 consent uż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ę.

  1. Zaloguj się na konto Menedżera tagów Google.
  2. W menu nawigacyjnym po lewej stronie kliknij Szablony.
  3. W okienku Szablony tagów kliknij Nowy.
  1. Kliknij kartę Pola, a potem Dodaj pole > Tabela parametrów.
  2. Zmień nazwę na defaultSettings.
  3. Rozwiń pole.
  4. Zmień wyświetlaną nazwę na Default settings.
  5. Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu, zmień nazwę na region i zaznacz pole Wymagaj, aby wartości w kolumnie były unikalne.
  6. 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.
  7. Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu i zmień nazwę na granted.
  8. Rozwiń kolumnę i zmień wyświetlaną nazwę na Granted Consent Types (comma separated).
  9. Kliknij Dodaj kolumnę, wybierz Wprowadzanie tekstu i zmień nazwę na denied.
  10. Rozwiń kolumnę i zmień wyświetlaną nazwę na Denied Consent Types (comma separated).

Opcjonalnie: aby dodać obsługę pomijania danych reklam:

  1. Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na ads_data_redaction.
  2. 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:

  1. Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na url_passthrough.
  2. Zmień wyświetlaną nazwę na Pass through URL parameters.

Dowiedz się więcej o przekazywaniu parametrów adresu URL

Aby dodać kod implementacji:

  1. W edytorze szablonów otwórz kartę Kod.
  2. W przykładowym kodzie poniżej zmień pola symboli zastępczych.
  3. Skopiuj kod i zastąp nim powtarzalny kod w edytorze szablonów.
  4. 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.

  1. Wybierz kartę Uprawnienia i kliknij Stan zgody użytkownika dostępu.
  2. Kliknij Dodaj rodzaj zgody.
  3. Kliknij pole i w menu wybierz ad_storage.
  4. Zaznacz Pisz.
  5. Kliknij Dodaj.
  6. Powtórz kroki 2–5 w przypadku wartości ad_user_data, ad_personalizationanalytics_storage. Jeśli potrzebujesz dodatkowych rodzajów zgody, dodaj je w ten sam sposób.
  7. Kliknij Zapisz.

Aby dodać uprawnienia dostępu do plików cookie:

  1. Wybierz kartę Uprawnienia i kliknij Odczyt wartości plików cookie.
  2. 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.
  3. Kliknij Zapisz.

2. Tworzenie testów jednostkowych

Informacje o tworzeniu testów szablonu znajdziesz w sekcji Testy.

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);
  });
};

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.