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. Nhờ vậy, bạn có thể:

  • chặn thông báo cho bất kỳ người dùng cụ thể 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ụ sau để thu thập sự đồng ý của người dùng bằng một số giao thức tiêu chuẩn trong ngành:

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

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

  1. Đối với hầu hết các 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ó sẽ triển khai thông báo của người dùng sau khi thông báo được xuất bản 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 một cách rõ ràng. Hãy 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 thông báo cho người dùng sử dụng cho API của thuộc tính đó trên JavaScript Window.

Tóm tắt các trường

Tên Loại Định nghĩa
googlefc.controlledMessagingFunction hàm(!Object) Một hàm xác định liệu có tiếp tục nhắn tin 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 của hàng đợi gọi lại.
googlefc.AdBlockerStatusEnum !Đối tượng<chuỗi, số> Một giá trị enum biểu thị trạng thái của trình chặn quảng cáo của người dùng.
googlefc.AllowAdsStatusEnum !Đối tượng<chuỗi, số> Một giá trị enum thể hiện trạng thái cho phép quảng cáo của người dùng.
googlefc.ccpa.InitialCcpaStatusEnum !Đối tượng<chuỗi, số> Một giá trị enum thể hiện trạng thái ban đầu của người dùng theo CPRA.
googlefc.ccpa.overrideDnsLink undefined|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 tuỳ chỉnh.

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

Tên Kiểu dữ liệu trả về Định nghĩa
googlefc.showRevocationMessage() chưa 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 quảng cáo 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)) chưa 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 thử và gỡ lỗi trên trang web của bạn

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 hình thức hiển thị của các thông báo cụ thể (hoặc các tổ hợp thông báo) trên trang web thực tế của mình.

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

  • (Các) thông báo mà bạn muốn xem trước phải được xuất bản trên trang web mà bạn đang kiểm thử

Bạn có thể xem bản 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ị được 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 từ chối theo Đạo luật về quyền riêng tư của California (CPRA), gdpr (Thông báo yêu cầu đồng ý theo GDPR), monetization (Thông báo ưu đãi)

Một số ví dụ về cách sử dụng chế độ 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
  • Thử nghiệm thông báo 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 xác định liệu thông báo có hiển thị hay không. Bạn có thể dùng đối tượng này để kiểm soát việc hiển thị thông báo theo các điều kiện do nhà xuất bản chỉ định, chẳng hạn như trạng thái người đăng ký hoặc URL trang.

Khi bạn xác định googlefc.controlledMessagingFunction trên Cửa sổ trước khi tải các tập lệnh khác, 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 việc nhắn tin tiếp tục 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(). Hàm này sẽ 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 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>

Ngoài ra, chúng tôi còn có một phần mở rộng của tính năng này để cho phép nhà xuất bản trong chương trình thử nghiệm khép kín của Offerwall chỉ định rằng chỉ nên chặn Offerwall. Các loại thông báo khác sẽ không bị ảnh hưởng khi tính năng này có hiệu lực.

Bạn có thể thực hiện thông báo được kiểm soát theo Offerwall bằng cách truyền thêm một thông số tới message.proceed(), một Array thuộc loại googlefc.MessageTypeEnum.

Ví dụ: Đây là ví dụ về việc sử dụng googlefc.controlledMessagingFunction để chỉ ngăn việc 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 gọi lại chung để 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ì nhiều loại dữ liệu có sẵn vào những thời điểm khác nhau, 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 được thực thi làm giá trị.

Các khoá được hỗ trợ:

Tên khoá Cách 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 khung đồng ý được hỗ trợ được xác định và có thể gọi được. Từ thời điểm này trở đi, việc thực thi tất cả hàm có khoá CONSENT_API_READY được thêm vào sau đó sẽ đồng bộ. Xem các phần về khuôn khổ của IAB để biết thông tin cụ thể theo từng khung. Kém
CONSENT_DATA_READY Các hàm được đẩy vào hàng đợi gọi lại bằng khoá CONSENT_DATA_READY sẽ được thực thi khi đã biết sự đồng ý của người dùng được thu thập trong một 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, việc thực thi tất cả hàm có khoá CONSENT_DATA_READY được thêm vào sau đó 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 có trong luồng. Từ thời điểm này trở đi, việc thực thi bất kỳ hàm nào có khoá AD_BLOCK_DATA_READY được thêm vào sau đó đều đồng bộ. 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 có trong luồng. Xin lưu ý rằng bạn phải nhận được yêu cầu tiếp theo về dữ liệu theo CPRA bằng cách gọi trực tiếp API 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ố Kiểu dữ liệu trả về Role
push(data) number data: Một cặp khoá-giá trị, trong đó có khoá là một trong các loại có thể sử dụng dữ liệu và giá trị ở dạng hàm JavaScript sẽ được thực thi. Các khoá cung cấp dữ liệu được chấp nhận là CONSENT_API_READY, CONSENT_DATA_READY, AD_BLOCK_DATA_READYINITIAL_CCPA_DATA_READY. Số lượng lệnh đã thêm tính đến nay. Hàm này trả về độ dài hiện tại của mảng. Thực thi hàm được truyền vào, theo thứ tự dữ liệu có sẵn, rồi 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ác trạng thái sau:

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 khác nhau về việc chặn quảng cáo của người dùng. Có các trạng thái sau:

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 khác nhau về việc chặn quảng cáo của người dùng. Có các trạng thái sau:

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}

Đặt trường này thành true để ẩn liên kết Không bán mặc định và sử dụng liên kết Không bán tuỳ 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: nội dung giải thích và ví dụ

googlefc.getConsentStatus(): {number}


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

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

googlefc.showRevocationMessage(): {undefined}

Xoá hồ sơ đồng ý hiện tại 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 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 nhận được mọi yêu cầu tiếp theo về dữ liệu theo CPRA bằng cách gọi trực tiếp 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 theo CPRA nếu đường liên kết mặc định Không bán bị ghi đè. Sau khi người dùng tương tác với hộp thoại xác nhận, hàm callback đã cung cấp sẽ được gọi bằng true nếu người dùng quyết định chọn không tham gia và nếu không thì sẽ là false.

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 theo 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 khoá hàng đợi gọi lại CONSENT_API_READY để đảm bảo rằng các lệnh gọi lại tương ứng chỉ được gọi khi đã xác định API TCF phiên bản 2 của IAB trên trang. Bạn nên sử dụng lệnh này cùng với lệnh 'addEventListener' của API TCF phiên bản 2 của IAB.

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.2, (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 khoá hàng đợi gọi lại CONSENT_DATA_READY để đảm bảo rằng các lệnh gọi lại tương ứng chỉ được gọi khi thu thập sự đồng ý của người dùng và truy cập được bằng cách sử dụng API TCF phiên bản 2 của IAB. Bạn có thể sử dụng lệnh này cùng với lệnh 'addEventListener' – dữ liệu được cung cấp trong lệnh gọi đầu tiên của lệnh gọi lại mà bạn cung cấp sẽ chứa các lựa chọn đồng ý của người dùng (miễn là TCF phiên bản 2 áp dụng cho người dùng này). Xin lưu ý rằng với bản phát hành TCF phiên bản 2.2, lệnh 'getTCData' hiện đã ngừng hoạt động.

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('addEventListener', 2.2, (data, success) => {
      // Do something with consent data value; this callback may be invoked
      // multiple times if user consent selections change.
    })
  });
</script>

Sử dụng giải pháp quản lý sự đồng ý của Google với khung GPP của IAB 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 khung 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 theo CPRA, bạn có thể sử dụng khoá hàng đợi 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 được và trả về dữ liệu về sự đồng ý tại thời điểm lệnh gọi lại được gọ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 giải pháp quản lý sự đồng ý của Google theo khuôn khổ GPP của IAB cho CPRA bằng đường liên kết Không bán tuỳ chỉnh

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 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 đường liên kết Không bán mặc định sẽ 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ủ CPRA. Sau đó, bạn cần xử lý hoạt động 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 theo 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>