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 informacje o rodzajach zgody w Menedżerze tagów Google oraz dowiesz się, jak je zintegrować z platformą do zarządzania zgodą użytkowników.

Gdy udostępnisz szablon tagu, Twoi użytkownicy będą mogli zintegrować Twoje rozwiązanie do uzyskiwania zgody bez użycia kodu, co pozwoli im zaoszczędzić sporo czasu i wysiłku.

Użytkownicy mogą ustawiać domyślne stany zgody za pomocą szablonu trybu uzyskiwania zgody i przekazywać wybory użytkowników dotyczące zgody do Menedżera tagów Google. Zapewnia to optymalne działanie tagów Google i tagów innych firm, które obsługują tryb uzyskiwania zgody.

Jako twórca szablonu możesz wdrożyć szablony trybu uzyskiwania zgody na potrzeby wewnętrzne lub opublikować 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ć dostępne w funkcji wyboru w Galerii szablonów.

Tagi Google i tagi innych firm dostosowują swoje działanie związane z przechowywaniem danych na podstawie stanu zgody użytkownika , który może mieć wartość granted lub denied. Mogą one mieć wbudowane sprawdzanie zgody użytkownika 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 reklamowych online.
ad_personalization Określa stan zgody na reklamy spersonalizowane.
analytics_storage Umożliwia przechowywanie danych (np. plików cookie) dotyczących statystyk (np. czasu trwania wizyty ).
functionality_storage Umożliwia przechowywanie danych, które obsługują funkcje witryny lub aplikacji np. ustawienia 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 funkcjonalność, zapobieganie oszustwom i inne mechanizmy ochrony użytkowników.

Tryb uzyskiwania zgody śledzi wybory użytkowników dotyczące zgody, a sprawdzanie zgody przez tagi zapewnia odpowiednie dostosowanie ich działania. Podczas tworzenia nowego szablonu zgody postępuj zgodnie z tymi sprawdzonymi metodami:

  • Zamiast gtag consent używaj interfejsów API trybu uzyskiwania zgody w Menedżerze tagów setDefaultConsentState i updateConsentState.

  • Ustaw 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 wyrażenie lub odmowę 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

W tym podejściu do implementacji używamy 1 pola 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 Twój kod próbuje odczytać plik cookie ustawiony przez rozwiązanie do uzyskiwania zgody, aby przechowywać wybory użytkowników dotyczące zgody. Skonfigurujesz też wywołanie zwrotne dla updateConsentState, aby obsługiwać sytuacje, w których użytkownik nie dokonał jeszcze wyboru dotyczącego zgody lub zdecyduje się zmienić swoją zgodę.

  1. Zaloguj się na konto Menedżera tagów Google.
  2. W menu po lewej stronie kliknij Szablony.
  3. W panelu 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 Pole tekstowe, 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). Tekst w nawiasach to dokumentacja dla użytkowników Twojego szablonu. Dowiedz się więcej o konfigurowaniu domyślnych ustawień zgody dla różnych regionów.
  7. Kliknij Dodaj kolumnę, wybierz Pole tekstowe, zmień nazwę na granted.
  8. Rozwiń kolumnę i zmień wyświetlaną nazwę na Granted Consent Types (comma separated).
  9. Kliknij Dodaj kolumnę, wybierz Pole tekstowe, 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 reklam

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. Otwórz kartę Kod w edytorze szablonów.
  2. W przykładowym kodzie poniżej edytuj pola zastępcze.
  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 Dostęp do stanu zgody użytkownika.
  2. Kliknij Dodaj rodzaj zgody.
  3. Kliknij pole i w menu wybierz ad_storage.
  4. Zaznacz Zapisz.
  5. Kliknij Dodaj.
  6. Powtórz kroki 2–5 w przypadku ad_user_data, ad_personalization i analytics_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. Kliknij kartę Uprawnienia i wybierz Odczytuje wartości plików cookie.
  2. W sekcji Konkretne wpisz nazwy wszystkich plików cookie, które Twój 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. Utwórz testy jednostkowe

Informacje o tworzeniu testów dla szablonu znajdziesz w artykule Testy.

3. Zintegruj szablon 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);
  });
};

Gdy użytkownik witryny wskaże swoje wybory dotyczące zgody, zwykle poprzez interakcję z banerem z prośbą o zgodę na przetwarzanie danych, kod szablonu powinien odpowiednio zaktualizować stany zgody użytkownika za pomocą interfejsu API updateConsentState.

Poniższy przykład pokazuje wywołanie updateConsentState w przypadku użytkownika, który wyraził zgodę na wszystkie rodzaje przechowywania danych. Ten przykład ponownie używa zakodowanych na stałe wartości granted, ale w praktyce powinny one być określane w czasie działania 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 działaniu w poszczególnych regionach

Aby ustawić domyślne stany zgody, które mają obowiązywać w przypadku użytkowników z określonych obszarów, w szablonie określ region (zgodnie z normą ISO 3166-2). Używanie wartości regionów umożliwia użytkownikom szablonu przestrzeganie przepisów regionalnych bez utraty informacji od użytkowników spoza tych regionów. Jeśli w poleceniu setDefaultConsentState nie określono regionu, wartość obowiązuje we wszystkich innych regionach.

Na przykład poniższy kod ustawia domyślny stan analytics_storage na denied w przypadku użytkowników z Hiszpanii i Alaski oraz na granted w przypadku wszystkich innych:analytics_storage

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'analytics_storage': 'denied',
  'region': ['ES', 'US-AK']
});
setDefaultConsentState({
  'analytics_storage': 'granted'
});

Pierwszeństwo ma najbardziej szczegółowy poziom

Jeśli na tej samej stronie występują 2 domyślne polecenia zgody z wartościami dla regionu i podregionu, obowiązuje polecenie z bardziej szczegółowym regionem. Jeśli na przykład masz ustawiony stan ad_storage na 'granted' w przypadku regionu US i ad_storage na 'denied' w przypadku regionu US-CA, użytkownik z Kalifornii będzie miał zastosowane bardziej szczegółowe ustawienie US-CA.

Region ad_storage Zachowanie
US 'granted' Dotyczy użytkowników w Stanach Zjednoczonych, którzy nie znajdują się w Kalifornii.
US-CA 'denied' Dotyczy użytkowników w Kalifornii.
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 Kalifornii.

Dodatkowe metadane

Za pomocą interfejsu API gtagSet możesz ustawić te opcjonalne parametry:

Te interfejsy API są dostępne tylko w środowisku piaskownicy szablonów Menedżera tagów Google.

Przekazywanie informacji o kliknięciu reklamy, identyfikatorze klienta i identyfikatorze sesji w adresach URL

Gdy użytkownik wejdzie na stronę reklamodawcy po kliknięciu reklamy, informacje o reklamie mogą zostać dołączone do adresów URL stron docelowych jako parametr zapytania. Aby zwiększyć dokładność konwersji, tagi Google zwykle zapisują te informacje we własnych plikach cookie w domenie reklamodawcy.

Jeśli jednak stan ad_storage ma wartość denied, tagi Google nie zapiszą tych informacji lokalnie. Aby w takim przypadku poprawić jakość pomiaru kliknięć reklam, reklamodawcy mogą opcjonalnie przekazywać informacje o kliknięciu reklamy za pomocą parametrów adresu URL na różnych stronach za pomocą funkcji przekazywania danych w adresie URL.

Podobnie, jeśli stan analytics_storage ma wartość denied, przekazywanie danych w adresie URL może służyć do wysyłania statystyk opartych na zdarzeniach i sesjach (w tym konwersji) bez plików cookie na różnych stronach.

Aby korzystać z przekazywania danych w adresie URL, musisz spełnić te warunki:

  • Na stronie znajdują się tagi Google, które uwzględniają ustawienia zgody użytkownika.
  • Witryna wyraziła zgodę na korzystanie z funkcji przekazywania danych w adresie URL.
  • Na stronie wdrożono tryb uzyskiwania zgody.
  • Link wychodzący odsyła do tej samej domeny co domena bieżącej strony.
  • W adresie URL znajduje się parametr gclid lub dclid (tylko tagi Google Ads i Floodlight).

Twój szablon powinien umożliwiać użytkownikowi skonfigurowanie, czy chce włączyć to ustawienie. Ten kod szablonu służy do ustawiania wartości true dla parametru url_passthrough:

gtagSet('url_passthrough', true);

Usuwanie danych reklam

Gdy stan ad_storage ma wartość denied, nie są ustawiane żadne nowe pliki cookie na potrzeby reklam. Dodatkowo nie będą używane pliki cookie firm zewnętrznych 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 usunąć dane reklam, gdy stan ad_storage ma wartość denied, ustaw wartość true dla parametru ads_data_redaction.

Gdy parametr ads_data_redaction ma wartość true, a parametr ad_storage ma wartość denied, identyfikatory kliknięć reklam wysyłane w żądaniach sieciowych przez tagi Google Ads i Floodlight zostaną usunięte.

gtagSet('ads_data_redaction', true);

Identyfikator dewelopera

Jeśli jesteś dostawcą platformy CMP z identyfikatorem dewelopera wydanym przez Google, użyj tej metody, aby ustawić go jak najwcześniej w szablonie.

Identyfikator dewelopera jest potrzebny tylko wtedy, gdy implementacja będzie używana w wielu witrynach przez niezwiązane ze sobą firmy lub podmioty. Jeśli implementacja będzie używana przez 1 witrynę lub podmiot, nie musisz ubiegać 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żytkownika. Udostępnij użytkownikom dokumentację, która wyjaśnia te sprawdzone metody:

  • Jak ustawić domyślne ustawienia zgody w tabeli Ustawienia.
  • Jak skonfigurować domyślne ustawienia zgody dla różnych regionów, dodając dodatkowe wiersze tabeli.
  • Jak uruchomić 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 Google, prześlij go do Galerii szablonów społeczności.