ความยินยอมใน WebView: ทำให้ความยินยอมแบบเนทีฟและเว็บซิงก์กัน

ปัญหาแบนเนอร์ซ้อนสองชั้น

แอปจำนวนมากเป็นเนทีฟส่วนหนึ่งและเว็บส่วนหนึ่ง เกมแสดงร้านค้า ข่าว หรือหน้าช่วยเหลือใน WebView แอปยูทิลิตีแสดงบทความจากเว็บไซต์ของตน แอปไฮบริดห่อส่วนใหญ่ของอินเทอร์เฟซไว้ในเนื้อหาเว็บ แต่ละฝั่งมีกลไกความยินยอมของตนเอง แอปเนทีฟใช้ CMP หรือ SDK ในแอป ส่วนหน้าเว็บโหลด CMP ของเว็บ หากไม่เชื่อมต่อกัน ผู้ใช้จะถูกถามสองครั้ง ตัวเลือกที่เลือกในที่หนึ่งถูกเพิกเฉยในอีกที่ และคำขอโฆษณาจากภายใน WebView ออกไปพร้อมสัญญาณที่ผิด

คู่มือนี้อธิบายวิธีทำให้ความยินยอมของเนทีฟและเว็บตรงกัน เพื่อให้ผู้ใช้ตอบครั้งเดียว และทุกคำขอโฆษณาพกการตัดสินใจเดียวกัน

แต่ละฝั่งเก็บความยินยอมไว้ที่ใด

เนทีฟ

IAB TCF กำหนดวิธีที่ CMP ในแอปจัดเก็บความยินยอม คือใน NSUserDefaults บน iOS และ SharedPreferences บน Android โดยใช้คีย์มาตรฐาน เช่น IABTCF_TCString, IABTCF_gdprApplies และ IABTCF_PurposeConsents SDK โฆษณาอ่านคีย์เหล่านี้โดยตรง IAB GPP กำหนดคีย์ที่คล้ายกันโดยมีคำนำหน้า IABGPP_ เช่น IABGPP_HDR_GppString

เว็บ

CMP ของเว็บมักเก็บการตัดสินใจไว้ในคุกกี้ first-party หรือ local storage ของโดเมนเว็บไซต์ และเปิดให้ใช้ผ่านฟังก์ชัน JavaScript __tcfapi และ __gpp แท็กโฆษณาในหน้าเรียกฟังก์ชันเหล่านั้น ไม่ใช่ที่จัดเก็บแบบเนทีฟ

ช่องว่าง

WebView มีพื้นที่คุกกี้และที่จัดเก็บของตนเอง แยกจากเบราว์เซอร์ของอุปกรณ์และแยกจากค่ากำหนดแบบเนทีฟของแอป บน iOS WKWebView ที่ใช้ data store แบบไม่ถาวรจะลืมทุกอย่างเมื่อปิด ไม่มีอะไรไหลระหว่างสองฝั่ง เว้นแต่คุณสร้างเอง

เลือกแหล่งข้อมูลจริงเพียงแหล่งเดียว

การตัดสินใจแรกคือฝั่งใดเป็นเจ้าของความยินยอม สำหรับแอปส่วนใหญ่ คำตอบคือ CMP แบบเนทีฟ เพราะ:

แนวทางเว็บเป็นหลักอาจเหมาะกับแอปไฮบริดที่อินเทอร์เฟซทั้งหมดเป็นเนื้อหาเว็บ แต่ถึงกระนั้นคุณต้องเขียนการตัดสินใจกลับไปที่ที่จัดเก็บแบบเนทีฟสำหรับ SDK เนทีฟ

ส่งความยินยอมแบบเนทีฟเข้าสู่ WebView

เมื่อเนทีฟเป็นแหล่งข้อมูลจริง WebView ต้องเห็นการตัดสินใจเดียวกัน รูปแบบที่พบบ่อย:

  1. แทรกการทำงานของ __tcfapi ก่อนสคริปต์ของหน้าทำงาน ให้แทรกสคริปต์เล็กๆ ที่กำหนด __tcfapi (และ __gpp หากจำเป็น) และตอบการเรียกด้วย TC string และค่าที่อ่านจากที่จัดเก็บแบบเนทีฟ แท็กโฆษณาในหน้าก็จะได้การตัดสินใจแบบเนทีฟผ่าน API มาตรฐาน
  2. ระงับแบนเนอร์ของเว็บ กำหนดค่า CMP ของเว็บให้ซ่อนเมื่อหน้าโหลดภายในแอปของคุณ เช่น อิงพารามิเตอร์ใน query หรือโทเคน user agent แบบกำหนดเองที่คุณควบคุม มิฉะนั้นผู้ใช้จะเห็นแบนเนอร์ที่สอง
  3. ส่ง string ตอนโหลด CMP ของเว็บบางตัวรับ consent string ที่มีอยู่ตอนเริ่มต้นและนำไปใช้ได้ ตรวจเอกสารของ CMP ฝั่งเว็บเพื่อดูวิธีที่รองรับ

ไม่ว่าจะใช้รูปแบบใด ตรวจให้แน่ใจว่าค่าที่แทรกอัปเดตเมื่อผู้ใช้เปลี่ยนตัวเลือกในหน้าจอการตั้งค่าแบบเนทีฟ ไม่ใช่เพียงเมื่อเปิดแอปครั้งถัดไป

ส่งความยินยอมจากเว็บกลับไปยังเนทีฟ

หากผู้ใช้เปลี่ยนความยินยอมภายใน WebView ได้ เช่น ผ่านหน้าการตั้งค่าความเป็นส่วนตัว แอปต้องรับรู้ ใช้บริดจ์ JavaScript คือ message handler บน iOS หรืออินเทอร์เฟซ JavaScript บน Android ฝั่งเว็บรับฟังด้วย __tcfapi('addEventListener', ...) และส่ง string ใหม่ไปยังโค้ดเนทีฟ ซึ่งเขียนลงคีย์มาตรฐาน ตรวจสอบข้อมูลที่ได้จาก WebView ก่อนเขียน และรับเฉพาะข้อความจากเนื้อหาของคุณเอง

โฆษณาภายใน WebView

โฆษณาที่แสดงใน WebView คือโฆษณาเว็บ โฆษณาเหล่านี้อ่านความยินยอมจากหน้า ไม่ใช่จากที่จัดเก็บแบบเนทีฟ เว้นแต่ SDK โฆษณามีวิธีเชื่อมทั้งสองเข้าด้วยกัน เช่น Mobile Ads SDK ของ Google มี API ให้ลงทะเบียน WebView เพื่อให้โฆษณาภายในใช้สัญญาณจากแอปได้ ตรวจเอกสารปัจจุบันของ SDK ของคุณ ไม่ว่ากรณีใด ให้ยืนยันด้วยการทดสอบว่าคำขอโฆษณาจาก WebView พก TC หรือ GPP string เดียวกับคำขอโฆษณาแบบเนทีฟ

เช็กลิสต์การทดสอบ

ประเด็นสำคัญ

← บล็อก อ่านทั้งหมด →