Gizlilik ve Mesajlaşma JavaScript API'sı

Giriş

Bu API, Google Gizlilik ve iletişim kurabilirsiniz. Bu özellik sayesinde:

  • belirli bir kullanıcıya gönderilen mesajları engelle
  • bir kullanıcının reklam engelleme durumunu sorgula
  • kullanıcının izni iptal etmesine izin verme (geçerliyse)

Bu araçları, bazı endüstri standartlarını kullanarak kullanıcı izni almak için de kullanabilirsiniz. protokoller:

Bu durumlarda izin durumu, bu API'ler aracılığıyla iletilir.

Bu kullanıcı mesajlaşma işlevini sitenizde dağıtabilirsiniz. yöntemler:

  1. Çoğu durumda, hiç yeniden etiketleme yapmanıza gerek yoktur. Mevcut Google Yayıncı Tag veya AdSense etiketi dağıtımları Kullanıcı mesajları (mesaj ilgili üründe yayınlandıktan sonra)
  2. Reklam engelleme iptali mesajını kullanıyorsanız etiketini sayfanıza açıkça eklemeniz gerekir. Bkz. Reklam Manager ve AdSense etiketleme başlıklı bölüme bakın.

googlefc, kullanıcı mesajlaşma işlevinin kullandığı genel ad alanıdır. API'sı için Window.

Alan Özetleri

Ad Tür Tanım
googlefc.controlledMessagingFunction fonksiyon(!Nesne) Herhangi bir mesajın devam edip etmeyeceğini belirleyen bir işlev. Bu işlev tüm mesaj türleri için desteklenir.
googlefc.callbackQueue !Array<!Nesne<dize, işlev()>> | !Array&lt;function()&gt; | !googlefc.CallbackQueue Kullanıcı mesajlaşma sorgularının eşzamansız olarak yürütülmesi için geri çağırma sırasına referans.
googlefc.CallbackQueue !Object Geri çağırma sırası nesnesinin türü.
googlefc.AdBlockerStatusEnum !Nesne<dize, sayı> Kullanıcının reklam engelleyici durumunu temsil eden bir sıralama.
googlefc.AllowAdsStatusEnum !Nesne<dize, sayı> Kullanıcının reklamlara izin verme durumunu temsil eden bir sıralama.
googlefc.ccpa.InitialCcpaStatusEnum !Nesne<dize, sayı> Kullanıcının başlangıç CPRA durumunu temsil eden bir sıralama.
googlefc.ccpa.overrideDnsLink tanımsız|boole Özel bir Satmayın bağlantısı kullanmak için doğru olarak ayarlanabilen bir boole değeri.

Yöntem Özetleri

Ad Dönüş türü Tanım
googlefc.showRevocationMessage() tanımsız Kullanıcı rızası kaydını temizler ve kullanıcı için geçerli olan kullanıcı rızası alma mesajını göstermek üzere googlefc komut dosyasını yeniden yükler.
googlefc.getAdBlockerStatus() sayı Kullanıcının reklam engelleme durumuna bağlı olarak AdBlockerStatusEnum içinde bir değer döndürür.
googlefc.getAllowAdsStatus() sayı Kullanıcının reklamlara izin verme durumuna bağlı olarak AllowAdsStatusEnum içinde bir değer döndürür.
googlefc.ccpa.getInitialCcpaStatus() sayı Kullanıcının başlangıçtaki CPRA durumuna bağlı olarak InitialCcpaStatusEnum içinde bir değer döndürür.
googlefc.ccpa.openConfirmationDialog(function(boolean)) tanımsız Varsayılan Satma bağlantısı geçersiz kılınırsa CPRA onay iletişim kutusunu açar.

Sitenizde test etme ve hata ayıklama

Gizlilik ve Mesajlaşma aracı, hata ayıklama ve test işlevleri sunar. belirli mesajların (veya mesaj kombinasyonlarının) olabilir.

Ön koşullar:

  • Önizlemek istediğiniz mesajlar, bulunduğunuz sitede yayınlanmalıdır ile test

Aşağıdaki hata ayıklama URL'sini kullanarak sitenizde canlı önizleme görebilirsiniz parametre:

Hata ayıklama parametresi İzin verilen değerler
fc alwaysshow (hata ayıklama/önizleme modunu tetiklemek için)
fctype ab (Reklam engelleme mesajları), ccpa (CPRA devre dışı bırakma mesajları), gdpr (GDPR kullanıcı rızası alma mesajları), monetization (Offerwall mesajları)

Sitenizde (foo.com) önizleme yapmak için bunu nasıl kullanacağınıza ilişkin bazı örnekler:

  • CPRA mesajını test et: http://foo.com/?fc=alwaysshow&fctype=ccpa
  • GDPR mesajlarını test edin: http://foo.com/?fc=alwaysshow&fctype=gdpr
ziyaret edin.

Alanlar: açıklamalar ve örnekler

googlefc.controlledMessagingFunction {function(!Object)}

Mesajların gösterilip gösterilmeyeceğini belirleyen bir işlev. Bu, Örneğin, yayıncı tarafından belirlenen koşullarda mesaj oluşturmayı engellemek için kullanılır. Örneğin: veya sayfanın URL'sini kullanabilirsiniz.

Şu tarihten önce Pencere'de googlefc.controlledMessagingFunction tanımladığınızda: diğer komut dosyaları yükleniyor, siz çağrı yapana kadar mesajlar gösterilmez message.proceed(boolean). message.proceed(true) numarasını aradığınızda şu kişilere mesaj gönderebilirsiniz: normal şekilde devam eder ancak message.proceed(false) çağrısı yapıldığında gelen mesajlar hiçbir gösterilmesini engeller.

Örnek: sayfada eşzamansız bir öğeyi tanımlayan bu komut dosyasının bulunduğunu varsayalım giriş yapmış kullanıcının determineIfUserIsSubscriber() abone olmanız gerekir.

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

Bu, Google Ads'deki Mesajın yalnızca kullanıcılara gösterilmesi için googlefc.controlledMessagingFunction abone olmayan izleyiciler.

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

Bu özelliğin bir de uzantısı vardır. Bu uzantı, yayıncıların Offerwall'un kapalı beta sürümü, yalnızca Offerwall'un atlandı. Diğer mesaj türleri bu özellik etkinken etkilenmez.

Offerwall'a özgü kontrollü mesajlaşma, parametresini googlefc.MessageTypeEnum türünde bir Array olan message.proceed() olarak ayarlayın.

Örnek: Bu, aşağıdaki işlemlerde googlefc.controlledMessagingFunction kullanımına bir örnektir: diğer reklamları engellemeden yalnızca aboneler için Offerwall sunumunu engelle mesaj türleri:

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

aramalar yapabilirsiniz. Herhangi bir işlevi çağırmanın desteklenen tek yolu callbackQueue bölümüne ekliyorum.

Farklı zamanlarda farklı veri türleri kullanılabilir olduğundan, bir fonksiyon anahtar ve işlevini çağırın.

Desteklenen anahtarlar:

Anahtar adı Kullanım Göreli gecikme
CONSENT_API_READY CONSENT_API_READY anahtarıyla geri çağırma sırasına aktarılan işlevler, desteklenen izin çerçevelerinin API'leri tanımlandığında ve çağrılabilir olduğunda yürütülür. Bu noktadan itibaren, sonradan eklenecek CONSENT_API_READY içeren veya bunlarla ilişkili tüm işlevlerin yürütülmesi eşzamanlı olur. Çerçeveye özel ayrıntılar için IAB çerçeveleriyle ilgili bölümlere bakın. Düşük
CONSENT_DATA_READY CONSENT_DATA_READY anahtarıyla geri çağırma sırasına aktarılan işlevler, desteklenen bir kullanıcı rızası çerçevesi kapsamında toplanan kullanıcı izni bilindiğinde yürütülür (önceki yürütme işleminden veya kullanıcı rıza mesajıyla etkileşim kurduğunda). Bu noktadan itibaren, sonradan eklenecek CONSENT_DATA_READY içeren veya bunlarla ilişkili tüm işlevlerin yürütülmesi eşzamanlı olur. Yüksek
AD_BLOCK_DATA_READY AD_BLOCK_DATA_READY anahtarıyla geri çağırma sırasına aktarılan işlevler, akışta reklam engelleme verileri kullanılabilir hale geldiğinde yürütülür. Bu noktadan itibaren, sonradan eklenen AD_BLOCK_DATA_READY içeren veya bunlarla ilişkili tüm işlevlerin yürütülmesi eşzamanlı olur. Yüksek
INITIAL_CCPA_DATA_READY INITIAL_CCPA_DATA_READY ile geri çağırma sırasına aktarılan işlevler, CPRA verileri akışta kullanılabilir hale geldiğinde yürütülür. CPRA verileri için daha sonra yapılacak tüm isteklerin doğrudan US Privacy API'yi (__uspapi) çağırarak alınması gerektiğini unutmayın. Aracı

googlefc.CallbackQueue {!Object}

Yöntem özeti:

Ad Tür Parametre Dönüş türü Rol
push(data) sayı data: Verilerden biri olan anahtara sahip bir anahtar/değer çifti kullanılabilirlik türlerini ve yürütülecek JavaScript işlevi olarak değerini belirtin. Kabul edilebilir veri kullanılabilirliği anahtarları şunlardır: CONSENT_API_READY, CONSENT_DATA_READY, AD_BLOCK_DATA_READY ve INITIAL_CCPA_DATA_READY. Şu ana kadar eklenen komut sayısı. Bu, dizinin mevcut uzunluğunu döndürür. Aktarılan işlevi, verilerin hale geldiği sıraya göre yürütür bu işlevlerin sıra.

Örnek:

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

Kullanıcının farklı reklam engelleme durumlarını gösterir. Farklı eyaletler şunlardır:

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

Kullanıcının farklı reklam engellemeye izin verme durumlarını gösterir. Farklı eyaletler şunlardır:

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

Kullanıcının farklı reklam engellemeye izin verme durumlarını gösterir. Farklı eyaletler şunlardır:

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}

Satılmasın varsayılan bağlantısını gizlemek için bu alanı "doğru" olarak ayarlayın ve özel Satmayın bağlantısı.

Örnek:

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

Yöntemler: açıklamalar ve örnekler

googlefc.getConsentStatus(): {number}


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

  1. Bu seçenek, çağrıldığında artık her zaman boş bir liste döndürüyor.

googlefc.showRevocationMessage(): {undefined}

Mevcut kullanıcı rızası alma kaydını temizler ve bu kullanıcı için geçerli. Bu fonksiyon için belirtilmesi gereken anahtar CONSENT_DATA_READY

Örnek:

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

googlefc.getAdBlockerStatus(): {number}

Reklam engelleme durumuna bağlı olarak AdBlockerStatusEnum içinde bir değer döndürür temsil eder. Bu fonksiyon için belirtilmesi gereken anahtar AD_BLOCK_DATA_READY

Örnek:

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

Şu öğenin reklamlara izin ver durumuna bağlı olarak AllowAdsStatusEnum içinde bir değer döndürür: temsil eder. Bu fonksiyon için belirtilmesi gereken anahtar AD_BLOCK_DATA_READY

Örnek:

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

Şu öğenin CPRA durumuna bağlı olarak InitialCcpaStatusEnum içinde bir değer döndürür: temsil eder. Bu fonksiyon için belirtilmesi gereken anahtar INITIAL_CCPA_DATA_READY CPRA verileri için daha sonra yapılacak her türlü istekte ABD Gizlilik API'sini (__uspapi) doğrudan çağırarak elde edebilirsiniz.

Örnek:

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

Varsayılan Satmayın bağlantısı şu ise CPRA onay iletişim kutusunu açar: geçersiz kılınır. Kullanıcı onay iletişim kutusuyla etkileşimde bulunduğunda, geri çağırma işlevi, kullanıcı devre dışı bırakmaya karar verirse true ile birlikte çağrılır ve Aksi takdirde false.

Örnek:

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

GDPR izni almak için Google kullanıcı rızası yönetim çözümlerini kullanıyorsanız IAB TCF v2 çerçevesi uyarınca IAB TCF v2'yi kullanmalısınız. API.

Şunu kullanabilirsiniz: CONSENT_API_READY karşılık gelen geri çağırma işlemlerinin yalnızca IAB TCF v2 API'si sayfada tanımlanmış olmalıdır. Bu, şununla: 'addEventListener' komutunun bir örneğini burada görebilirsiniz.

Örnek:

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

CONSENT_DATA_READY Karşılık gelen geri çağırmaların çağrıldığından emin olmak için geri çağırma sırası anahtarı yalnızca IAB TCF v2 API kullanılarak kullanıcı izni toplandığında ve erişilebilir hale getirildiğinde. Bu, 'addEventListener' komut - sağladığınız geri çağırmanın ilk çağrısında sağlanan veriler kullanıcının izin seçimlerini içerir (TC v2 bu uygulama için geçerli olduğu sürece, kullanıcı) tarafından sağlanır. TCF 2.2 sürümü yayınlandığında, 'getTCData' komutunun desteği sonlandırıldı.

Örnek:

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

CPRA için IAB GPP çerçevesiyle Google kullanıcı rızası yönetim çözümlerini kullanma

CPRA kapsamı dışında kalmayı seçmek için Google kullanıcı rızası yönetim çözümlerini kullanıyorsanız IAB GPP çerçevesi kapsamında ise IAB GPP API.

CPRA mevzuatının kapsam dışı kalma özelliği nedeniyle CONSENT_API_READY veya CONSENT_DATA_READY geri arama IAB GPP API'nin çağrılabildiğinden ve izin verilerini döndürdüğünden emin olmak için sıra anahtarı çağrıldığı anda geçerli olur.

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

CPRA için IAB GPP çerçevesiyle birlikte Google kullanıcı rızası yönetim çözümlerini özel bir Satmayın bağlantısıyla kullanma

CPRA kapsamı dışında kalmayı seçmek için Google kullanıcı rızası yönetim çözümlerini kullanıyorsanız IAB GPP çerçevesi kapsamında özel bir Satmayın bağlantısı googlefc.ccpa.overrideDnsLink işaretini true olarak ayarlayın.

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

Bu, varsayılan Satma bağlantısının oluşturulmamasını sağlar. Lütfen bağlı olmanız amacıyla kendi Satmayın bağlantınızı oluşturmaktan sorumludur. tercih edebilirsiniz. Ardından, kullanıcı etkileşimini özel Dolaylı URL'nizle yerine getirmeniz gerekir CPRA onay iletişim kutusunu çağırarak satış bağlantısı.

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