การดีบักสตริง IAB GPP ในคอนโซลเบราว์เซอร์: บทเรียนทีละขั้นตอน
เหตุใดปัญหา GPP จึงสังเกตได้ยาก
เมื่อผู้เข้าชมชาวสหรัฐฯ เลือกไม่เข้าร่วมการขายหรือแชร์ข้อมูลของตน ตัวเลือกนั้นต้องไปถึงพาร์ตเนอร์โฆษณาทุกรายในหน้า ด้วย IAB Global Privacy Platform (GPP) ตัวเลือกนี้เดินทางเป็นสตริงขนาดกะทัดรัดและรายการ section ID หากอย่างใดอย่างหนึ่งผิด — หายไป ล้าสมัย หรือมี section ผิด — จะไม่มีอะไรพังให้เห็นชัดเจน โฆษณายังโหลด แบนเนอร์ยังดูปกติ และปัญหาจะปรากฏทีหลังเมื่อพาร์ตเนอร์เพิกเฉยต่อ opt-out หรือเสนอราคาสำหรับอินเวนทอรีของคุณต่ำลง
ข่าวดีคือคุณตรวจสอบได้เกือบทุกอย่างจากคอนโซลเบราว์เซอร์ บทเรียนนี้พาไปตามการตรวจสอบตามลำดับที่เราจะทำบนหน้าเว็บจริง
ขั้นตอนที่ 1: ยืนยันว่า API มีอยู่และพร้อมใช้งาน
CMP ที่รองรับ GPP จะเปิดเผยฟังก์ชันส่วนกลางชื่อ __gpp เปิด DevTools บนหน้าเว็บของคุณและรันคำสั่ง ping:
__gpp('ping', function (data) { console.log(data); });
ออบเจกต์ที่ส่งกลับบอกอะไรได้มากเพียงแค่มองครั้งเดียว:
- gppVersion — ควรเป็น 1.1 สำหรับการติดตั้งปัจจุบัน
- cmpStatus — CMP โหลดแล้วหรือพบข้อผิดพลาด
- cmpDisplayStatus — แบนเนอร์แสดงอยู่ ซ่อนอยู่ หรือปิดใช้งานสำหรับผู้เข้าชมรายนี้
- signalStatus — “ready” เมื่อ CMP สรุปสถานะความยินยอมแล้ว “not ready” ขณะที่ยังตัดสินใจอยู่
- supportedAPIs — section ที่ CMP สร้างได้
- applicableSections — section ID ที่ใช้กับผู้เข้าชมรายนี้ในขณะนี้
- gppString — สตริงที่เข้ารหัสแล้ว
หาก __gpp เป็น undefined แสดงว่า CMP stub หายไปหรือโหลดช้าเกินไป stub ต้องอยู่ก่อนสคริปต์โฆษณาใดๆ ที่คาดหวังมัน มิฉะนั้นสคริปต์เหล่านั้นจะไม่เห็น CMP และจะรอหรือดำเนินต่อโดยไม่มีสัญญาณ
ขั้นตอนที่ 2: ตรวจสอบ section ที่ใช้ได้
กรอบความเป็นส่วนตัวแต่ละกรอบใน GPP มี section ID เป็นตัวเลข ที่ผู้เผยแพร่พบบ่อยที่สุดคือ 2 (EU TCF v2), 5 (TCF ของแคนาดา), 7 (US National, “usnat”) และตั้งแต่ 8 เป็นต้นไปสำหรับ section ของแต่ละรัฐ เช่น แคลิฟอร์เนีย เวอร์จิเนีย โคโลราโด ยูทาห์ และคอนเนตทิคัต ผู้เข้าชมจากรัฐในสหรัฐฯ ควรเห็นใน applicableSections ทั้ง section ระดับประเทศหรือ section ของรัฐที่เกี่ยวข้อง ไม่ใช่ section ของ EU
ทดสอบจากหลายตำแหน่ง บั๊กที่พบบ่อยคือ CMP ตรวจจับภูมิศาสตร์ถูกต้องสำหรับแบนเนอร์ แต่เขียน section ค่าเริ่มต้นลงในสตริงไม่ว่าจะอย่างไร หรือในทางกลับกัน ใช้ VPN หรือเครื่องมือพรีวิวของ CMP เปรียบเทียบสิ่งที่แบนเนอร์แสดงกับที่ applicableSections รายงาน
ขั้นตอนที่ 3: อ่านข้อมูลของ section
แทนที่จะถอดรหัสสตริงด้วยมือ ให้ขอ section ที่แยกวิเคราะห์แล้วจาก CMP:
__gpp('getSection', function (data, success) { console.log(data, success); }, 'usnat');
ใน section US National ฟิลด์ opt-out ใช้ข้อตกลงง่าย ๆ: 0 หมายถึงไม่เกี่ยวข้อง 1 หมายถึงผู้ใช้เลือกไม่เข้าร่วม และ 2 หมายถึงผู้ใช้ไม่ได้เลือกไม่เข้าร่วม ให้ความสำคัญกับฟิลด์เหล่านี้ก่อน:
- SaleOptOut และ SharingOptOut
- TargetedAdvertisingOptOut
- ฟิลด์ notice ที่สอดคล้องกัน ซึ่งบันทึกว่าผู้เข้าชมได้รับแจ้งเกี่ยวกับแต่ละแนวปฏิบัติหรือไม่
ตอนนี้ลองเลือกไม่เข้าร่วมบนหน้าเว็บ — คลิกลิงก์ “Do Not Sell or Share” หรือสลับการตั้งค่าในศูนย์การตั้งค่า — แล้วรัน getSection อีกครั้ง ฟิลด์ opt-out ควรเปลี่ยนจาก 2 เป็น 1 หากไม่เปลี่ยน แสดงว่า UI และสัญญาณไม่ตรงกัน
ขั้นตอนที่ 4: ทดสอบเส้นทาง Global Privacy Control
กฎหมายระดับรัฐหลายฉบับกำหนดให้ธุรกิจถือสัญญาณ Global Privacy Control เป็นการ opt-out เปิดใช้ GPC ในเบราว์เซอร์หรือส่วนขยายที่รองรับ ยืนยันในคอนโซลว่า navigator.globalPrivacyControl คืนค่า true จากนั้นโหลดหน้าในเซสชันใหม่ ฟิลด์ opt-out ที่เกี่ยวข้องควรอ่านได้ 1 อยู่แล้วโดยที่ผู้เข้าชมไม่ต้องแตะแบนเนอร์ บาง section ยังมีฟิลด์ที่ระบุว่าตัวเลือกนั้นมาจากสัญญาณ GPC
ขั้นตอนที่ 5: ดูเหตุการณ์ ไม่ใช่แค่สแนปช็อต
สคริปต์โฆษณาไม่ควรอ่านสตริงครั้งเดียวตอนโหลดหน้าแล้วลืม ลงทะเบียน listener เพื่อดูว่าพาร์ตเนอร์เห็นอะไร:
__gpp('addEventListener', function (evt) { console.log(evt.eventName, evt.pingData); });
คุณควรเห็นเหตุการณ์ เช่น listenerRegistered, signalStatus และ sectionChange เมื่อผู้เข้าชมเปลี่ยนตัวเลือก ควรมีเหตุการณ์ sectionChange พร้อมสตริงที่อัปเดตตามมา หาก wrapper ของ header bidding หรือการเชื่อมต่อเซิร์ฟเวอร์โฆษณาของคุณอ่านสตริงก่อนที่ signalStatus จะเป็น “ready” เท่านั้น อาจส่งค่าที่ว่างเปล่าหรือล้าสมัย
ขั้นตอนที่ 6: ตามสตริงไปจนถึงคำขอโฆษณา
สุดท้าย เปิดแท็บ Network และกรองคำขอโฆษณาของคุณ endpoint โฆษณาจำนวนมากรับพารามิเตอร์ gpp และ gpp_sid (สตริงและ section ID ที่ใช้ได้) ตรวจสอบว่า:
- มีพารามิเตอร์ทั้งสองในคำขอจากผู้เข้าชมชาวสหรัฐฯ
- สตริงตรงกับที่ ping ส่งกลับ ณ เวลาของคำขอ
- หลัง opt-out คำขอถัดไปมีสตริงใหม่แทนที่จะเป็นสตริงที่แคชไว้
หากคุณใช้ Prebid.js ให้ยืนยันว่าโมดูลจัดการความยินยอมถูกกำหนดค่าสำหรับ GPP และตรวจสอบคำขอเสนอราคาที่ออกจาก wrapper รวมถึงการเรียกเซิร์ฟเวอร์โฆษณาสุดท้ายด้วย
รูปแบบความล้มเหลวที่พบบ่อย
- stub โหลดหลังแท็กโฆษณา — พาร์ตเนอร์ไม่เห็น CMP เลย
- section ผิดสำหรับภูมิภาค — ส่ง section ของ EU สำหรับทราฟฟิกสหรัฐฯ หรือไม่มี section เลย
- UI และสัญญาณไม่ตรงกัน — สวิตช์เปลี่ยนแต่สตริงไม่เปลี่ยน
- GPC ถูกเพิกเฉย — สัญญาณเบราว์เซอร์ไม่เคยกลายเป็น opt-out
- สตริงเก่าในคำขอ — wrapper แคชค่าแรกที่เห็นไว้
ประเด็นสำคัญ
- เริ่มด้วย ping: เวอร์ชัน สถานะ section ที่ใช้ได้ และสตริงบอกเรื่องราวส่วนใหญ่
- ใช้ getSection เพื่ออ่านฟิลด์ opt-out; 1 หมายถึงเลือกไม่เข้าร่วม 2 หมายถึงไม่ได้เลือก
- ทดสอบลิงก์ opt-out และ GPC แยกกัน และยืนยันว่าทั้งสองเปลี่ยนสัญญาณ
- รับฟังเหตุการณ์และรอสัญญาณ “ready” ก่อนที่คำขอโฆษณาจะอ่านสตริง
- ตรวจสอบ gpp และ gpp_sid ในคำขอเครือข่ายจริง ทั้งก่อนและหลัง opt-out