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:
- IAB TCF 2. sürüm spesifikasyonunu kullanarak GDPR rızası
- IAB GPP CPRA spesifikasyonunu kullanarak CPRA'yı devre dışı bırakma
Bu durumlarda izin durumu, bu API'ler aracılığıyla iletilir.
Bu kullanıcı mesajlaşma işlevini sitenizde dağıtabilirsiniz. yöntemler:
- Ç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)
- 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<function()> | !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
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>
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>}
- 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 için IAB TCF v2 ile Google kullanıcı rızası yönetim çözümlerini kullanma
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>