(interfejs) Privacy & Messaging JavaScript API

Wprowadzenie

Ten interfejs API zapewnia narzędzia do interakcji z wiadomościami oferowanymi na karcie Prywatność i przesyłanie wiadomości. Dzięki niej możesz:

  • pomijanie wiadomości w przypadku danego użytkownika,
  • wysyłanie zapytań dotyczących stanu blokowania reklam przez użytkownika;
  • umożliwianie użytkownikowi odstąpienia od umowy (w odpowiednich przypadkach)

Korzystając ze standardowych standardów branżowych, możesz także uzyskać zgodę użytkownika za pomocą tych narzędzi:

W takich przypadkach informacje o stanie zgody są przekazywane za pomocą tych interfejsów.

Funkcję wysyłania wiadomości przez użytkowników możesz wdrożyć w witrynie na kilka sposobów:

  1. W większości przypadków nie musisz dodawać ponownie tagów – istniejący tag wydawcy Google lub tag AdSense wdraża wiadomości użytkowników, gdy tylko zostaną one opublikowane w danej usłudze.
  2. Jeśli używasz wiadomości dla użytkowników blokujących reklamy, musisz wyraźnie dodać do niej tag blokowania reklam. Więcej informacji znajdziesz w instrukcjach tagowania Ad Managera i AdSense.

googlefc to globalna przestrzeń nazw używana przez interfejs użytkownika do obsługi wiadomości użytkownika w interfejsie API JavaScriptu Window.

Podsumowanie pól

Nazwa Typ Definicja
googlefc.controlledMessagingFunction function(!Object) Funkcja określająca, czy należy wybrać wiadomość. Ta funkcja jest dostępna dla wszystkich typów wiadomości.
googlefc.callbackQueue !Array<!Object<string,function()>> | !Array<function()> | !googlefc.CallbackQueue, Odniesienie do kolejki wywołań zwrotnych do asynchronicznego wykonywania zapytań użytkowników.
googlefc.CallbackQueue !Obiekty Typ obiektu kolejki wywołania.
googlefc.AdBlockerStatusEnum !Object<ciąg, liczba> Wyliczenie reprezentujące stan blokowania użytkownika.
googlefc.AllowAdsStatusEnum !Object<ciąg, liczba> Wyliczenie reprezentujące stan zezwolenia użytkownika na wyświetlanie reklam.
googlefc.ccpa.InitialCcpaStatusEnum !Object<ciąg, liczba> Wyliczenie reprezentujące początkowy stan CPRA użytkownika
googlefc.ccpa.overrideDnsLink nieokreślona|wartość logiczna Wartość logiczna, która może mieć wartość Prawda, aby używać niestandardowego linku Nie zgadzam się sprzedawać.

Podsumowanie metod

Nazwa Zwracany typ Definicja
googlefc.showRevocationMessage() nie zdefiniowano Czyści rekord zgody i ponownie wczytuje skrypt googlefc, aby wyświetlić wiadomość z prośbą o zgodę na wykorzystanie danych odpowiednią dla użytkownika.
googlefc.getAdBlockerStatus() numer Zwraca wartość w polu AdBlockerStatusEnum w zależności od stanu blokowania reklamy użytkownika.
googlefc.getAllowAdsStatus() numer Zwraca wartość w polu AllowAdsStatusEnum w zależności od stanu dopuszczania reklam przez użytkownika.
googlefc.ccpa.getInitialCcpaStatus() numer Zwraca wartość w polu InitialCcpaStatusEnum w zależności od początkowego stanu CPRA użytkownika.
googlefc.ccpa.openConfirmationDialog(function(boolean)) nie zdefiniowano Otwiera okno z prośbą o potwierdzenie CPRA, jeśli domyślny link „Nie sprzedawaj” zostanie zastąpiony

Testowanie i debugowanie witryny

Strona „Prywatność i wyświetlanie wiadomości” oferuje funkcje debugowania i testowania, które pozwalają zobaczyć, jak konkretne wiadomości wyglądają (lub ich kombinacje) w rzeczywistej witrynie.

Wymagania wstępne:

  • Komunikaty, których podgląd chcesz wyświetlić, muszą być opublikowane w witrynie, której dotyczy test.

Podgląd na żywo możesz sprawdzić w swojej witrynie, korzystając z tych parametrów adresu URL debugowania:

Parametr debugowania Dozwolone wartości
fc alwaysshow (aby aktywować tryb debugowania lub podglądu)
fctype ab (wiadomości dotyczące blokowania reklam), ccpa (wiadomości umożliwiające wycofanie zgody na wykorzystanie danych zgodnie z ustawą CPRA), gdpr (wiadomości z prośbą o zgodę na wykorzystanie danych zgodne z RODO), monetization (wiadomości typu offerwall)

Oto kilka przykładów użycia podglądu w witrynie (foo.com):

  • Przetestuj wiadomość CPRA – http://foo.com?fc=alwaysshow&fctype=ccpa
  • Testowanie wiadomości zgodnej z RODO – http://foo.com?fc=alwaysshow&fctype=gdpr

Pola: wyjaśnienia i przykłady

googlefc.controlledMessagingFunction {function(!Object)}

Funkcja określająca, czy wiadomości mają być wyświetlane. Można go używać do blokowania renderowania wiadomości w warunkach określonych przez wydawcę, takich jak stan subskrybenta lub adres URL strony.

Jeśli w oknie zdefiniujesz tag googlefc.controlledMessagingFunction przed załadowaniem innych skryptów, wiadomości nie będą się wyświetlać, dopóki nie wywołasz metody message.proceed(boolean). Wywołanie message.proceed(true) zezwala na przekazywanie wiadomości tak jak zwykle, a wywołanie message.proceed(false) uniemożliwia wyświetlanie jakichkolwiek wiadomości dla odsłony.

Załóżmy, że masz na stronie ten skrypt definiujący funkcję asynchronicznej determineIfUserIsSubscriber(), która sprawdza, czy zalogowany użytkownik jest subskrybentem.

<head>
  <script>
    window.isSubscriber = undefined;
    function determineIfUserIsSubscriber() {
      if (isSubscriber !== undefined) {
        return isSubscriber;
      }
      return new Promise(resolve => {
        setTimeout(() => {
          // Change this to true if you want to test what subscribers would see.
          window.isSubscriber = false;
          resolve(window.isSubscriber);
        }, 1000);
      });
    }
  </script>
</head>

Oto przykład użycia googlefc.controlledMessagingFunction w celu wyświetlania wiadomości tylko osobom bez subskrypcji.

<head>
  <script>
    // Define googlefc and the controlled messaging function on the Window.
    window.googlefc = window.googlefc || {};
    googlefc.controlledMessagingFunction = async (message) => {
      // Determine if the user is a subscriber asynchronously.
      const isSubscriber = await determineIfUserIsSubscriber();

      if (isSubscriber) {
        // If the user is a subscriber, don't show any messages.
        message.proceed(false);
      } else {
        // Otherwise, show messages as usual.
        message.proceed(true);
      }
    }
  </script>
</head>

Wydawcy korzystający z zamkniętej wersji beta typu offerwall mogą określić, że tylko wiadomość typu offerwall powinna być ignorowana, podając dodatkowy parametr message.proceed(). Ten parametr typu Array jest typu googlefc.MessageTypeEnum. Obecnie obsługiwane jest tylko jedno rozszerzenie (OFFERWALL), ale w przyszłości możemy dodać więcej typów wiadomości.

Przykład: załóżmy, że masz tę samą funkcję determineIfUserIsSubscriber() co powyżej. Oto przykład użycia właściwości googlefc.controlledMessagingFunction do pominięcia wyświetlania wiadomości typu offerwall w przypadku subskrybentów bez pomijania innych typów wiadomości:

<head>
  <script>
    // Define googlefc and the controlled messaging function on the Window.
    window.googlefc = window.googlefc || {};
    googlefc.controlledMessagingFunction = async (message) => {
     // Determine if the Offerwall should display or not.
     const shouldDisplayOfferwall = await determineIfUserIsSubscriber();
     const applicableMessageTypes = [];

     if (!shouldDisplayOfferwall) {
       // Do not show the Offerwall, but allow other message types to display.
       applicableMessageTypes.push(window.googlefc.MessageTypeEnum.OFFERWALL);
       message.proceed(false, applicableMessageTypes);
     } else {
       // Otherwise, show messages as usual.
       message.proceed(true);
     }
    }
  </script>
</head>

googlefc.callbackQueue {!Array<!Object<string, function()>> | !Array<function()> | !googlefc.CallbackQueue}

Odniesienie do globalnej kolejki wywołań służącej do asynchronicznego wykonywania połączeń dotyczących wiadomości. Jedynym obsługiwanym sposobem na wywołanie każdej funkcji jest dodanie jej do callbackQueue.

Ponieważ różne typy danych są dostępne w różnym czasie, należy dodać funkcję jako mapę z jednym z tych ciągów znaków jako klucza, a funkcję do wykonania jako wartości.

Obsługiwane klucze:

Nazwa klucza Wykorzystanie Względne opóźnienie
CONSENT_API_READY Funkcje przekazywane do kolejki wywołań zwrotnych z kluczem CONSENT_API_READY są wykonywane po zdefiniowaniu i wywołaniu interfejsów API dla obsługiwanych platform do uzyskiwania zgody użytkownika. Od tego momentu wykonywanie wszelkich później dodanych funkcji CONSENT_API_READY jest synchroniczne. Szczegółowe informacje dotyczące poszczególnych platform znajdziesz poniżej w sekcji platform IAB. Niska
CONSENT_DATA_READY Funkcje przekazywane do kolejki wywołań zwrotnych z kluczem CONSENT_DATA_READY są wykonywane, gdy zgoda użytkownika na przetwarzanie danych jest zgodna z obsługiwanymi zasadami dotyczącymi zgody użytkownika (z wcześniejszego wykonania lub po interakcji użytkownika z wiadomością z prośbą o zgodę na wykorzystanie danych). Od tego momentu wykonywanie wszelkich później dodanych funkcji CONSENT_DATA_READY jest synchroniczne. Wysoki
AD_BLOCK_DATA_READY Funkcje przekazywane do kolejki wywołań zwrotnych z kluczem AD_BLOCK_DATA_READY są wykonywane po udostępnieniu danych blokujących reklamy. Od tego momentu wykonywanie wszelkich później dodanych funkcji AD_BLOCK_DATA_READY jest synchroniczne. Wysoki
INITIAL_CCPA_DATA_READY Funkcje przekazywane do kolejki wywołań zwrotnych z INITIAL_CCPA_DATA_READY są wykonywane, gdy dane CPRA będą dostępne w ramach przepływu. Pamiętaj, że każde późniejsze żądanie danych CPRA powinno być wywoływane bezpośrednio przez interfejs US Privacy API (__uspapi). Średni

googlefc.CallbackQueue {!Object}

Podsumowanie metody:

Nazwa Typ Parametr Zwracany typ Rola
push(data) numer data: para klucz-wartość z kluczem jako jednym z typów dostępności danych i wartością jako funkcją JavaScriptu do wykonania. Akceptowane klucze dostępności danych to CONSENT_API_READY, CONSENT_DATA_READY, AD_BLOCK_DATA_READY i INITIAL_CCPA_DATA_READY. Liczba wprowadzonych do tej pory poleceń. Zwraca bieżącą długość tablicy. Wykonuje przekazaną funkcję w kolejności, w której dane są dostępne, a następnie w kolejności dodawania tych funkcji do kolejki.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback on the callbackQueue.
  googlefc.callbackQueue.push({
    'AD_BLOCK_DATA_READY':
    () => {
      if (googlefc.getAdBlockerStatus() == googlefc.AdBlockerStatusEnum.NO_AD_BLOCKER) {
        // Handle a non-ad blocking user.
      }
    }
  });
</script>

googlefc.AdBlockerStatusEnum {!Object<string, number>}

Odzwierciedla różne stany blokowania reklam użytkownika. Są to:

googlefc.AdBlockerStatusEnum = {
  // Something failed, in an unknown state.
  UNKNOWN: 0,
  // The user was running an extension level ad blocker.
  EXTENSION_AD_BLOCKER: 1,
  // The user was running a network level ad blocker.
  NETWORK_LEVEL_AD_BLOCKER: 2,
  // The user was not blocking ads.
  NO_AD_BLOCKER: 3,
};

googlefc.AllowAdsStatusEnum {!Object<string, number>}

Odzwierciedla różne stany dopuszczania reklam przez użytkowników blokujących reklamy. Są to:

googlefc.AllowAdsStatusEnum = {
  // Something failed, in an unknown state.
  UNKNOWN: 0,
  // User is currently using an ad blocker, was never using an ad blocker, or
  // allowed ads, but not because they saw the Privacy & messaging message.
  ADS_NOT_ALLOWED: 1,
  // User is no longer using an ad blocker after seeing the ad blocking message.
  ADS_ALLOWED: 2,
};

googlefc.ccpa.InitialCcpaStatusEnum{!Object<string, number>}

Odzwierciedla różne stany dopuszczania reklam przez użytkowników blokujących reklamy. Są to:

googlefc.ccpa.InitialCcpaStatusEnum = {
  // Something failed, in an unknown state.
  UNKNOWN: 0,
  // CPRA does not apply to this user.
  CCPA_DOES_NOT_APPLY: 1,
  // CPPA applies to this user, and the user has not opted out yet.
  NOT_OPTED_OUT: 2,
  // CPPA applies to this user, and the user has opted out.
  OPTED_OUT: 3,
};

googlefc.ccpa.overrideDnsLink{undefined|boolean}

Aby ukryć domyślny link Nie zgadzam się na sprzedaż danych osobowych i użyć niestandardowego linku Nie zgadzam się, nie ustawiaj tego pola na wartość Prawda.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  // Signals that the default DNS link will be overridden.
  googlefc.ccpa.overrideDnsLink = true;
</script>

Metody: wyjaśnienia i przykłady

googlefc.getConsentStatus(): {number}


googlefc.getConsentedProviderIds(): {!Array<string>}

.
  1. Po wywołaniu zawsze wyświetla się pusta lista.

googlefc.showRevocationMessage(): {undefined}

Czyści bieżący rekord zgody i pokazuje wiadomość z prośbą o zgodę na wykorzystanie danych użytkownika. Klucz, który powinien być określony dla tej funkcji, to CONSENT_DATA_READY.

Przykład:

<button type="button" onclick="googlefc.callbackQueue.push({'CONSENT_DATA_READY': () => googlefc.showRevocationMessage()});">
  Click here to revoke
</button>

googlefc.getAdBlockerStatus(): {number}

Zwraca wartość w zasadzie AdBlockerStatusEnum w zależności od stanu blokowania użytkownika. Klucz, który powinien być określony dla tej funkcji, to AD_BLOCK_DATA_READY.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback on the callbackQueue.
  googlefc.callbackQueue.push({
    'AD_BLOCK_DATA_READY':
    () => {
      switch (googlefc.getAdBlockerStatus()) {
          case googlefc.AdBlockerStatusEnum.EXTENSION_LEVEL_AD_BLOCKER:
          case googlefc.AdBlockerStatusEnum.NETWORK_LEVEL_AD_BLOCKER:
            // Insert handling for cases where the user is blocking ads.
            break;
          case googlefc.AdBlockerStatusEnum.NO_AD_BLOCKER:
            // Insert handling for cases where the user is not blocking ads.
            break;
          case googlefc.AdBlockerStatusEnum.UNKNOWN:
            // Insert handling for unknown cases.
            break;
      }
    }
  });
</script>

googlefc.getAllowAdsStatus(): {number}

Zwraca wartość w polu AllowAdsStatusEnum zależnie od stanu dopuszczania reklam przez użytkownika. Klucz, który powinien być określony dla tej funkcji, to AD_BLOCK_DATA_READY.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback on the callbackQueue.
  googlefc.callbackQueue.push({
    'AD_BLOCK_DATA_READY':
    () => {
      switch (googlefc.getAllowAdsStatus()) {
        case googlefc.AllowAdsStatusEnum.ADS_NOT_ALLOWED:
          // Insert handling for cases where the user has not allowed ads.
          // The user may have never been an ad blocker.
          break;
        case googlefc.AllowAdsStatusEnum.ADS_ALLOWED:
          // Insert handling for cases where the user saw the ad blocking
          // message and allowed ads on the site.
          break;
        case googlefc.AllowAdsStatusEnum.UNKNOWN:
          // Insert handling for unknown cases.
          break;
      }
    }
  });
</script>

googlefc.ccpa.getInitialCcpaStatus(): {number}

Zwraca wartość w polu InitialCcpaStatusEnum w zależności od stanu CPRA użytkownika. Klucz, który powinien być określony dla tej funkcji, to INITIAL_CCPA_DATA_READY. Pamiętaj, że każde późniejsze żądanie danych CPRA powinno być wywoływane bezpośrednio przez interfejs US Privacy API (__uspapi).

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback on the callbackQueue.
  googlefc.callbackQueue.push({
    'INITIAL_CCPA_DATA_READY':
    () => {
      switch (googlefc.ccpa.getInitialCcpaStatus()) {
        case googlefc.ccpa.InitialCcpaStatusEnum.CCPA_DOES_NOT_APPLY:
          // Insert handling for cases where the user is not CPRA eligible.
          break;
        case googlefc.ccpa.InitialCcpaStatusEnum.NOT_OPTED_OUT:
          // Insert handling for cases where the user is CPRA eligible and has
          // not opted out.
          break;
        case googlefc.ccpa.InitialCcpaStatusEnum.OPTED_OUT:
          // Insert handling for cases where the user is CPRA eligible and has
          // opted out.
          break;
      }
    }
  });
</script>

googlefc.ccpa.openConfirmationDialog(function(boolean)): {undefined}

Otwiera okno z prośbą o potwierdzenie CPRA, jeśli domyślny link „Nie sprzedawaj” zostanie zastąpiony Gdy użytkownik wejdzie w interakcję z oknem potwierdzenia, wywołana przez niego funkcja wywołania zwrotnego zostanie wywołana za pomocą właściwości true, jeśli użytkownik zdecyduje się zrezygnować z oglądania, lub false w innym przypadku.

Przykład:

<script>
// This callback will be called with the user CPRA decision.
const ccpaCompletionCallback = (userOptedOut) => {
  // Insert handling for user opt-out status here.
}
// Invoke the CPRA confirmation dialog when the user clicks the link.
document.getElementById("your-custom-ccpa-do-not-sell-link").addEventListener(
  "click", () => googlefc.ccpa.openConfirmationDialog(ccpaCompletionCallback));
</script>

Jeśli korzystasz z rozwiązań Google do zarządzania zgodą użytkowników na przetwarzanie danych zgodnie z Zasadami IAB dotyczącymi przejrzystości i uzyskiwania zgody na przetwarzanie danych w wersji 2, musisz używać interfejsu API IAB Zasad dotyczących przejrzystości i uzyskiwania zgody na przetwarzanie danych w wersji 2.

Na stronie CONSENT_API_READY

klucz kolejki wywołań, który daje pewność, że odpowiednie wywołania zwrotne są wywoływane tylko wtedy, gdy na stronie definiuje się interfejs IAB TCF w wersji 2. Należy go używać w połączeniu z poleceniem API IAB dotyczącym przejrzystości i uzyskiwania zgody na przetwarzanie danych w wersji 2.0'addEventListener', które jest używane przez polecenie synchronicznej zgody użytkownika 'getTCData'.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback using the CONSENT_API_READY key on the callbackQueue.
  window.googlefc.callbackQueue.push({
    'CONSENT_API_READY':
    () => __tcfapi('addEventListener', 2.0, (data, success) => {
      // Do something with consent data value; this callback may be invoked
      // multiple times as user completes consent flow.
    })
  });
</script>

Na stronie CONSENT_DATA_READY

Klucz kolejki wywołań zapewnia, że odpowiednie wywołania zwrotne są wywoływane tylko wtedy, gdy użytkownik wyraził zgodę i uzyskał do niej dostęp za pomocą interfejsu API Zasad IAB dotyczących przejrzystości i uzyskiwania zgody na przetwarzanie danych w wersji 2. Tej opcji można używać w połączeniu z poleceniem 'getTCData', ponieważ stan zgody użytkownika możesz pobrać za pomocą metod synchronicznych.

Przykład:

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback using the CONSENT_DATA_READY key on the callbackQueue.
  window.googlefc.callbackQueue.push({
    'CONSENT_DATA_READY':
    () => __tcfapi('getTCData', 2.0, (data, success) => {
      // Do something with consent data value.
    })
  });
</script>

Korzystanie z rozwiązań Google do zarządzania zgodą użytkowników na potrzeby zasad CPRA opracowanych przez IAB

Jeśli korzystasz z rozwiązań Google do zarządzania zgodą użytkowników na potrzeby rezygnacji z CPRA zgodnie z Zasadami IAB GPP, skorzystaj z interfejsu IAB GPP API.

Ze względu na możliwość rezygnacji z ustawy CPRA możesz użyć klucza kolejki wywołania CONSENT_API_READY lub CONSENT_DATA_READY, aby zapewnić wywoływanie interfejsu IAB GPP API i zwracanie danych zgody w momencie wywołania zwrotnego.

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Queue the callback on the callbackQueue.
  window.googlefc.callbackQueue.push({
    'CONSENT_DATA_READY':
    () => __uspapi('getUSPData', 1, (data, success) => {
      // Do something with consent data value.
    })
  });
</script>

Korzystanie z rozwiązań Google do zarządzania zgodą użytkowników na potrzeby platformy CPRA dla IAB z niestandardowym linkiem do sprzedaży

Jeśli korzystasz z rozwiązań Google do zarządzania zgodą użytkowników na potrzeby wycofania zgody na wykorzystanie danych zgodnie z ustawą CPRA IAB, możesz ustawić niestandardowy link „Nie zgadzam się na sprzedaż moich danych osobowych”, ustawiając flagę googlefc.ccpa.overrideDnsLink na true.

<script>
  // Make sure that the properties exist on the window.
  window.googlefc = window.googlefc || {};
  window.googlefc.ccpa = window.googlefc.ccpa || {}
  window.googlefc.callbackQueue = window.googlefc.callbackQueue || [];

  // Signals that the default DNS link will be overridden.
  window.googlefc.ccpa.overrideDnsLink = true;

  // Register the callback for the initial CPRA data.
  window.googlefc.callbackQueue.push({
      'INITIAL_CCPA_DATA_READY': () => {
        if (googlefc.ccpa.getInitialCcpaStatus() ===
            googlefc.ccpa.InitialCcpaStatusEnum.NOT_OPTED_OUT) {
          // TODO: Display custom CPRA Do Not Sell link here.
        }
      }
    });
</script>

Dzięki temu domyślny link „Nie sprzedawaj” nie jest renderowany. Pamiętaj, że Twoim obowiązkiem jest wyrenderowanie własnego linku Nie zgadzam się na sprzedaż danych, aby zachować zgodność z CPRA. Następnie musisz obsługiwać interakcję użytkownika z niestandardowym linkiem Nie zgadzam się na sprzedaż, wywołując okno dialogowe potwierdzenia CPRA.

<script>
// This callback will be called with the user CPRA decision.
const ccpaCompletionCallback = (userOptedOut) => {
  if (userOptedOut) {
    // TODO: Hide custom CPRA Do Not Sell link here.
  }
}
// Invoke the CPRA confirmation dialog when the user clicks the link.
document.getElementById("your-custom-ccpa-do-not-sell-link").addEventListener(
  "click", () => googlefc.ccpa.openConfirmationDialog(ccpaCompletionCallback));
</script>