Privacy & Messaging JavaScript API

معرفی

این API ابزارهایی را برای تعامل با پیام های ارائه شده توسط برگه حریم خصوصی و پیام ارائه می دهد. با آن می توانید:

  • پیام‌رسانی را برای هر کاربر خاص متوقف کنید
  • وضعیت مسدود شدن تبلیغات یک کاربر را جویا شوید
  • به کاربر اجازه می دهد رضایت خود را لغو کند (در صورت وجود)

همچنین می توانید از این ابزارها برای جمع آوری رضایت کاربر با استفاده از برخی از پروتکل های استاندارد صنعتی استفاده کنید:

در این موارد، وضعیت رضایت از طریق آن APIها اعلام می شود.

می‌توانید این قابلیت پیام‌رسانی کاربر را به چند روش در سایت خود اجرا کنید:

  1. در بیشتر موارد، اصلاً نیازی به برچسب‌گذاری مجدد ندارید - تگ Google Publisher یا تگ AdSense موجود، پس از انتشار پیام در محصول مربوطه، پیام‌های کاربر را به کار می‌گیرد.
  2. اگر از پیام بازیابی مسدودسازی تبلیغات استفاده می‌کنید، باید تگ مسدودکننده تبلیغات را به طور واضح به صفحه خود اضافه کنید. برای اطلاعات بیشتر به دستورالعمل‌های برچسب‌گذاری Ad Manager و AdSense مراجعه کنید.

googlefc فضای نام جهانی است که عملکرد پیام‌رسانی کاربر برای API خود در Window جاوا اسکریپت استفاده می‌کند.

خلاصه های میدانی

نام تایپ کنید تعریف
googlefc.controlledMessagingFunction تابع (! شی) تابعی که تعیین می‌کند آیا به هر پیامی ادامه می‌دهید یا خیر. این قابلیت برای همه انواع پیام پشتیبانی می شود.
googlefc.callbackQueue !آرایه<!Object<string,function()>> | !آرایه<function()> | !googlefc.CallbackQueue ارجاع به صف برگشت تماس برای اجرای ناهمزمان پرس و جوهای پیام رسانی کاربر.
googlefc.CallbackQueue !هدف - شی نوع شیء صف برگشت تماس.
googlefc.AdBlockerStatusEnum !شیء<رشته، عدد> یک عدد برای نشان دادن وضعیت مسدودکننده تبلیغات کاربر.
googlefc.AllowAdsStatusEnum !شیء<رشته، عدد> یک شماره برای نشان دادن وضعیت اجازه تبلیغات کاربر.
googlefc.ccpa.InitialCcpaStatusEnum !شیء<رشته، عدد> یک عدد برای نشان دادن وضعیت اولیه CPRA کاربر.
googlefc.ccpa.overrideDnsLink تعریف نشده|بولی یک Boolean که می‌تواند برای استفاده از پیوند سفارشی «فروش ندهید» روی true تنظیم شود.

خلاصه روش

نام نوع برگشت تعریف
googlefc.showRevocationMessage() تعریف نشده رکورد رضایت را پاک می کند و اسکریپت googlefc را مجدداً بارگیری می کند تا پیام رضایت مربوط به کاربر را نشان دهد.
googlefc.getAdBlockerStatus() عدد بسته به وضعیت مسدود کردن تبلیغات کاربر، مقداری را در AdBlockerStatusEnum برمی‌گرداند.
googlefc.getAllowAdsStatus() عدد بسته به وضعیت مجاز تبلیغات کاربر، مقداری را در AllowAdsStatusEnum برمی‌گرداند.
googlefc.ccpa.getInitialCcpaStatus() عدد بسته به وضعیت اولیه CPRA کاربر، مقداری را در InitialCcpaStatusEnum برمی‌گرداند.
googlefc.ccpa.openConfirmationDialog(function(boolean)) تعریف نشده اگر پیوند فروش پیش‌فرض لغو شود، گفتگوی تأیید CPRA را باز می‌کند.

تست و رفع اشکال در سایت شما

حریم خصوصی و پیام‌رسانی قابلیت اشکال‌زدایی و آزمایش را فراهم می‌کند که به شما امکان می‌دهد ببینید پیام‌های خاص (یا ترکیبی از پیام‌ها) در سایت واقعی شما چگونه به نظر می‌رسند.

پیش نیازها:

  • پیام(هایی) که می‌خواهید پیش‌نمایش کنید، باید در سایتی که روی آن آزمایش می‌کنید منتشر شود

با استفاده از پارامترهای URL اشکال زدایی زیر می توانید یک پیش نمایش زنده در سایت خود مشاهده کنید:

پارامتر اشکال زدایی مقادیر مجاز
fc alwaysshow (برای راه اندازی حالت اشکال زدایی/پیش نمایش)
fctype ab (پیام‌های مسدودکننده آگهی)، ccpa (پیام‌های انصراف CPRA)، gdpr (پیام‌های رضایت GDPR)، monetization (پیام‌های دیوار پیشنهادی)

چند نمونه از نحوه استفاده از این برای پیش نمایش در سایت خود (foo.com):

  • آزمایش پیام CPRA -- http://foo.com?fc=alwaysshow&fctype=ccpa
  • آزمایش پیام‌رسانی GDPR -- http://foo.com?fc=alwaysshow&fctype=gdpr

زمینه ها: توضیحات و مثال ها

googlefc.controlledMessagingFunction {function(!Object)}

عملکردی که تعیین می کند پیام ها باید نمایش داده شوند یا نه. می توان از آن برای دریچه پردازی پیام در شرایط مشخص شده توسط ناشر مانند وضعیت مشترک یا URL صفحه استفاده کرد.

وقتی googlefc.controlledMessagingFunction را قبل از بارگیری اسکریپت های دیگر در پنجره تعریف می کنید، پیام ها نمایش داده نمی شوند تا زمانی که message.proceed(boolean) را فراخوانی کنید. فراخوانی message.proceed(true) به پیام‌رسانی اجازه می‌دهد طبق معمول پیش برود، در حالی که فراخوانی message.proceed(false) از نمایش هر پیامی برای نمای صفحه جلوگیری می‌کند.

مثال: فرض کنید این اسکریپت را در صفحه ای دارید که تابع async determineIfUserIsSubscriber() را تعریف می کند که بررسی می کند آیا کاربر وارد شده مشترک است یا خیر.

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

این نمونه ای از نحوه استفاده از googlefc.controlledMessagingFunction برای نمایش پیام فقط به غیر مشترکین است.

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

ناشران بخشی از بتای بسته Offerwall می توانند مشخص کنند که فقط Offerwall باید با ارائه یک پارامتر اضافی به message.proceed() سرکوب شود. این پارامتر Array از نوع googlefc.MessageTypeEnum است. تنها فهرستی که امروز پشتیبانی می‌شود OFFERWALL است، اما ممکن است در آینده انواع پیام‌های دیگری اضافه شود.

مثال: فرض کنید تابع determineIfUserIsSubscriber() مشابه بالا را دارید. این نمونه‌ای از استفاده از googlefc.controlledMessagingFunction برای سرکوب خدمات Offerwall برای مشترکین است، بدون اینکه انواع پیام‌های دیگر سرکوب شود:

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

ارجاع به صف جهانی پاسخ به تماس برای اجرای ناهمزمان تماس های مرتبط با پیام. تنها راه پشتیبانی شده برای فراخوانی هر تابع، افزودن آن به callbackQueue است.

از آنجایی که انواع مختلفی از داده ها در زمان های مختلف در دسترس می شوند، یک تابع باید به عنوان نقشه اضافه شود که یکی از رشته های زیر به عنوان کلید و تابعی که باید به عنوان مقدار اجرا شود، اضافه شود.

کلیدهای پشتیبانی شده:

نام کلید استفاده تأخیر نسبی
CONSENT_API_READY عملکردهایی که با کلید CONSENT_API_READY به صف برگشت به تماس منتقل می‌شوند، زمانی اجرا می‌شوند که APIهای چارچوب‌های رضایت پشتیبانی شده تعریف و قابل فراخوانی باشند. از این نقطه به بعد، اجرای هر توابع اضافه شده بعدی با کلید CONSENT_API_READY همزمان است. برای جزئیات مربوط به چارچوب، بخش‌های چارچوب‌های IAB را در زیر ببینید. کم
CONSENT_DATA_READY عملکردهایی که با کلید CONSENT_DATA_READY به صف پاسخگویی ارسال می‌شوند، زمانی اجرا می‌شوند که رضایت کاربر جمع‌آوری‌شده تحت یک چارچوب رضایت پشتیبانی‌شده مشخص باشد (چه از اجرای قبلی یا زمانی که کاربر با پیام رضایت تعامل داشته باشد). از این نقطه به بعد، اجرای هر توابع اضافه شده بعدی با کلید CONSENT_DATA_READY همزمان است. بالا
AD_BLOCK_DATA_READY عملکردهایی که با کلید AD_BLOCK_DATA_READY به صف برگشت تماس داده می‌شوند، زمانی اجرا می‌شوند که داده‌های مسدودکننده تبلیغات در جریان موجود می‌شوند. از این نقطه به بعد، اجرای هر توابع اضافه شده بعدی با کلید AD_BLOCK_DATA_READY همزمان است. بالا
INITIAL_CCPA_DATA_READY توابعی که با INITIAL_CCPA_DATA_READY به صف برگشت تماس داده می‌شوند، زمانی اجرا می‌شوند که داده‌های CPRA در جریان موجود می‌شوند. توجه داشته باشید که هر درخواست بعدی برای داده های CPRA باید با تماس مستقیم با API حریم خصوصی ایالات متحده ( __uspapi ) دریافت شود. متوسط

googlefc.CallbackQueue {!Object}

خلاصه روش:

نام تایپ کنید پارامتر نوع برگشت نقش
push(data) عدد data : یک جفت کلید-مقدار با کلید به عنوان یکی از انواع در دسترس بودن داده و مقدار به عنوان یک تابع جاوا اسکریپت که باید اجرا شود. کلیدهای قابل قبول در دسترس بودن داده عبارتند از CONSENT_API_READY ، CONSENT_DATA_READY ، AD_BLOCK_DATA_READY و INITIAL_CCPA_DATA_READY . تعداد دستورات اضافه شده تاکنون این طول فعلی آرایه را برمی گرداند. تابع ارسال شده را به ترتیبی که داده ها در دسترس قرار می گیرند و سپس با ترتیبی که این توابع به صف اضافه می شوند اجرا می کند.

مثال:

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

نشان دهنده حالت های مختلف مسدود کردن تبلیغات کاربر است. حالات مختلف عبارتند از:

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

نشان‌دهنده حالت‌های مختلف مجوز مسدود کردن تبلیغات کاربر است. حالات مختلف عبارتند از:

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

نشان‌دهنده حالت‌های مختلف مجوز مسدود کردن تبلیغات کاربر است. حالات مختلف عبارتند از:

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}

این فیلد را روی true تنظیم کنید تا پیوند پیش‌فرض عدم فروش پنهان شود و از پیوند سفارشی عدم فروش استفاده کنید.

مثال:

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

روش: توضیح و مثال

googlefc.getConsentStatus(): {number}


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

  1. این اکنون هنگام فراخوانی همیشه یک لیست خالی برمی گرداند.

googlefc.showRevocationMessage(): {undefined}

رکورد رضایت فعلی را پاک می کند و پیام رضایتی را که برای این کاربر قابل اجرا است نشان می دهد. کلیدی که باید برای این تابع مشخص شود CONSENT_DATA_READY است.

مثال:

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

googlefc.getAdBlockerStatus(): {number}

بسته به وضعیت مسدود کردن تبلیغات کاربر، مقداری را در AdBlockerStatusEnum برمی‌گرداند. کلیدی که باید برای این تابع مشخص شود AD_BLOCK_DATA_READY است.

مثال:

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

بسته به وضعیت مجاز تبلیغات کاربر، مقداری را در AllowAdsStatusEnum برمی‌گرداند. کلیدی که باید برای این تابع مشخص شود AD_BLOCK_DATA_READY است.

مثال:

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

بسته به وضعیت CPRA کاربر، مقداری را در InitialCcpaStatusEnum برمی‌گرداند. کلیدی که باید برای این تابع مشخص شود INITIAL_CCPA_DATA_READY است. توجه داشته باشید که هر درخواست بعدی برای داده های CPRA باید با تماس مستقیم با API حریم خصوصی ایالات متحده ( __uspapi ) دریافت شود.

مثال:

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

اگر پیوند فروش پیش‌فرض لغو شود، گفتگوی تأیید CPRA را باز می‌کند. هنگامی که کاربر با گفتگوی تأیید تعامل برقرار می کند، اگر کاربر تصمیم به انصراف داشته باشد، تابع پاسخ به تماس ارائه شده با true فراخوانی می شود و در غیر این صورت false .

مثال:

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

اگر از راه‌حل‌های مدیریت رضایت Google برای جمع‌آوری رضایت GDPR تحت چارچوب IAB TCF v2 استفاده می‌کنید، باید از IAB TCF v2 API استفاده کنید.

می توانید از CONSENT_API_READY استفاده کنید

کلید صف برگشت تماس برای اطمینان از اینکه تماس های مربوطه فقط زمانی فراخوانی می شوند که IAB TCF v2 API در صفحه تعریف شده باشد. این باید همراه با دستور 'addEventListener' IAB TCF v2 API استفاده شود زیرا ممکن است رضایت کاربر واکشی شده با استفاده از دستور همزمان 'getTCData' هنوز در دسترس نباشد.

مثال:

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

می توانید از CONSENT_DATA_READY استفاده کنید

کلید صف برگشت تماس برای اطمینان از اینکه تماس های مربوطه فقط زمانی فراخوانی می شوند که رضایت کاربر جمع آوری شده و با استفاده از IAB TCF v2 API قابل دسترسی باشد. این را می توان همراه با دستور 'getTCData' استفاده کرد زیرا می توانید وضعیت رضایت کاربر را با استفاده از روش های همزمان دریافت کنید.

مثال:

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

استفاده از راهکارهای مدیریت رضایت Google با چارچوب IAB GPP برای CPRA

اگر از راه‌حل‌های مدیریت رضایت Google برای جمع‌آوری انصراف CPRA تحت چارچوب IAB GPP استفاده می‌کنید، باید از IAB GPP API استفاده کنید.

با توجه به ماهیت انصراف از مقررات CPRA، می‌توانید از کلید صف برگشت تماس CONSENT_API_READY یا CONSENT_DATA_READY استفاده کنید تا مطمئن شوید که IAB GPP API قابل فراخوانی است و داده‌های رضایت را در زمان فراخوانی تماس‌ها برمی‌گرداند.

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

استفاده از راه‌حل‌های مدیریت رضایت Google با چارچوب IAB GPP برای CPRA با پیوند سفارشی عدم فروش

اگر از راه‌حل‌های مدیریت رضایت Google برای جمع‌آوری انصراف CPRA تحت چارچوب IAB GPP استفاده می‌کنید، می‌توانید با تنظیم پرچم googlefc.ccpa.overrideDnsLink روی 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>

این تضمین می‌کند که پیوند پیش‌فرض عدم فروش رندر نمی‌شود. توجه داشته باشید که برای مطابقت با CPRA، مسئولیت ارائه پیوند فروش خود را بر عهده دارید. سپس، باید تعامل کاربر با پیوند سفارشی «فروش ندهید» را با فراخوانی گفتگوی تأیید 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>