คู่มือนักพัฒนาซอฟต์แวร์ FLEDGE API

บทความนี้มีไว้สําหรับใคร

โพสต์นี้เป็นข้อมูลอ้างอิงทางเทคนิคเกี่ยวกับ Protected Audience API เวอร์ชันทดลอง

Protected Audience คืออะไร

Protected Audience API เป็นข้อเสนอ Privacy Sandbox ที่แสดงกรณีการใช้งานรีมาร์เก็ตติ้งและกลุ่มเป้าหมายที่กำหนดเองซึ่งออกแบบมาเพื่อให้บุคคลที่สามใช้การติดตามพฤติกรรมการท่องเว็บของผู้ใช้ในเว็บไซต์ต่างๆ ไม่ได้ API จะเปิดใช้การประมูลในอุปกรณ์โดยเบราว์เซอร์เพื่อเลือกโฆษณาที่เกี่ยวข้องสำหรับเว็บไซต์ที่ผู้ใช้เคยเข้าชมก่อนหน้านี้

Protected Audience เป็นการทดสอบแรกที่จะนำมาใช้ใน Chromium ภายในกลุ่มข้อเสนอ TURTLEDOVE

แผนภาพด้านล่างแสดงภาพรวมของวงจร FLEDGE

ภาพประกอบแสดงภาพรวมของแต่ละขั้นตอนของวงจร FLEDGE
วงจร FLEDGE

ฉันจะลองใช้ Protected Audience ได้อย่างไร

การสาธิตสำหรับ Protected Audience

คุณสามารถดูคำแนะนำแบบทีละขั้นเกี่ยวกับการติดตั้งใช้งาน Protected Audience ขั้นพื้นฐานในเว็บไซต์ของผู้ลงโฆษณาและผู้เผยแพร่โฆษณาได้ที่ Protected-audience-demo.web.app

วิดีโอสาธิตจะอธิบายวิธีการทำงานของโค้ดสาธิต และแสดงวิธีใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome เพื่อแก้ไขข้อบกพร่องของ Protected Audience

เข้าร่วมช่วงทดลองใช้ Protected Audience จากต้นทาง

ช่วงทดลองใช้ต้นทางและความเกี่ยวข้องของ Privacy Sandbox พร้อมให้ใช้งานแล้วใน Chrome เบต้า 101.0.4951.26 ขึ้นไปบนเดสก์ท็อปสำหรับ Protected Audience, Topics และ Attribution Reporting API

หากต้องการเข้าร่วม ให้ลงทะเบียนรับโทเค็นช่วงทดลองใช้จากต้นทาง

เมื่อลงทะเบียนทดลองใช้เรียบร้อยแล้ว คุณจะลองใช้ Protected Audience JavaScript API ในหน้าเว็บที่ระบุโทเค็นช่วงทดลองใช้ที่ถูกต้องได้ เช่น ขอให้เบราว์เซอร์เข้าร่วมกลุ่มความสนใจอย่างน้อย 1 กลุ่มจากนั้นเรียกใช้การประมูลเพื่อแสดงโฆษณาเพื่อเลือกและแสดงโฆษณา

การสาธิตการใช้ Protected Audience จะแสดงตัวอย่างพื้นฐานของการทำให้ Protected Audience ใช้งานได้ตั้งแต่ต้นจนจบ

ระบุโทเค็นการทดลองใช้สำหรับทุกหน้าที่ต้องการเรียกใช้โค้ด Protected Audience API

  • เป็นเมตาแท็กใน <head>:

    <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">

  • ในรูปแบบส่วนหัว HTTP:

    Origin-Trial: TOKEN_GOES_HERE

  • การระบุโทเค็นแบบเป็นโปรแกรมจะมีผลดังนี้

    const otMeta = document.createElement('meta');
    otMeta.httpEquiv = 'origin-trial';
    otMeta.content = 'TOKEN_GOES_HERE';
    document.head.append(otMeta);
    

iframe ที่ใช้โค้ด Protected Audience เช่น การเรียก navigator.joinAdInterestGroup() โดยเจ้าของกลุ่มความสนใจ จะต้องระบุโทเค็นที่ตรงกับต้นทาง

รายละเอียดช่วงทดลองใช้ฟีเจอร์จากต้นทางสำหรับ Protected Audience ที่เสนอ มีรายละเอียดเพิ่มเติมเกี่ยวกับเป้าหมายของช่วงทดลองใช้ครั้งแรกและอธิบายว่าฟีเจอร์ใดบ้างที่รองรับ

ทดสอบกับ chrome://flags หรือแฟล็กฟีเจอร์

คุณทดสอบ Protected Audience สำหรับผู้ใช้รายเดียวได้ใน Chrome เบต้า 101.0.4951.26 ขึ้นไปบนเดสก์ท็อป * เมื่อเปิดใช้ chrome://flags/#privacy-sandbox-ads-apis * ตั้งค่าแฟล็กจากบรรทัดคำสั่ง

แสดงโฆษณาใน iframe หรือเฟรมที่มีการปิดกั้น

โฆษณาจะแสดงผลใน <iframe> หรือ <fencedframe> ได้ โดยขึ้นอยู่กับการตั้งค่าแฟล็ก

วิธีใช้ <fencedframe> เพื่อแสดงโฆษณา

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames

วิธีใช้ <iframe> เพื่อแสดงโฆษณา

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames

ใส่แฟล็ก BiddingAndScoringDebugReportingAPI เพื่อเปิดใช้วิธีการรายงานแบบสูญเสีย/ชนะแก้ไขข้อบกพร่องชั่วคราว

เรียกใช้ Chromium ด้วยแฟล็ก อธิบายวิธีการตั้งค่าแฟล็กเมื่อใช้ Chrome และเบราว์เซอร์อื่นๆ ที่ใช้ Chromium จากบรรทัดคำสั่ง รายการแฟล็ก Protected Audience ทั้งหมดพร้อมให้ใช้งานจากการค้นหาโค้ด Chromium

Chrome เวอร์ชันล่าสุดรองรับฟีเจอร์ใดบ้าง

Protected Audience พร้อมใช้งานเบื้องหลังแฟล็กฟีเจอร์ใน Chromium โดยเป็นการทดสอบแรกเพื่อทดสอบฟีเจอร์ต่อไปนี้ของข้อเสนอ Protected Audience

  • กลุ่มความสนใจ: เบราว์เซอร์จะจัดเก็บไว้พร้อมข้อมูลเมตาที่เกี่ยวข้องเพื่อกำหนดค่าการเสนอราคาและการแสดงผล
  • การเสนอราคาในอุปกรณ์โดยผู้ซื้อ (DSP หรือผู้ลงโฆษณา): อิงตามกลุ่มความสนใจและสัญญาณจากผู้ขาย
  • การเลือกโฆษณาในอุปกรณ์โดยผู้ขาย (SSP หรือผู้เผยแพร่โฆษณา): อิงตามราคาเสนอในการประมูลและข้อมูลเมตาจากผู้ซื้อ
  • การแสดงโฆษณาใน Fenced Frames เวอร์ชันที่ผ่อนปรนชั่วคราว: รองรับการเข้าถึงเครือข่ายและการบันทึกสำหรับการแสดงโฆษณา

คำอธิบาย API จะให้รายละเอียดเพิ่มเติมเกี่ยวกับการรองรับและข้อจำกัดเกี่ยวกับฟีเจอร์

สิทธิ์ของกลุ่มความสนใจ

ค่าเริ่มต้นในการใช้งาน Protected Audience ในปัจจุบันคือการอนุญาตให้เรียกใช้ joinAdInterestGroup() จากที่ใดก็ได้ในหน้าเว็บ แม้ว่าจะมาจาก iframe แบบข้ามโดเมน ในอนาคต เมื่อเจ้าของเว็บไซต์มีเวลาในการปรับนโยบายสิทธิ์ของ iframe ข้ามโดเมน แผนคือไม่อนุญาตให้เรียกใช้จาก iframe ข้ามโดเมนตามที่อธิบายไว้

บริการจัดการคีย์/ค่า

ในฐานะส่วนหนึ่งของการประมูลเพื่อแสดงโฆษณา Protected Audience เบราว์เซอร์จะเข้าถึงบริการจัดการคีย์/ค่าที่แสดงคู่คีย์-ค่าแบบง่ายเพื่อให้ข้อมูลแก่ผู้ซื้อโฆษณา เช่น งบประมาณแคมเปญ ข้อเสนอ Protected Audience กำหนดว่าเซิร์ฟเวอร์นี้ "ไม่มีการบันทึกข้อมูลระดับเหตุการณ์ และไม่มีผลข้างเคียงอื่นๆ ตามคำขอเหล่านี้"

รหัสบริการคีย์/ค่าของ Protected Audience พร้อมให้ใช้งานแล้วในที่เก็บ GitHub ของ Privacy Sandbox นักพัฒนาซอฟต์แวร์ Chrome และ Android ใช้บริการนี้ได้ ดูการอัปเดตสถานะได้ในบล็อกโพสต์ประกาศ ดูข้อมูลเพิ่มเติมเกี่ยวกับบริการคีย์/ค่า Protected Audience จากคำอธิบาย API และคำอธิบายโมเดลการเชื่อถือ

สำหรับการทดสอบเริ่มต้น ระบบจะใช้โมเดล "Bring Your Own Server" ในระยะยาว AdTech จะต้องใช้บริการคีย์/ค่า Protected Audience แบบโอเพนซอร์สที่ทำงานในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้เพื่อดึงข้อมูลแบบเรียลไทม์

เพื่อให้มั่นใจว่าระบบนิเวศจะมีเวลาเพียงพอในการทดสอบ เราจึงไม่คาดว่าจะต้องใช้บริการคีย์/ค่าแบบโอเพนซอร์สหรือ TEE จนกว่าจะถึงเวลาหลังจากการเลิกใช้งานคุกกี้ของบุคคลที่สาม เราจะแจ้งประกาศสำคัญให้นักพัฒนาแอปเริ่มทดสอบและนำไปใช้ก่อนที่การเปลี่ยนแปลงนี้จะเกิดขึ้น

ตรวจหาการรองรับฟีเจอร์

ก่อนใช้ API โปรดตรวจสอบว่าเบราว์เซอร์รองรับและพร้อมใช้งานในเอกสารหรือไม่

'joinAdInterestGroup' in navigator &&
  document.featurePolicy.allowsFeature('join-ad-interest-group') &&
  document.featurePolicy.allowsFeature('run-ad-auction') ?
  console.log('navigator.joinAdInterestGroup() is supported on this page') :
  console.log('navigator.joinAdInterestGroup() is not supported on this page');

ฉันจะเลือกไม่ใช้ Protected Audience ได้อย่างไร

คุณบล็อกการเข้าถึง Protected Audience API ได้ในฐานะเจ้าของเว็บไซต์หรือผู้ใช้แต่ละราย

เว็บไซต์ควบคุมการเข้าถึงได้อย่างไร

ท้ายที่สุดแล้ว Protected Audience จะกำหนดให้เว็บไซต์ตั้งนโยบายสิทธิ์เพื่ออนุญาตให้ฟังก์ชันการทำงานของ Protected Audience พร้อมใช้งาน วิธีนี้จะช่วยให้มั่นใจได้ว่าบุคคลที่สามที่กำหนดเองจะใช้ API ไม่ได้หากเว็บไซต์ไม่ทราบ อย่างไรก็ตาม ระบบจะยกเว้นข้อกำหนดนี้โดยค่าเริ่มต้น เพื่ออำนวยความสะดวกในการทดสอบระหว่างช่วงทดลองใช้จากต้นทางครั้งแรก เว็บไซต์ที่ต้องการปิดใช้ฟังก์ชันการทำงานของ Protected Audience อย่างชัดเจนในระหว่างการทดสอบจะใช้นโยบายสิทธิ์ที่เกี่ยวข้องเพื่อบล็อกการเข้าถึงได้

มีนโยบายสิทธิ์ของ Protected Audience 2 นโยบายที่ตั้งค่าได้อย่างอิสระ ดังนี้ * join-ad-interest-group เปิด/ปิดใช้ฟังก์ชันเพื่อเพิ่มเบราว์เซอร์ลงในกลุ่มความสนใจ * run-ad-auction เปิด/ปิดใช้ฟังก์ชันเพื่อเรียกใช้การประมูลในอุปกรณ์

คุณปิดใช้การเข้าถึง Protected Audience API โดยสมบูรณ์ในบริบทของบุคคลที่หนึ่งได้โดยระบุนโยบายสิทธิ์ต่อไปนี้ในส่วนหัวการตอบกลับ HTTP

Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()

คุณปิดการใช้งาน API ใน iframe ได้โดยการเพิ่มแอตทริบิวต์ allow ต่อไปนี้ลงในองค์ประกอบ iframe

<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>

ส่วนนโยบายสิทธิ์ช่วงทดลองใช้จากต้นทางสำหรับ Protected Audience ที่เสนอจะให้รายละเอียดเพิ่มเติม

ผู้ใช้เลือกไม่รับ

ผู้ใช้จะบล็อกการเข้าถึง Protected Audience API และฟีเจอร์ Privacy Sandbox อื่นๆ ได้โดยใช้กลไกต่อไปนี้

  • ปิดใช้การทดลองใช้ Privacy Sandbox ในการตั้งค่า Chrome: การตั้งค่า > ความปลอดภัยและความเป็นส่วนตัว > Privacy Sandbox ซึ่งเข้าถึงได้ที่ chrome://settings/adPrivacy เช่นกัน
  • ปิดใช้คุกกี้ของบุคคลที่สามในการตั้งค่า Chrome: การตั้งค่า > ความปลอดภัยและความเป็นส่วนตัว
  • ตั้งค่าคุกกี้และข้อมูลเว็บไซต์อื่นๆ เป็น "บล็อกคุกกี้ของบุคคลที่สาม" หรือ "บล็อกคุกกี้ทั้งหมด" จาก chrome://settings/cookies
  • ใช้โหมดไม่ระบุตัวตน

ข้อความอธิบายเกี่ยวกับ Protected Audience จะให้รายละเอียดเพิ่มเติมเกี่ยวกับองค์ประกอบการออกแบบ API และอธิบายวิธีที่ API พยายามบรรลุเป้าหมายด้านความเป็นส่วนตัว

แก้ไขข้อบกพร่องของเวิร์กเล็ต Protected Audience

คุณสามารถแก้ไขข้อบกพร่องของเวิร์กเล็ต Protected Audience ภายในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ได้จาก Chrome Canary 98.0.4718.0

ขั้นตอนแรกคือการกำหนดเบรกพอยท์ผ่านหมวดหมู่ใหม่ในแผงเบรกพอยท์ของ Listener เหตุการณ์ในแผงแหล่งที่มา

ภาพหน้าจอของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome Canary ซึ่งไฮไลต์แผงเบรกพอยท์ของ Listener เหตุการณ์ในแผงแหล่งที่มา
   เลือก &quot;เริ่มระยะการเสนอราคา&quot; ของผู้เสนอราคาในส่วน Worklet การประมูลเพื่อแสดงโฆษณา

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

สคริปต์ Worklet แบบสดจะแสดงภายใต้แผงชุดข้อความด้วย

ภาพหน้าจอของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome Canary ซึ่งไฮไลต์แผงเทรดในแผงแหล่งที่มา ซึ่งแสดงสคริปต์เวิร์กโฟลว์ปัจจุบันที่หยุดชั่วคราว

เนื่องจาก Worklet บางรายการอาจทำงานพร้อมกัน เทรดหลายรายการจึงอาจอยู่ในสถานะ "หยุดชั่วคราว" ที่นั่น คุณสามารถใช้รายการชุดข้อความเพื่อสลับระหว่างชุดข้อความต่างๆ กลับมาทำงานหรือตรวจสอบให้ละเอียดขึ้นก็ได้ตามความเหมาะสม

สังเกตเหตุการณ์ Protected Audience

คุณสังเกตกลุ่มความสนใจของ Protected Audience และเหตุการณ์การประมูลได้จากแผงแอปพลิเคชันในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

หากคุณเข้าชมเว็บไซต์ช็อปปิ้งสำหรับการสาธิตของ Protected Audience ในเบราว์เซอร์ที่เปิดใช้ Protected Audience เครื่องมือสำหรับนักพัฒนาเว็บจะแสดงข้อมูลเกี่ยวกับเหตุการณ์ join

แผงแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome Canary ที่แสดงข้อมูลเกี่ยวกับการเข้าร่วมกิจกรรมของกลุ่มความสนใจของกลุ่มเป้าหมายที่ได้รับการคุ้มครอง

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

แผงแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome Canary ที่แสดงข้อมูลเกี่ยวกับราคาเสนอในการประมูลสำหรับ Protected Audience และเหตุการณ์การชนะ

Protected Audience API ทำงานอย่างไร

ในตัวอย่างนี้ ผู้ใช้เรียกดูเว็บไซต์ของผู้ผลิตจักรยานที่ผลิตตามสั่ง แล้วเข้าชมเว็บไซต์ข่าวในภายหลัง และแสดงโฆษณาจักรยานคันใหม่จากผู้ผลิตจักรยาน

1. ผู้ใช้เข้าชมเว็บไซต์ของผู้ลงโฆษณา

ภาพประกอบแสดงภาพคนเข้าชมเว็บไซต์ของผู้ผลิตจักรยานแบบกำหนดเองในเบราว์เซอร์บนแล็ปท็อป

สมมติว่าผู้ใช้เข้าชมเว็บไซต์ของผู้ผลิตจักรยานที่ผลิตตามสั่ง (ในตัวอย่างนี้คือผู้ลงโฆษณา) และใช้เวลาสักครู่ในหน้าผลิตภัณฑ์เพื่อดูจักรยานเหล็กแฮนด์เมด ซึ่งทำให้ผู้ผลิตจักรยานมีโอกาสรีมาร์เก็ตติ้ง

2. ระบบขอให้เบราว์เซอร์ของผู้ใช้เพิ่มกลุ่มความสนใจ

ภาพประกอบแสดงภาพคนกำลังดูเว็บไซต์ในเบราว์เซอร์บนแล็ปท็อป โค้ด JavaScript JoinAdInterestGroup() กำลังทำงานในเบราว์เซอร์

ส่วนอธิบาย: กลุ่มความสนใจในบันทึกเบราว์เซอร์

แพลตฟอร์มฝั่งดีมานด์ (DSP) ของผู้ลงโฆษณา (หรือตัวผู้ลงโฆษณาเอง) เรียกใช้ navigator.joinAdInterestGroup() เพื่อขอให้เบราว์เซอร์เพิ่มกลุ่มความสนใจลงในรายชื่อกลุ่มที่เบราว์เซอร์เป็นสมาชิก ในตัวอย่างนี้ กลุ่มชื่อ custom-bikes และเจ้าของคือ dsp.example เจ้าของกลุ่มความสนใจ (ในกรณีนี้คือ DSP) จะเป็นผู้ซื้อในการประมูลเพื่อแสดงโฆษณาที่อธิบายไว้ในขั้นตอนที่ 4 เบราว์เซอร์จะจัดเก็บข้อมูลการเป็นสมาชิกกลุ่มความสนใจไว้ในอุปกรณ์ของผู้ใช้ และจะไม่แชร์กับผู้ให้บริการเบราว์เซอร์หรือผู้อื่น

joinAdInterestGroup() ต้องได้รับสิทธิ์จาก * เว็บไซต์ที่เข้าชม * เจ้าของกลุ่มความสนใจ

ตัวอย่างเช่น เป็นไปไม่ได้ที่ malicious.example จะโทรหา joinAdInterestGroup() โดยมี dsp.example เป็นเจ้าของโดยไม่ได้รับอนุญาตจาก dsp.example

สิทธิ์จากเว็บไซต์ที่เข้าชม

ต้นทางเดียวกัน: โดยค่าเริ่มต้น ระบบจะให้สิทธิ์การเรียก joinAdInterestGroup() โดยนัยจากต้นทางเดียวกันกับเว็บไซต์ที่เข้าชม กล่าวคือ มาจากต้นทางเดียวกับเฟรมระดับบนสุดของหน้าเว็บปัจจุบัน เว็บไซต์จะใช้ส่วนหัวนโยบายด้านสิทธิ์ join-ad-interest-group เพื่อปิดใช้การเรียกjoinAdInterestGroup() ของ Protected Audience ได้

ข้ามต้นทาง: การเรียกใช้ joinAdInterestGroup() จากต้นทางที่แตกต่างจากหน้าปัจจุบันจะสำเร็จได้ก็ต่อเมื่อเว็บไซต์ที่เข้าชมมีการตั้งค่านโยบายสิทธิ์ที่อนุญาตให้เรียกใช้ joinAdInterestGroup() จาก iframe แบบข้ามต้นทาง

สิทธิ์จากเจ้าของกลุ่มความสนใจ

คุณให้สิทธิ์เจ้าของกลุ่มความสนใจโดยปริยายโดยการเรียก joinAdInterestGroup() จาก iframe ที่มีต้นทางเดียวกันกับของเจ้าของกลุ่มความสนใจ ตัวอย่างเช่น dsp.example iframe สามารถเรียกใช้ joinAdInterestGroup() สำหรับกลุ่มความสนใจที่ dsp.example เป็นเจ้าของ

ข้อเสนอคือให้ joinAdInterestGroup() เรียกใช้ในหน้าเว็บหรือ iframe ในโดเมนของเจ้าของ หรือได้รับมอบอำนาจไปยังโดเมนอื่นๆ ที่ให้ไว้โดยใช้ลิสต์ใน URL ของ .well-known

การใช้ navigator.joinAdInterestGroup()

ต่อไปนี้คือตัวอย่างวิธีการใช้ API

const interestGroup = {
  owner: 'https://dsp.example',
  name: 'custom-bikes',
  biddingLogicUrl: ...,
  biddingWasmHelperUrl: ...,
  dailyUpdateUrl: ...,
  trustedBiddingSignalsUrl: ...,
  trustedBiddingSignalsKeys: ['key1', 'key2'],
  userBiddingSignals: {...},
  ads: [bikeAd1, bikeAd2, bikeAd3],
  adComponents: [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2],
};

navigator.joinAdInterestGroup(interestGroup, 7 * kSecsPerDay);

ออบเจ็กต์ interestGroup ที่ส่งไปยังฟังก์ชันต้องมีขนาดไม่เกิน 50 kiB มิฉะนั้นการเรียกใช้จะไม่สำเร็จ พารามิเตอร์ที่ 2 ระบุระยะเวลาของกลุ่มความสนใจ ซึ่งจำกัดไว้ที่ 30 วัน การเรียกแบบต่อเนื่องจะเขียนทับค่าที่จัดเก็บไว้ก่อนหน้านี้

พร็อพเพอร์ตี้ของกลุ่มความสนใจ

พร็อพเพอร์ตี้ ต้องระบุ ตัวอย่าง บทบาท
owner ต้องระบุ 'https://dsp.example' ต้นทางของเจ้าของกลุ่มความสนใจ
name ต้องระบุ 'custom-bikes' ชื่อกลุ่มความสนใจ
biddingLogicUrl** ไม่บังคับ* 'https://dsp.example/bid/custom-bikes/bid.js' URL สำหรับการเสนอราคาเรียกใช้ JavaScript ใน Worklet
biddingWasmHelperUrl** ไม่บังคับ* 'https://dsp.example/bid/custom-bikes/bid.wasm' URL สำหรับโค้ด WebAssembly ที่มาจาก biddingLogicUrl
dailyUpdateUrl** ไม่บังคับ 'https://dsp.example/bid/custom-bikes/update' URL ที่แสดงผล JSON เพื่ออัปเดตแอตทริบิวต์กลุ่มความสนใจ (ดูอัปเดตกลุ่มความสนใจ)
trustedBiddingSignalsUrl** ไม่บังคับ 'https://dsp.example/trusted/bidding-signals' URL ฐานสำหรับคำขอคีย์-ค่าที่ส่งไปยังเซิร์ฟเวอร์ที่เชื่อถือได้ของผู้เสนอราคา
trustedBiddingSignalsKeys ไม่บังคับ ['key1', 'key2' ...] คีย์สำหรับคำขอไปยังเซิร์ฟเวอร์ที่เชื่อถือได้คีย์-ค่า
userBiddingSignals ไม่บังคับ {...} ข้อมูลเมตาเพิ่มเติมที่เจ้าของสามารถใช้ในระหว่างการเสนอราคา
ads ไม่บังคับ* [bikeAd1, bikeAd2, bikeAd3] โฆษณาที่อาจแสดงสำหรับกลุ่มความสนใจนี้
adComponents ไม่บังคับ [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] คอมโพเนนต์สำหรับโฆษณาที่ประกอบด้วยหลายชิ้น

* พร็อพเพอร์ตี้ทั้งหมดเป็นแบบไม่บังคับ ยกเว้น owner และ name พร็อพเพอร์ตี้ biddingLogicUrl และ ads เป็นพร็อพเพอร์ตี้ที่ไม่บังคับ แต่จำเป็นต้องเข้าร่วมในการประมูล อาจมีกรณีการใช้งานสำหรับการสร้างกลุ่มความสนใจโดยไม่มีพร็อพเพอร์ตี้เหล่านี้ เช่น เจ้าของกลุ่มความสนใจอาจต้องการเพิ่มเบราว์เซอร์ลงในกลุ่มความสนใจสำหรับแคมเปญที่ยังไม่ได้ทำงาน หรือสำหรับการใช้งานอื่นๆ ในอนาคต หรืออาจใช้งบประมาณการโฆษณาหมดแล้วชั่วคราว

** URL biddingLogicUrl, biddingWasmHelperUrl, dailyUpdateUrl และ trustedBiddingSignalsUrl ต้องมีต้นทางเหมือนกับเจ้าของ URL ads และ adComponents ไม่มีข้อจำกัดดังกล่าว

อัปเดตแอตทริบิวต์กลุ่มความสนใจ

dailyUpdateUrl ระบุเว็บเซิร์ฟเวอร์ที่ส่งคืนพร็อพเพอร์ตี้กลุ่มความสนใจที่กำหนด JSON ซึ่งสอดคล้องกับออบเจ็กต์กลุ่มความสนใจที่ส่งไปยัง navigator.joinAdInterestGroup() ซึ่งเป็นกลไกให้เจ้าของกลุ่มอัปเดตแอตทริบิวต์ของกลุ่มความสนใจเป็นระยะๆ ในการใช้งานปัจจุบัน คุณเปลี่ยนแปลงแอตทริบิวต์ต่อไปนี้ได้

  • biddingLogicUrl
  • biddingWasmHelperUrl
  • trustedBiddingSignalsUrl
  • trustedBiddingSignalsKeys
  • ads
  • priority

ช่องใดๆ ที่ไม่ได้ระบุใน JSON จะไม่ถูกเขียนทับ โดยจะมีเพียงช่องที่ระบุใน JSON เท่านั้นที่ได้รับการอัปเดต ในขณะที่การเรียกใช้ navigator.joinAdInterestGroup() จะเขียนทับกลุ่มความสนใจที่มีอยู่

การอัปเดตเป็นวิธีที่ดีที่สุดและอาจล้มเหลวภายใต้เงื่อนไขต่อไปนี้ * ระยะหมดเวลาของคำขอเครือข่าย (ปัจจุบันคือ 30 วินาที) * เครือข่ายอื่นล้มเหลว * แยกวิเคราะห์ JSON ไม่สำเร็จ

นอกจากนี้ ยังสามารถยกเลิกการอัปเดตได้หากใช้เวลาอัปเดตที่ต่อเนื่องนานเกินไป แต่จะไม่มีการจำกัดอัตราของการอัปเดตที่ยกเลิก (ที่เหลือ) อัตราการอัปเดตจำกัดไว้ที่ 1 ครั้งต่อวัน ระบบจะลองอัปเดตที่ไม่สำเร็จเนื่องจากข้อผิดพลาดเกี่ยวกับเครือข่ายอีกครั้งหลังจากผ่านไป 1 ชั่วโมง และจะลองเชื่อมต่ออีกครั้งทันทีเมื่อขาดการเชื่อมต่ออินเทอร์เน็ต

อัปเดตด้วยตนเอง

คุณทริกเกอร์การอัปเดตกลุ่มความสนใจที่ต้นทางของเฟรมปัจจุบันเป็นเจ้าของได้ผ่าน navigator.updateAdInterestGroups() การจำกัดอัตราคำขอจะป้องกันไม่ให้มีการอัปเดตบ่อยเกินไป: การโทรซ้ำๆ ไปยัง navigator.updateAdInterestGroups() จะไม่ดำเนินการใดๆ จนกว่าขีดจำกัดอัตราคำขอดังกล่าวจะผ่านไป (ปัจจุบันคือ 1 วัน) แล้ว ระบบจะรีเซ็ตขีดจำกัดของอัตราหากมีการเรียก navigator.joinAdInterestGroup() อีกครั้งสำหรับกลุ่มความสนใจ owner และ name เดียวกัน

การอัปเดตอัตโนมัติ

กลุ่มความสนใจทั้งหมดที่โหลดสำหรับการประมูลจะอัปเดตโดยอัตโนมัติหลังจากการประมูลเสร็จสมบูรณ์ โดยขึ้นอยู่กับขีดจำกัดอัตราเดียวกับการอัปเดตด้วยตนเอง สำหรับเจ้าของแต่ละรายที่มีกลุ่มความสนใจอย่างน้อย 1 กลุ่มที่เข้าร่วมการประมูล จะมีการเรียก navigator.updateAdInterestGroups() จาก iframe ที่มีต้นทางตรงกับเจ้าของรายดังกล่าว

ระบุโฆษณาสำหรับกลุ่มความสนใจ

ออบเจ็กต์ ads และ adComponents ประกอบด้วย URL สำหรับครีเอทีฟโฆษณา และ (ไม่บังคับ) ข้อมูลเมตาที่กำหนดเองซึ่งใช้ได้ในการเสนอราคา เช่น

{
  renderUrl: 'https://cdn.example/.../bikeAd1.html',
  metadata: bikeAd1metadata // optional
}

ผู้ซื้อจะเสนอราคาอย่างไร

สคริปต์ที่ biddingLogicUrl ที่ระบุโดยเจ้าของกลุ่มความสนใจต้องมีฟังก์ชัน generateBid() เมื่อผู้ขายพื้นที่โฆษณาเรียกใช้ navigator.runAdAuction() ระบบจะเรียกใช้ฟังก์ชัน generatedBid() 1 ครั้งสำหรับกลุ่มความสนใจแต่ละกลุ่มที่เบราว์เซอร์เป็นสมาชิก หากเจ้าของกลุ่มความสนใจได้รับเชิญให้เสนอราคา กล่าวคือ ระบบจะเรียกใช้ generateBid() 1 ครั้งสำหรับโฆษณาคู่แข่งแต่ละรายการ ผู้ขายให้พร็อพเพอร์ตี้ decisionLogicUrl ในพารามิเตอร์การกำหนดค่าการประมูลที่ส่งไปยัง navigator.runAdAuction() โค้ดที่ URL นี้ต้องมีฟังก์ชัน scoreAd() ซึ่งเรียกใช้สำหรับผู้เสนอราคาแต่ละรายในการประมูล เพื่อให้คะแนนราคาเสนอแต่ละรายการที่แสดงโดย generateBid()

สคริปต์ที่ biddingLogicUrl ที่ระบุโดยผู้ซื้อพื้นที่โฆษณาต้องมีฟังก์ชัน generateBid() ฟังก์ชันนี้จะเรียก 1 ครั้งสำหรับโฆษณาที่เป็นตัวเลือกแต่ละรายการ runAdAuction() ตรวจสอบโฆษณาแต่ละรายการ รวมถึงราคาเสนอและข้อมูลเมตาที่เกี่ยวข้อง จากนั้นกำหนดคะแนนความพอใจที่เป็นตัวเลขให้กับโฆษณา

generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  ...
  return {
    ad: adObject,
    bid: bidValue,
    render: renderUrl,
    adComponents: [adComponentRenderUrl1, ...]
   };
}

generateBid() รับอาร์กิวเมนต์ต่อไปนี้

  • interestGroup
    ออบเจ็กต์ที่ผู้ซื้อโฆษณาส่งไปยัง joinAdInterestGroup() (กลุ่มความสนใจอาจได้รับการอัปเดตผ่าน dailyUpdateUrl)

  • auctionSignals
    พร็อพเพอร์ตี้ของอาร์กิวเมนต์การกำหนดค่าการประมูลที่ผู้ขายเพื่อแสดงโฆษณาส่งไปให้ navigator.runAdAuction() ข้อมูลนี้ให้ข้อมูลเกี่ยวกับบริบทของหน้าเว็บ (เช่น ขนาดโฆษณาและรหัสผู้เผยแพร่โฆษณา) ประเภทการประมูล (ราคาอันดับ 1 หรือราคาอันดับ 2) และข้อมูลเมตาอื่นๆ

  • perBuyerSignals
    เช่นเดียวกับ auctionSignals พร็อพเพอร์ตี้ของอาร์กิวเมนต์การกำหนดค่าการประมูลที่ผู้ขายส่งให้ navigator.runAdAuction() ซึ่งจะส่งสัญญาณบริบทเกี่ยวกับหน้าเว็บจากเซิร์ฟเวอร์ของผู้ซื้อ หากผู้ขายเป็น SSP ที่เรียกใช้การเสนอราคาแบบเรียลไทม์ไปยังเซิร์ฟเวอร์ของผู้ซื้อ และส่งการตอบกลับกลับมา หรือหากหน้าของผู้เผยแพร่โฆษณาติดต่อเซิร์ฟเวอร์ของผู้ซื้อโดยตรง หากใช่ ผู้ซื้ออาจต้องการตรวจสอบลายเซ็นการเข้ารหัสของสัญญาณเหล่านั้นภายใน generateBid() เพื่อป้องกันการปลอมแปลง

  • trustedBiddingSignals
    ออบเจ็กต์ที่มีคีย์เป็น trustedBiddingSignalsKeys สำหรับกลุ่มความสนใจ และมีค่าที่ส่งคืนในคำขอ trustedBiddingSignals

  • browserSignals
    ออบเจ็กต์ที่สร้างโดยเบราว์เซอร์ ซึ่งอาจรวมถึงข้อมูลเกี่ยวกับบริบทของหน้าเว็บ (เช่น hostname ของหน้าปัจจุบันที่ผู้ขายอาจปลอมแปลงขึ้น) และข้อมูลสำหรับกลุ่มความสนใจนั้นเอง (เช่น บันทึกว่ากลุ่มชนะการประมูลก่อนหน้านี้เมื่อใด เพื่ออนุญาตการกำหนดความถี่สูงสุดในอุปกรณ์)

ออบเจ็กต์ browserSignals มีพร็อพเพอร์ตี้ต่อไปนี้

{
  topWindowHostname: 'publisher.example',
  seller: 'https://ssp.example',
  joinCount: 3,
  bidCount: 17,
  prevWins: [[time1,ad1],[time2,ad2],...],
  wasmHelper: ... /* WebAssembly.Module object based on interest group's biddingWasmHelperUrl. */
  dataVersion: 1, /* Data-Version value from the buyer's Key/Value service response(s). */
}

ในการคำนวณค่า bid โค้ดใน generateBid() จะใช้พร็อพเพอร์ตี้ของพารามิเตอร์ของฟังก์ชันได้ เช่น

function generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  return {
    ...
    bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
    ...
  }
}

generateBid() แสดงผลออบเจ็กต์ที่มีพร็อพเพอร์ตี้ 4 รายการดังนี้

  • ad
    ข้อมูลเมตาที่กำหนดเองเกี่ยวกับโฆษณา เช่น ข้อมูลที่ผู้ขายคาดว่าจะเรียนรู้เกี่ยวกับราคาเสนอหรือครีเอทีฟโฆษณานี้ ผู้ขาย](/privacy-sandbox/resources/glossary#ssp)ใช้ข้อมูลนี้ในการประมูลและครีเอทีฟโฆษณาเพื่อการตัดสินใจ ผู้ขายใช้ข้อมูลนี้ในตรรกะการประมูลและการตัดสินใจ

  • bid
    ตัวเลขราคาเสนอที่จะเข้าสู่การประมูล ผู้ขายต้องอยู่ในตำแหน่งที่จะเปรียบเทียบราคาเสนอจากผู้ซื้อรายต่างๆ ดังนั้นราคาเสนอต้องอยู่ในหน่วยที่ผู้ขายเลือก (เช่น "USD ต่อพัน") หากราคาเสนอเป็น 0 หรือติดลบ กลุ่มความสนใจนี้จะไม่เข้าร่วมการประมูลของผู้ขายเลย ด้วยกลไกนี้ ผู้ซื้อสามารถใช้กฎของผู้ลงโฆษณาใดๆ ก็ได้ว่าจะให้โฆษณาของตนปรากฏที่ใดหรือไม่ปรากฏ

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

  • adComponents
    รายการที่ไม่บังคับซึ่งมีคอมโพเนนต์สูงสุด 20 รายการสำหรับโฆษณาที่ประกอบด้วยหลายชิ้น ซึ่งนำมาจากพร็อพเพอร์ตี้ adComponents ของอาร์กิวเมนต์กลุ่มความสนใจที่ส่งไปยัง navigator.joinAdInterestGroup()

การขอให้เบราว์เซอร์ออกจากกลุ่มความสนใจ

เจ้าของกลุ่มความสนใจสามารถขอให้นำเบราว์เซอร์ออกจากกลุ่มความสนใจได้ พูดอีกอย่างคือ ระบบจะขอให้เบราว์เซอร์นำกลุ่มความสนใจออกจากรายการของกลุ่มที่เบราว์เซอร์นั้นเป็นสมาชิก

navigator.leaveAdInterestGroup({
  owner: 'https://dsp.example',
  name: 'custom-bikes'
});

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

3. ผู้ใช้เข้าชมเว็บไซต์ที่ขายพื้นที่โฆษณา

ภาพประกอบแสดงภาพคนกำลังเข้าชมเว็บไซต์ข่าวในเบราว์เซอร์บนแล็ปท็อป ไซต์มีช่องโฆษณาว่างเปล่า

ต่อมา ผู้ใช้เข้าชมเว็บไซต์ที่ขายพื้นที่โฆษณา ในตัวอย่างนี้คือเว็บไซต์ข่าว เว็บไซต์ดังกล่าวมีพื้นที่โฆษณา ซึ่งขายแบบเป็นโปรแกรมโดยใช้การเสนอราคาแบบเรียลไทม์

4. การประมูลเพื่อแสดงโฆษณาจะทำงานในเบราว์เซอร์

ภาพประกอบแสดงภาพคนกำลังดูเว็บไซต์ข่าวในเบราว์เซอร์บนแล็ปท็อป การประมูลเพื่อแสดงโฆษณาโดยใช้ Protected Audience API กำลังเกิดขึ้น

ส่วนคำอธิบาย: ผู้ขายเรียกใช้การประมูลในอุปกรณ์

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

ผู้ขายพื้นที่โฆษณาส่งคำขอไปยังเบราว์เซอร์ของผู้ใช้เพื่อเริ่มการประมูลเพื่อแสดงโฆษณาโดยเรียกใช้ navigator.runAdAuction()

เช่น

const auctionConfig = {
  seller: 'https://ssp.example',
  decisionLogicUrl: ...,
  trustedScoringSignalsUrl: ...,
  interestGroupBuyers: ['https://dsp.example', 'https://buyer2.example', ...],
  auctionSignals: {...},
  sellerSignals: {...},
  sellerTimeout: 100,
  perBuyerSignals: {
    'https://dsp.example': {...},
    'https://another-buyer.example': {...},
    ...
  },
  perBuyerTimeouts: {
    'https://dsp.example': 50,
    'https://another-buyer.example': 200,
    '*': 150,
    ...
  },
  componentAuctions: [
    {
      'seller': 'https://some-other-ssp.example',
      'decisionLogicUrl': ...,
      ...
    },
    ...
  ]
};

const auctionResultPromise = navigator.runAdAuction(auctionConfig);

runAdAuction() แสดงผลสัญญาที่แปลงค่าเป็น URN (urn:uuid:<something>) ซึ่งแสดงผลการประมูลเพื่อแสดงโฆษณา ซึ่งจะถอดรหัสได้โดยเบราว์เซอร์เมื่อส่งไปยังเฟรมที่มีการปิดกั้นเพื่อการแสดงผลเท่านั้น กล่าวคือ หน้าของผู้เผยแพร่โฆษณาจะตรวจสอบโฆษณาที่ชนะไม่ได้

สคริปต์ decisionLogicUrl จะพิจารณาโฆษณาแต่ละรายการ รวมถึงราคาเสนอและข้อมูลเมตาที่เกี่ยวข้องทีละรายการ จากนั้นกำหนดคะแนนความพอใจที่เป็นตัวเลข

ที่พัก auctionConfig แห่ง

พร็อพเพอร์ตี้ ต้องระบุ ตัวอย่าง บทบาท
seller ต้องระบุ 'https://ssp.example' ต้นทางของผู้ขาย
decisionLogicUrl ต้องระบุ 'https://ssp.example/auction-decision-logic.js' URL สำหรับ JavaScript ของ Worklet การประมูล
trustedScoringSignalsUrl ไม่บังคับ 'https://ssp.example/scoring-signals' URL ของเซิร์ฟเวอร์ที่เชื่อถือได้ของผู้ขาย
interestGroupBuyers* ต้องระบุ ['https://dsp.example', 'https://buyer2.example', ...] ต้นทางของเจ้าของกลุ่มความสนใจทุกรายที่ขอเสนอราคาในการประมูล
auctionSignals ไม่บังคับ {...} ข้อมูลผู้ขายเกี่ยวกับบริบทในหน้าเว็บ ประเภทการประมูล ฯลฯ
sellerSignals ไม่บังคับ {...} ข้อมูลตามการตั้งค่าของผู้เผยแพร่โฆษณา การสร้างคำขอโฆษณาตามบริบท ฯลฯ
sellerTimeout ไม่บังคับ 100 รันไทม์สูงสุด (มิลลิวินาที) ของสคริปต์ scoreAd() ของผู้ขาย
perBuyerSignals ไม่บังคับ {'https://dsp.example': {...},
  'https://another-buyer.example': {...},
...}
สัญญาณบริบทเกี่ยวกับหน้าเว็บสำหรับผู้ซื้อแต่ละรายจากเซิร์ฟเวอร์ของผู้ซื้อรายนั้น
perBuyerTimeouts ไม่บังคับ 50 รันไทม์สูงสุด (มิลลิวินาที) ของสคริปต์ generateBid() ของผู้ซื้อที่เฉพาะเจาะจง
componentAuctions ไม่บังคับ [{'seller': 'https://www.some-other-ssp.com',
  'decisionLogicUrl': ..., ...},
  ...]
การกําหนดค่าเพิ่มเติมสำหรับการประมูลแบบผสม

* ผู้ขายอาจระบุ interestGroupBuyers: '*' เพื่ออนุญาตให้กลุ่มความสนใจทั้งหมดเสนอราคาได้ จากนั้นโฆษณาจะได้รับการยอมรับหรือปฏิเสธตามเกณฑ์อื่นๆ ที่นอกเหนือจากการรวมเจ้าของกลุ่มความสนใจ ตัวอย่างเช่น ผู้ขายอาจตรวจสอบโฆษณาเพื่อยืนยันการปฏิบัติตามนโยบาย

** additionalBids ไม่รองรับในการใช้งาน Protected Audience ในปัจจุบัน โปรดอ่านข้อมูลเพิ่มเติมที่ส่วนผู้เข้าร่วมการประมูลในวิดีโออธิบายของ Protected Audience

ระบบเลือกโฆษณาอย่างไร

โค้ดที่ decisionLogicUrl (พร็อพเพอร์ตี้ของออบเจ็กต์การกำหนดค่าการประมูลที่ส่งไปยัง runAdAuction()) ต้องมีฟังก์ชัน scoreAd() ซึ่งจะทำงาน 1 ครั้งสำหรับแต่ละโฆษณา เพื่อระบุความต้องการ

scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
  ...
  return desirabilityScoreForThisAd;
}

scoreAd() จะใช้อาร์กิวเมนต์ต่อไปนี้ * adMetadata
ข้อมูลเมตาที่ผู้ซื้อระบุเอง * bid
ตัวเลขราคาเสนอ * auctionConfig
ออบเจ็กต์การกำหนดค่าการประมูลที่ส่งผ่านไปยัง navigator.runAdAuction() * trustedScoringSignals
ค่าที่ดึงมาในขณะประมูลจากเซิร์ฟเวอร์ที่เชื่อถือได้ของผู้ขาย แสดงถึงความคิดเห็นของผู้ขายที่มีต่อโฆษณา * browserSignals
ออบเจ็กต์ที่เบราว์เซอร์สร้างขึ้น รวมถึงข้อมูลที่เบราว์เซอร์รู้และสคริปต์การประมูลของผู้ขายอาจต้องการยืนยัน

{
  topWindowHostname: 'publisher.example',
  interestGroupOwner: 'https://dsp.example',
  renderUrl: 'https://cdn.example/render',
  adComponents: ['https://cdn.com/ad-component-1', ...],
  biddingDurationMsec: 12,
  dataVersion: 1 /* Data-Version value from the seller's Key/Value service response. */
}

ก่อนที่การประมูลจะเริ่มต้นขึ้น ผู้ขายจะค้นหาโฆษณาตามบริบทที่ดีที่สุดสำหรับช่องโฆษณาที่มีอยู่ ส่วนหนึ่งของตรรกะ scoreAd() คือการปฏิเสธโฆษณาใดๆ ที่ไม่สามารถเอาชนะผู้ชนะตามบริบทได้

5. ผู้ขายและผู้ซื้อที่เข้าร่วมจะได้รับข้อมูลแบบเรียลไทม์จากบริการจัดการคีย์/ค่า

ภาพประกอบแสดงภาพคนกำลังดูเว็บไซต์ข่าวในเบราว์เซอร์บนแล็ปท็อป การประมูลเพื่อแสดงโฆษณาที่ใช้ Protected Audience API กำลังเกิดขึ้น โดยผู้เข้าร่วมจะได้รับข้อมูลจากบริการคีย์/ค่า

ส่วนคำอธิบาย: การดึงข้อมูลแบบเรียลไทม์จากบริการคีย์/ค่าของ Protected Audience

ในระหว่างการประมูลเพื่อแสดงโฆษณา ผู้ขายพื้นที่โฆษณาจะได้รับข้อมูลแบบเรียลไทม์เกี่ยวกับครีเอทีฟโฆษณาที่เฉพาะเจาะจงด้วยการส่งคำขอไปยังบริการจัดการคีย์/มูลค่า โดยใช้พร็อพเพอร์ตี้ trustedScoringSignalsUrl ของอาร์กิวเมนต์การกำหนดค่าการประมูลที่ส่งไปยัง navigator.runAdAuction() พร้อมด้วยคีย์จากพร็อพเพอร์ตี้ renderUrl ของรายการทั้งหมดในช่อง ads และ adComponents ของทุกกลุ่มความสนใจในการประมูล

ในทำนองเดียวกัน ผู้ซื้อพื้นที่โฆษณาก็สามารถขอข้อมูลแบบเรียลไทม์จากบริการคีย์/ค่าได้โดยใช้พร็อพเพอร์ตี้ trustedBiddingSignalsUrl และ trustedBiddingSignalsKeys ของอาร์กิวเมนต์กลุ่มความสนใจที่ส่งไปยัง navigator.joinAdInterestGroup()

เมื่อมีการเรียก runAdAuction() เบราว์เซอร์จะส่งคำขอไปยังเซิร์ฟเวอร์ที่เชื่อถือได้ของผู้ซื้อโฆษณาแต่ละราย URL สำหรับคำขออาจมีลักษณะดังนี้

https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
  • URL ฐานมาจาก trustedBiddingSignalsUrl
  • hostname ให้บริการโดยเบราว์เซอร์
  • ค่า keys จะนํามาจาก trustedBiddingSignalsKeys

การตอบกลับคําขอนี้เป็นออบเจ็กต์ JSON ที่ระบุค่าสําหรับแต่ละคีย์

6. แสดงโฆษณาที่ชนะ

ภาพประกอบแสดงภาพคนกำลังดูเว็บไซต์ข่าวในเบราว์เซอร์บนแล็ปท็อป โฆษณาจักรยาน (ลด 20%) แสดงอยู่พร้อมรูปแม่กุญแจด้านบนเพื่อแสดงว่าโฆษณาแสดงใน
 เฟรมที่มีรั้ว

ส่วนคำอธิบาย: เบราว์เซอร์แสดงโฆษณาที่ชนะ

ตามที่อธิบายไว้ก่อนหน้านี้ สัญญาที่ runAdAuction() ส่งกลับมาจะเปลี่ยนเป็น URN ซึ่งจะส่งไปยังเฟรมที่ล้อมรั้วสำหรับการแสดงผล และเว็บไซต์จะแสดงโฆษณาที่ชนะ

7. มีการรายงานผลการประมูล

ส่วนคำอธิบาย: การรายงานระดับเหตุการณ์ (ในตอนนี้)

ผลการรายงานผู้ขาย

ส่วนคำอธิบาย: การรายงานของผู้ขายเกี่ยวกับการแสดงผล

JavaScript ของผู้ขายที่ให้ไว้ที่ decisionLogicUrl (ซึ่งให้ scoreAd() ด้วย) จะมีฟังก์ชัน reportResult() เพื่อรายงานผลการประมูลได้

reportResult(auctionConfig, browserSignals) {
  ...
  return signalsForWinner;
}

อาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันนี้ ได้แก่

  • auctionConfig
    ออบเจ็กต์การกำหนดค่าการประมูลที่ส่งไปยัง navigator.runAdAuction()

  • browserSignals
    ออบเจ็กต์ที่สร้างโดยเบราว์เซอร์เพื่อให้ข้อมูลเกี่ยวกับการประมูล ตัวอย่าง:

    {
      'topWindowHostname': 'publisher.example',
      'interestGroupOwner': 'https://dsp.example',
      'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn',
      'bid:' <bidValue>,
      'desirability': <winningAdScore>
    }
    

ค่าที่ส่งคืนของฟังก์ชันนี้จะใช้เป็นอาร์กิวเมนต์ sellerSignals สำหรับฟังก์ชัน reportWin() ของผู้เสนอราคาที่ชนะ

ผลการรายงานผู้เสนอราคาที่ชนะ

ส่วนคำอธิบาย: การรายงานของผู้ซื้อเกี่ยวกับการแสดงผลและเหตุการณ์โฆษณา

JavaScript ของผู้เสนอราคาที่ชนะ (ซึ่งมี generateBid() ด้วย) สามารถมีฟังก์ชัน reportWin() เพื่อรายงานผลการประมูล

reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
  ...
}

อาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันนี้ ได้แก่

  • auctionSignals และ perBuyerSignals
    ค่าเดียวกันที่ส่งไปยัง generateBid() สำหรับผู้เสนอราคาที่ชนะ
  • sellerSignals
    มูลค่าการคืนสินค้า reportResult() ซึ่งให้โอกาสผู้ขายในการส่งต่อข้อมูลให้กับผู้ซื้อ
  • browserSignals
    ออบเจ็กต์ที่สร้างโดยเบราว์เซอร์เพื่อให้ข้อมูลเกี่ยวกับการประมูล ตัวอย่าง:

    {
      'topWindowHostname': 'publisher.example',
      'seller': 'https://ssp.example',
      'interestGroupOwner': 'https://dsp.example',
      'interestGroupName': 'custom-bikes',
      'renderUrl': 'https://cdn.example/winning-creative.wbn',
      'bid:' <bidValue>
    }
    

การใช้การรายงานผลแพ้/ชนะชั่วคราว

การรายงานการประมูลใน Chrome ทำได้ 2 วิธีดังนี้

  • forDebuggingOnly.reportAdAuctionLoss()
  • forDebuggingOnly.reportAdAuctionWin()

แต่ละเมธอดจะใช้อาร์กิวเมนต์เดียว ซึ่งเป็น URL ที่จะดึงข้อมูลหลังการประมูลเสร็จสมบูรณ์ ซึ่งอาจมีการเรียกใช้หลายครั้ง ทั้งใน scoreAd() และ generateBid() โดยมีอาร์กิวเมนต์ URL ที่ต่างกัน

Chrome จะส่งรายงานการแก้ไขข้อบกพร่อง/การแก้ไขข้อบกพร่องเมื่อการประมูลสิ้นสุดลงเท่านั้น หากการประมูลถูกยกเลิก (เช่น เนื่องจากการนำทางใหม่) จะไม่มีการสร้างรายงาน

วิธีการเหล่านี้จะใช้ได้โดยค่าเริ่มต้นใน Chrome หากเปิดใช้ chrome://flags/#privacy-sandbox-ads-apis แต่หากใช้ Chrome ที่มีแฟล็กบรรทัดคำสั่งเพื่อเปิดใช้ Protected Audience คุณจะต้องเปิดใช้เมธอดต่างๆ อย่างชัดแจ้งโดยรวมแฟล็ก BiddingAndScoringDebugReportingAPI หากไม่ได้เปิดใช้แฟล็ก เมธอดต่างๆ จะยังคงใช้งานได้แต่ไม่ต้องดำเนินการใดๆ

8. มีการรายงานการคลิกโฆษณา

ภาพประกอบแสดงภาพคนคลิกโฆษณาจักรยานภายในกรอบที่มีรั้วในเว็บไซต์ข่าว พร้อมข้อมูลรายงานที่ส่งไปยังผู้ขายและผู้ซื้อ

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



แผนภาพด้านล่างแสดงการประมูลเพื่อแสดงโฆษณาสำหรับกลุ่มเป้าหมายที่มีการป้องกันแต่ละระยะ

ภาพประกอบแสดงภาพรวมของการประมูลเพื่อแสดงโฆษณาสำหรับกลุ่มเป้าหมายที่มีการป้องกันแต่ละขั้น


Protected Audience กับ TURTLEDOVE แตกต่างกันอย่างไร

Protected Audience เป็นการทดสอบแรกที่จะนำมาใช้ใน Chromium ภายในกลุ่มข้อเสนอ TURTLEDOVE

Protected Audience เป็นไปตามหลักการระดับสูงของ TURTLEDOVE การโฆษณาออนไลน์บางอย่างได้มาจากการแสดงโฆษณาต่อผู้ที่สนใจซึ่งเคยโต้ตอบกับผู้ลงโฆษณาหรือเครือข่ายโฆษณามาก่อน ในอดีต การทำเช่นนี้พบว่าผู้ลงโฆษณาจดจำบุคคลที่เฉพาะเจาะจงขณะที่เรียกดูเว็บไซต์ต่างๆ ซึ่งเป็นข้อกังวลหลักของความเป็นส่วนตัวบนเว็บในปัจจุบัน

ความพยายามของ TURTLEDOVE นั้นเป็นเรื่องของการนำเสนอ API ใหม่เพื่อจัดการกับ Use Case นี้ พร้อมกับนำเสนอความก้าวหน้าที่สำคัญด้านความเป็นส่วนตัวดังต่อไปนี้

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

Protected Audience พัฒนามาจาก TURTLEDOVE และคอลเล็กชันข้อเสนอที่เกี่ยวข้องสำหรับการแก้ไขเพื่อให้บริการนักพัฒนาแอปที่ต้องการใช้ API ได้ดียิ่งขึ้น

  • ใน SPARROW: Criteo เสนอให้เพิ่มโมเดลบริการ ("Gatekeeper") ที่ทำงานในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) Protected Audience ประกอบด้วยการใช้ TEE ที่จำกัดยิ่งขึ้นสำหรับการค้นหาข้อมูลแบบเรียลไทม์และการรายงานแบบรวม
  • ข้อเสนอ TERN ของ NextRoll และ Magnite PARRROT อธิบายบทบาทต่างๆ ที่ผู้ซื้อและผู้ขายมีในการประมูลบนอุปกรณ์ ขั้นตอนการให้คะแนน/การเสนอราคาโฆษณาของ Protected Audience จะอิงตามขั้นตอนนี้
  • การแก้ไข TURTLEDOVE ที่อิงตามผลลัพธ์และระดับผลิตภัณฑ์ของ RTB House ช่วยปรับปรุงรูปแบบการไม่ระบุตัวตนและความสามารถในการปรับเปลี่ยนตามโปรไฟล์ของผู้ใช้ของการประมูลในอุปกรณ์
  • PARAKEET เป็นข้อเสนอของ Microsoft สำหรับบริการโฆษณาที่คล้ายกับ TURTLEDOVE ซึ่งอาศัยพร็อกซีเซิร์ฟเวอร์ที่ทำงานใน TEE ระหว่างเบราว์เซอร์และผู้ให้บริการ AdTech เพื่อปกปิดคำขอโฆษณาและบังคับใช้พร็อพเพอร์ตี้ความเป็นส่วนตัว Protected Audience ไม่ได้ใช้โมเดลการพร็อกซีนี้ เราจะทำให้ JavaScript API สำหรับ PARAKEET และ Protected Audience สอดคล้องกันเพื่อสนับสนุนการทำงานในอนาคตเพื่อรวมฟีเจอร์ที่ดีที่สุดของทั้ง 2 ข้อเสนอเข้าด้วยกันต่อไป

ทั้งนี้ Protected Audience ยังไม่ป้องกันไม่ให้เครือข่ายโฆษณาในเว็บไซต์เรียนรู้ว่าโฆษณาใดที่ผู้ใช้เห็น เราคาดว่าจะปรับ API ให้เป็นส่วนตัวมากขึ้นในอนาคต

การกำหนดค่าเบราว์เซอร์ใดบ้างที่ใช้งานได้

ผู้ใช้สามารถปรับการเข้าร่วมช่วงทดลองใช้ Privacy Sandbox ใน Chrome ได้ด้วยการเปิดหรือปิดใช้การตั้งค่าระดับบนสุดใน chrome://settings/adPrivacy ในระหว่างการทดสอบระยะแรก ผู้ใช้จะใช้การตั้งค่า Privacy Sandbox ระดับสูงนี้เพื่อเลือกไม่ใช้ Protected Audience ได้ Chrome วางแผนที่จะอนุญาตให้ผู้ใช้ดูและจัดการรายการกลุ่มความสนใจที่ผู้ใช้ได้เพิ่มไว้ในเว็บไซต์ต่างๆ ที่ผู้ใช้เคยเข้าชม เช่นเดียวกับเทคโนโลยี Privacy Sandbox การตั้งค่าของผู้ใช้อาจเปลี่ยนแปลงไปตามความคิดเห็นจากผู้ใช้ หน่วยงานกำกับดูแล และอื่นๆ

เราจะอัปเดตการตั้งค่าที่มีอยู่ใน Chrome ต่อไปในระหว่างที่ข้อเสนอ Protected Audience ดำเนินอยู่ โดยอิงตามการทดสอบและความคิดเห็น เราวางแผนที่จะเสนอการตั้งค่าที่ละเอียดยิ่งขึ้นเพื่อจัดการ Protected Audience และข้อมูลที่เกี่ยวข้อง

ผู้โทร API จะเข้าถึงการเป็นสมาชิกกลุ่มไม่ได้เมื่อผู้ใช้ท่องเว็บในโหมดไม่ระบุตัวตน และการเป็นสมาชิกจะถูกนำออกเมื่อผู้ใช้ล้างข้อมูลเว็บไซต์



มีส่วนร่วมและแชร์ความคิดเห็น

รับความช่วยเหลือ

หากต้องการถามคำถามเกี่ยวกับการใช้งาน การสาธิต หรือเอกสารประกอบ ให้ทำดังนี้ * เปิดปัญหาใหม่ ในที่เก็บ privacy-sandbox-dev-support ตรวจสอบว่าคุณเลือกเทมเพลตปัญหาสำหรับ Protected Audience แล้ว * แจ้งปัญหาเกี่ยวกับที่เก็บโค้ดสาธิตบน GitHub * หากมีคำถามทั่วไปเพิ่มเติมเกี่ยวกับวิธีจัดการ Use Case ด้วย API โปรดแจ้งปัญหาในที่เก็บข้อเสนอ

สำหรับข้อบกพร่องและปัญหาในการใช้งาน Protected Audience API ใน Chrome ให้ทำดังนี้ * ดูปัญหาที่มีอยู่ ที่รายงานสำหรับ API * แจ้งปัญหาใหม่ที่ crbug.com/new

รับข้อมูลอัปเดต

  • หากต้องการรับการแจ้งเตือนการเปลี่ยนแปลงสถานะใน API โปรดเข้าร่วมรายชื่ออีเมลสำหรับนักพัฒนาซอฟต์แวร์
  • หากต้องการติดตามการสนทนาที่กำลังเกิดขึ้นทั้งหมดเกี่ยวกับ API อย่างใกล้ชิด ให้คลิกปุ่มดูในหน้าข้อเสนอใน GitHub โดยคุณจะต้องหรือสร้างบัญชี GitHub ก็ได้
  • หากต้องการรับข้อมูลอัปเดตโดยรวมเกี่ยวกับ Privacy Sandbox ให้สมัครรับข้อมูลฟีด RSS [ความคืบหน้าใน Privacy Sandbox]

ดูข้อมูลเพิ่มเติม


รูปภาพโดย Ray Hennessy ใน Unsplash