__tcfapi Hadisə Dinləyicilərindən İstifadə: Razılığa Həssas Skriptlər üçün Developer Bələdçisi
Skriptləriniz niyə polling yox, dinləmə etməlidir
Razılıqdan asılı olan hər skript — reklam teqi, analitika yükləyicisi, header bidding wrapper — iki şeyi bilməlidir: CMP-nin artıq qərarı varmı və bu qərar nədir. Ümumi səhv səhifə yüklənərkən cookie oxumaq və ya nəsə görünənə qədər CMP-ni taymerlə yoxlamaqdır. Hər iki yanaşma proqnozlaşdırıla bilən şəkildə pozulur: cookie formatı CMP-nin daxili məsələsidir və dəyişə bilər, polling isə ya çox tez işə düşür, ya da gözləməyə vaxt itirir.
IAB TCF məhz bu iş üçün standart JavaScript interfeysi müəyyən edir: __tcfapi funksiyası. Bu bələdçi sizə həqiqətən lazım olan əmrləri, alacağınız hadisələri və produksiyada ən çox rast gəlinən xətaları nəzərdən keçirir.
Stub və növbə
TCF CMP-nin tam CMP skripti yüklənməzdən əvvəl, mümkün qədər erkən səhifəyə kiçik bir stub qoyması gözlənilir. Stub window.__tcfapi-ni müəyyən edir və CMP hazır olmamışdan əvvəl edilən çağırışları növbəyə qoyur. CMP yükləməni bitirdikdə növbəni emal edir və hər çağırışa cavab verir.
Bu, digər skriptlərin __tcfapi-ni dərhal çağırmasını təhlükəsiz edir: stub səhifədə onlardan əvvəl olduğu müddətcə çağırışları itmir. Əgər skript __tcfapi təyin olunmadığı üçün xəta atırsa, stub ya yoxdur, ya da çox gec yüklənir — təkrar cəhdlər əlavə etmək əvəzinə yükləmə ardıcıllığını düzəldin.
Önəmli əmrlər
ping
__tcfapi('ping', 2, callback) istifadəçi qərarını gözləmədən əsas statusu qaytarır. Cavab cmpLoaded, stub, loading, loaded və ya error kimi cmpStatus və visible, hidden və ya disabled olan displayStatus daxil edir. Məlum olduqda gdprApplies-i də bildirir. Diaqnostika üçün və TCF-nin bu ziyarətçi üçün ümumiyyətlə aktual olub-olmadığına qərar vermək üçün istifadə edin.
addEventListener
__tcfapi('addEventListener', 2, callback) əksər inteqrasiyaların istifadə etməli olduğu əmrdir. Callback tcData obyekti və uğur bayrağı alır və razılıq vəziyyəti hər dəyişdikdə yenidən çağırılır. TCF v2.2-dən bəri razılıq məlumatlarını almağın tövsiyə olunan yolu budur; köhnə getTCData əmri köhnəlmiş elan edilib.
removeEventListener
Hər tcData obyekti listenerId daşıyır. Skriptinizə artıq yenilənmələr lazım olmadıqda onu __tcfapi('removeEventListener', 2, callback, listenerId)-ə ötürün — məsələn, qərarını artıq vermiş birdəfəlik yükləyici üçün.
eventStatus-u oxumaq
tcData-dakı əsas sahə eventStatus-dur. Üç dəyəri var:
tcloaded— CMP etibarlı saxlanılmış qərar tapdı və banner göstərilməyəcək. Məlumat üzərində dərhal hərəkət edə bilərsiniz.cmpuishown— banner göstərilir. Məlumat əvvəlki vəziyyəti əks etdirir, lakin istifadəçi onu dəyişmək üzrə ola bilər.useractioncomplete— istifadəçi indicə seçim edib və ya təsdiqləyib. Yeni məlumata əsasən hərəkət edin.
Tipik yükləyici ya tcloaded, ya da useractioncomplete gözləyir, sonra ehtiyac duyduğu məqsəd və vendorları yoxlayır. cmpuishown-u, bəlkə bannerin göründüyünü loglamaq istisna olmaqla, nəzərə almır.
Məqsəd və vendorların yoxlanması
tcData daxilində razılıq və qanuni maraq ID ilə açarlanmış obyektlər kimi təqdim olunur:
tcData.purpose.consents[1]— Məqsəd 1 üzrə razılıq (cihazda saxlama).tcData.purpose.legitimateInterests[7]— Məqsəd 7 üzrə qanuni maraq statusu.tcData.vendor.consents[ID]vətcData.vendor.legitimateInterests[ID]— vendorun Global Vendor List ID-sindən istifadə edərək hər vendor üzrə status.tcData.gdprApplies— CMP-nin bu ziyarətçiyə GDPR-ın tətbiq olunduğunu müəyyən edib-etmədiyi. Əgərfalse-dursa, skriptiniz qeyri-TCF məntiqinə əməl etməlidir.tcData.tcString— onu gözləyən tərəfdaşlara ötürdüyünüz kodlanmış sətir.
Həm məqsədi, həm vendoru yoxlayın. Vendor razılığı olmadan məqsəd razılığı və ya əksi, əksər vendorların məlumatı emal etməsi üçün kifayət deyil.
Iframe-lər və frame-lərarası çağırışlar
Reklamlar və vidjetlər tez-tez valideyn səhifənin __tcfapi-ni görə bilməyən iframe-lərdə işləyir. TCF bunu postMessage protokolu ilə həll edir: CMP üst səhifəyə __tcfapiLocator adlı frame əlavə edir, iframe daxilindəki kod onu tapa, __tcfapiCall mesajı göndərə və __tcfapiReturn cavabı ala bilər. Əksər reklam SDK-ları bunu artıq edir. Öz iframe kodunuzu yazırsınızsa, frame-lər arasında cookie oxumaq əvəzinə eyni nümunəni tətbiq edin.
Ümumi xətalar və onları necə aşkar etməli
cmpuishownüzərində hərəkət. İstənilən callback işə düşən kimi yüklənən skriptlər istifadəçi qərar verməmişdən əvvəl işləyəcək.eventStatusüzrə filtrləyin.- Dinləyicinin çox tez silinməsi. Onu birinci callback-dən sonra silsəniz, sonrakı
useractioncomplete-i qaçıracaq və heç vaxt yüklənməyəcəksiniz. - Geri götürmələrin nəzərə alınmaması. Davamlı skriptlər dinləməyə davam etməli və razılıq geri götürüldükdə dayanmalı və ya yenidən konfiqurasiya olunmalıdır.
gdprApplies-in nəzərə alınmaması. TCF bölgələrindən kənarda məqsəd obyektləri boş ola bilər; bunu «razılıq yoxdur» kimi qəbul etmək qazanmağa haqqınız olan gəliri söndürə bilər.- Uğur bayrağının yoxlanmaması.
successfalse olduqda bunu loglayın; bu, adətən pozulmuş CMP qurğusuna işarə edir.
İnteqrasiyanın sınanması
Brauzer konsolunda CMP-nin mövcudluğunu təsdiqləmək üçün __tcfapi('ping', 2, console.log) çağırın, sonra callback kimi console.log ilə dinləyici qeydiyyatdan keçirin və bannerdən keçin. İlk ziyarətdə cmpuishown və ardınca useractioncomplete, yenidən yükləmədə isə tcloaded görməlisiniz. Hamısını qəbul et, hamısını rədd et və fərdi seçimlə təkrarlayın və skriptinizin hər halda düzgün davrandığını təsdiqləyin.
Əsas nəticələr
- CMP cookie-lərini oxumaq və ya polling əvəzinə
__tcfapi-dən istifadə edin. - CMP stub-ının API-ni çağıran hər hansı skriptdən əvvəl yükləndiyinə əmin olun.
addEventListeneristifadə edin və yalnıztcloadedvə yauseractioncompleteüzərində hərəkət edin.- Həm məqsəd, həm vendor statusunu yoxlayın və
gdprApplies-ə riayət edin. - Iframe-lərdə
__tcfapiLocatorpostMessage nümunəsindən istifadə edin.