API JavaScript về Quyền riêng tư và thông báo

Giới thiệu

API này cung cấp các công cụ để tương tác với thông báo do thẻ Quyền riêng tư và thông báo cung cấp. Với tiện ích này, bạn có thể:

  • chặn nhắn tin đối với bất kỳ người dùng nào
  • truy vấn trạng thái chặn quảng cáo của người dùng
  • cho phép người dùng thu hồi sự đồng ý (nếu có)

Bạn cũng có thể sử dụng các công cụ này để thu thập sự đồng ý của người dùng bằng cách sử dụng một số giao thức tiêu chuẩn ngành:

Trong những trường hợp này, trạng thái đồng ý sẽ được thông báo bằng các API đó.

Bạn có thể triển khai chức năng thông báo cho người dùng trên trang web của mình theo một vài cách sau:

  1. Trong hầu hết trường hợp, bạn không cần phải gắn thẻ lại – Thẻ nhà xuất bản của Google hoặc thẻ AdSense hiện có của bạn sẽ triển khai thông báo của người dùng sau khi thông báo được đăng trong sản phẩm có liên quan.
  2. Nếu đang sử dụng thông báo khôi phục quảng cáo bị chặn, bạn cần thêm thẻ chặn quảng cáo vào trang của mình một cách rõ ràng. Xem hướng dẫn gắn thẻ Ad ManagerAdSense để biết thêm thông tin.

googlefc là không gian tên chung mà chức năng nhắn tin cho người dùng sử dụng cho API trên JavaScript Window.

Tóm tắt trường

Tên Loại Định nghĩa
googlefc.controlledMessagingFunction function(!Object) Một hàm giúp xác định xem có tiếp tục thông báo hay không. Chức năng này được hỗ trợ cho tất cả các loại thông báo.
googlefc.callbackQueue !Array<!Object<string, function()>> | !Array<function()> | !googlefc.CallbackQueue Tham chiếu đến hàng đợi gọi lại để thực thi không đồng bộ các truy vấn thông báo cho người dùng.
googlefc.CallbackQueue !Đối tượng Loại đối tượng hàng đợi gọi lại.
googlefc.AdBlockerStatusEnum !Đối tượng<chuỗi, số> Enum đại diện cho trạng thái trình chặn quảng cáo của người dùng.
googlefc.AllowAdsStatusEnum !Đối tượng<chuỗi, số> Một enum đại diện cho trạng thái cho phép của quảng cáo của người dùng.
googlefc.ccpa.InitialCcpaStatusEnum !Đối tượng<chuỗi, số> Enum đại diện cho trạng thái CPRA ban đầu của người dùng.
googlefc.ccpa.overrideDnsLink không xác định|boolean Một giá trị boolean có thể được đặt thành đúng để sử dụng đường liên kết Không bán tùy chỉnh.

Tóm tắt phương pháp

Tên Loại dữ liệu trả về Định nghĩa
googlefc.showRevocationMessage() không xác định Xoá bản ghi về sự đồng ý và tải lại tập lệnh googlefc để hiển thị thông báo yêu cầu đồng ý áp dụng cho người dùng.
googlefc.getAdBlockerStatus() number Trả về một giá trị trong AdBlockerStatusEnum tuỳ thuộc vào trạng thái chặn quảng cáo của người dùng.
googlefc.getAllowAdsStatus() number Trả về một giá trị trong AllowAdsStatusEnum tuỳ thuộc vào trạng thái cho phép của người dùng.
googlefc.ccpa.getInitialCcpaStatus() number Trả về một giá trị trong InitialCcpaStatusEnum tuỳ thuộc vào trạng thái CPRA ban đầu của người dùng.
googlefc.ccpa.openConfirmationDialog(function(boolean)) không xác định Mở hộp thoại xác nhận theo CPRA nếu đường liên kết không bán mặc định bị ghi đè.

Kiểm tra và gỡ lỗi trên trang web

Quyền riêng tư và thông báo cung cấp chức năng gỡ lỗi và kiểm thử cho phép bạn xem các thông báo (hoặc tổ hợp thông báo) cụ thể trông như thế nào trên trang web thực tế của bạn.

Điều kiện tiên quyết:

  • Bạn phải đăng(các) thông báo bạn muốn xem trước trong trang web bạn đang kiểm thử

Bạn có thể xem trước trực tiếp trên trang web của mình bằng cách sử dụng các tham số URL gỡ lỗi sau:

Thông số gỡ lỗi Giá trị cho phép
fc alwaysshow (để kích hoạt chế độ gỡ lỗi/xem trước)
fctype ab (Thông báo chặn quảng cáo), ccpa (Thông báo chọn không tham gia CPRA), gdpr (Thông báo yêu cầu đồng ý theo GDPR (Quy định chung về bảo vệ dữ liệu)), monetization (Thông báo về tường phí)

Một số ví dụ về cách sử dụng bản xem trước này để xem trước trên trang web của bạn (foo.com):

  • Kiểm tra thông báo theo CPRA -- http://foo.com?fc=alwaysshow&fctype=ccpa
  • Kiểm tra thông báo theo GDPR -- http://foo.com?fc=alwaysshow&fctype=gdpr

Trường: giải thích và ví dụ

googlefc.controlledMessagingFunction {function(!Object)}

Một hàm giúp xác định liệu thông báo có hiển thị hay không. Bạn có thể sử dụng thông báo này để kiểm soát việc hiển thị thông báo trên các điều kiện do nhà xuất bản chỉ định, chẳng hạn như trạng thái của người đăng ký hoặc URL trang.

Khi bạn xác định googlefc.controlledMessagingFunction trên Cửa sổ trước khi các tập lệnh khác tải, thông báo sẽ không xuất hiện cho đến khi bạn gọi message.proceed(boolean). Việc gọi message.proceed(true) cho phép chuyển tiếp quá trình nhắn tin như bình thường, trong khi việc gọi message.proceed(false) sẽ ngăn mọi thông báo hiển thị cho lượt xem trang.

Ví dụ: giả sử bạn có tập lệnh này trên trang xác định một hàm không đồng bộ determineIfUserIsSubscriber() để kiểm tra xem người dùng đã đăng nhập có phải là người đăng ký hay không.

<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>

Đây là ví dụ về cách bạn có thể sử dụng googlefc.controlledMessagingFunction để chỉ hiển thị thông báo cho người không đăng ký.

<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>

Nhà xuất bản tham gia chương trình thử nghiệm beta kín của Offerwall có thể chỉ định rằng chỉ nên chặn một số thông báo trên tường phí bằng cách cung cấp thêm một thông số cho message.proceed(). Tham số này là một Array thuộc loại googlefc.MessageTypeEnum. Ngày enum được hỗ trợ duy nhất là OFFERWALL, nhưng có thể thêm các loại thông báo khác trong tương lai.

Ví dụ: giả sử bạn có cùng hàm determineIfUserIsSubscriber() như trên. Dưới đây là ví dụ về cách sử dụng googlefc.controlledMessagingFunction chỉ để chặn hoạt động phân phát Offerwall cho người đăng ký mà không chặn các loại thông báo khác:

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

Tham chiếu đến hàng đợi lệnh gọi lại toàn cục để thực thi không đồng bộ các lệnh gọi liên quan đến tính năng nhắn tin. Cách duy nhất được hỗ trợ để gọi bất kỳ hàm nào là thêm hàm đó vào callbackQueue.

Vì có nhiều loại dữ liệu có sẵn tại nhiều thời điểm, nên bạn phải thêm một hàm dưới dạng bản đồ, trong đó một trong các chuỗi sau là khoá và hàm sẽ được thực thi dưới dạng giá trị.

Các khóa được hỗ trợ:

Tên khóa Mức sử dụng Độ trễ tương đối
CONSENT_API_READY Các hàm được đẩy vào hàng đợi gọi lại bằng khoá CONSENT_API_READY sẽ được thực thi khi API cho các khung đồng ý được hỗ trợ được xác định và có thể gọi. Từ thời điểm này trở đi, quá trình thực thi mọi hàm CONSENT_API_READY được thêm sau này sẽ đồng bộ. Xem các phần về các khung IAB dưới đây để biết thông tin chi tiết theo khung. Kém
CONSENT_DATA_READY Các hàm được đẩy vào hàng đợi gọi lại bằng khóa CONSENT_DATA_READY sẽ được thực thi khi đã biết sự đồng ý của người dùng trong khuôn khổ về sự đồng ý được hỗ trợ (từ lần thực thi trước hoặc sau khi người dùng tương tác với thông báo yêu cầu đồng ý). Từ thời điểm này trở đi, quá trình thực thi mọi hàm CONSENT_DATA_READY được thêm sau này sẽ đồng bộ. Cao
AD_BLOCK_DATA_READY Các hàm được đẩy vào hàng đợi gọi lại bằng khoá AD_BLOCK_DATA_READY sẽ được thực thi khi dữ liệu chặn quảng cáo xuất hiện trong luồng. Từ thời điểm này trở đi, việc thực thi mọi hàm được khoá AD_BLOCK_DATA_READY được thêm sau này sẽ đồng bộ hoá. Cao
INITIAL_CCPA_DATA_READY Các hàm được đẩy vào hàng đợi gọi lại cùng với INITIAL_CCPA_DATA_READY sẽ được thực thi khi dữ liệu CPRA sẵn có trong luồng. Xin lưu ý rằng bạn phải nhận mọi yêu cầu tiếp theo về dữ liệu của CPRA bằng cách gọi điện trực tiếp cho API về quyền riêng tư của Hoa Kỳ (__uspapi). Phương tiện

googlefc.CallbackQueue {!Object}

Tóm tắt phương pháp:

Tên Loại Thông số Loại dữ liệu trả về Vai trò
push(data) number data: Một cặp khoá-giá trị có khoá là một trong các loại dữ liệu có sẵn và giá trị dưới dạng hàm JavaScript sẽ được thực thi. Các khoá dữ liệu được chấp nhận là CONSENT_API_READY, CONSENT_DATA_READY, AD_BLOCK_DATA_READYINITIAL_CCPA_DATA_READY. Số lệnh đã thêm từ trước tới nay. Thao tác này sẽ trả về độ dài hiện tại của mảng. Thực thi hàm đã truyền, theo thứ tự xuất hiện dữ liệu, sau đó theo thứ tự thêm các hàm này vào hàng đợi.

Ví dụ:

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

Thể hiện các trạng thái chặn quảng cáo khác nhau của người dùng. Các trạng thái khác nhau là:

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

Thể hiện các trạng thái cho phép chặn quảng cáo khác nhau của người dùng. Các trạng thái khác nhau là:

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

Thể hiện các trạng thái cho phép chặn quảng cáo khác nhau của người dùng. Các trạng thái khác nhau là:

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}

Hãy đặt trường này thành true để ẩn đường liên kết Không bán mặc định và sử dụng đường liên kết Không bán tùy chỉnh.

Ví dụ:

<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>

Phương pháp: giải thích và ví dụ

googlefc.getConsentStatus(): {number}


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

  1. Thao tác này luôn trả về một danh sách trống khi được gọi.

googlefc.showRevocationMessage(): {undefined}

Xoá bản ghi hiện tại về sự đồng ý và hiển thị thông báo yêu cầu đồng ý áp dụng cho người dùng này. Khoá cần được chỉ định cho hàm này là CONSENT_DATA_READY.

Ví dụ:

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

googlefc.getAdBlockerStatus(): {number}

Trả về một giá trị trong AdBlockerStatusEnum tuỳ thuộc vào trạng thái chặn quảng cáo của người dùng. Khoá cần được chỉ định cho hàm này là AD_BLOCK_DATA_READY.

Ví dụ:

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

Trả về một giá trị trong AllowAdsStatusEnum tuỳ thuộc vào trạng thái cho phép của quảng cáo của người dùng. Khoá cần được chỉ định cho hàm này là AD_BLOCK_DATA_READY.

Ví dụ:

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

Trả về một giá trị trong InitialCcpaStatusEnum tuỳ thuộc vào trạng thái CPRA của người dùng. Khoá cần được chỉ định cho hàm này là INITIAL_CCPA_DATA_READY. Xin lưu ý rằng bạn phải lấy mọi yêu cầu tiếp theo về dữ liệu của CPRA bằng cách gọi trực tiếp cho API Quyền riêng tư của Hoa Kỳ (__uspapi).

Ví dụ:

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

Mở hộp thoại xác nhận CPRA nếu đường liên kết Không bán mặc định bị ghi đè. Sau khi người dùng tương tác với hộp thoại xác nhận, hàm gọi lại đã cung cấp sẽ được gọi với true nếu người dùng quyết định từ chối, còn false thì ngược lại.

Ví dụ:

<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>

Nếu đang sử dụng các giải pháp quản lý sự đồng ý của Google để thu thập sự đồng ý theo GDPR trong khuôn khổ TCF phiên bản 2 của IAB, bạn nên sử dụng API TCF phiên bản 2 của IAB.

Bạn có thể sử dụng CONSENT_API_READY

hàng đợi gọi lại để đảm bảo rằng các lệnh gọi lại tương ứng chỉ được gọi khi API TCF phiên bản 2 của IAB được xác định trên trang. Bạn nên sử dụng tính năng này kết hợp với lệnh 'addEventListener' của API TCF phiên bản 2 của IAB vì trạng thái đồng ý của người dùng được tìm nạp bằng lệnh 'getTCData' đồng bộ có thể chưa có sẵn.

Ví dụ:

<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>

Bạn có thể sử dụng CONSENT_DATA_READY

hàng đợi lệnh gọi lại để đảm bảo rằng các lệnh gọi lại tương ứng chỉ được gọi khi lấy sự đồng ý của người dùng và truy cập bằng API TCF phiên bản 2 của IAB. Bạn có thể sử dụng thuộc tính này cùng với lệnh 'getTCData' để tìm nạp trạng thái đồng ý của người dùng bằng các phương thức đồng bộ.

Ví dụ:

<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>

Sử dụng các giải pháp quản lý sự đồng ý của Google trong khuôn khổ GPP của IAB dành cho CPRA

Nếu đang sử dụng các giải pháp quản lý sự đồng ý của Google để thu thập lựa chọn không tham gia CPRA theo Khuôn khổ GPP của IAB, bạn nên sử dụng API GPP của IAB.

Do tính chất chọn không sử dụng của quy định CPRA, bạn có thể sử dụng khoá hàng đợi lệnh gọi lại CONSENT_API_READY hoặc CONSENT_DATA_READY để đảm bảo rằng API GPP của IAB có thể gọi và trả về dữ liệu về sự đồng ý tại thời điểm gọi lại.

<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>

Sử dụng các giải pháp quản lý sự đồng ý của Google trong khung GPP của IAB dành cho CPRA với một đường liên kết tuỳ chỉnh Không bán

Nếu bạn đang sử dụng các giải pháp quản lý sự đồng ý của Google để thu thập lựa chọn từ chối của CPRA theo khung GPP của IAB, thì bạn có thể cung cấp đường liên kết Không bán tuỳ chỉnh bằng cách đặt cờ googlefc.ccpa.overrideDnsLink thành 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>

Điều này đảm bảo rằng liên kết Không bán mặc định không hiển thị. Xin lưu ý rằng bạn có trách nhiệm hiển thị đường liên kết Không bán của riêng mình để tuân thủ CPCP. Sau đó, bạn cần xử lý tương tác của người dùng với đường liên kết Không bán tuỳ chỉnh bằng cách gọi hộp thoại xác nhận 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>