ข้อเสนอการออกแบบการมองเห็นโฆษณารันไทม์ของ SDK

SDK โฆษณาในรันไทม์ของ SDK จะเข้าถึงลําดับชั้นมุมมองของผู้เผยแพร่โฆษณาไม่ได้ แต่ SDK ในรันไทม์จะมีมุมมองของตัวเอง SDK จะใช้ View API เดียวกันกับที่ใช้นอกรันไทม์ SDK เพื่อระบุว่าผู้ใช้มองเห็นโฆษณาหรือไม่ไม่ได้ เนื่องจากวิวโฆษณาไม่ได้แนบอยู่กับหน้าต่างของแอปพลิเคชัน ซึ่งรวมถึง View API ของ Android เช่น getLocationOnScreen, getLocationInWindow หรือ getVisibility ซึ่งไม่แสดงผลลัพธ์ที่คาดไว้

การรองรับการวัดการมองเห็นโฆษณาเป็นข้อกําหนดหลักของ รันไทม์ SDK ข้อเสนอการออกแบบนี้มุ่งหวังที่จะให้การสนับสนุนสำหรับ Open บริการวัดผลและบริการวัดผลที่คล้ายกัน โซลูชันที่กล่าวถึงที่นี่อาจใช้กับ Attribution Reporting API ได้ด้วย เรายินดีรับฟังความคิดเห็นของคุณเกี่ยวกับข้อเสนอนี้

ความสามารถ

การออกแบบนี้มุ่งรองรับ SDK โฆษณาหรือพาร์ทเนอร์การวัดผลเพื่อคํานวณ ข้อมูลการมองเห็นโฆษณาต่อไปนี้ (ชื่อมีชั่วคราวและอาจมีการเปลี่ยนแปลง)

ภาพประกอบแสดงการทำงานร่วมกันระหว่างองค์ประกอบต่างๆ ของการมองเห็นโฆษณารันไทม์ของ SDK
ภาพรวมของการมองเห็นโฆษณาในรันไทม์ของ SDK
  • viewport [Rect]: แสดงหน้าจออุปกรณ์หรือหน้าต่างแอป เรขาคณิต ทั้งนี้ขึ้นอยู่กับความสามารถของแพลตฟอร์ม
  • uiContainerGeometry [Rect]: เรขาคณิตของ SandboxedSdkView ที่กำลังแสดงผล
  • alpha [float]: ความทึบแสงของ SandboxedSdkView ที่แสดงผล
  • onScreenGeometry [Rect]: เซตย่อยของ uiContainerGeometry ซึ่งเท่ากับ ไม่ตัดจากจำนวนการดูของผู้ปกครอง สูงสุดถึง viewport)
  • occludedGeometry [Rect]: ส่วนของ onScreenGeometry ที่ ถูกกีดขวางโดยมุมมองใดๆ ในลำดับชั้นของแอปพลิเคชัน รวม Rect สำหรับ การบังแต่ละครั้ง ที่สอดคล้องกับ 0 มุมมองของแอปอย่างน้อย 1 มุมมองที่ตัดกัน ด้วย SandboxedSdkView onScreenGeometry

ข้อกำหนด

  • ค่าของ uiContainerGeometry, onScreenGeometry และ occludedGeometry จะแสดงในพื้นที่พิกัดของ viewport
  • การรายงานการเปลี่ยนแปลงระดับการแชร์จะเกิดขึ้นโดยใช้เวลาในการตอบสนองน้อยที่สุด
  • การมองเห็นสามารถวัดได้ตลอดวงจรการแสดงโฆษณา ตั้งแต่การแสดงครั้งแรกจนถึงการแสดงครั้งสุดท้าย

ข้อเสนอการออกแบบ

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

การควบคุมโฟลว์สำหรับการมองเห็นโฆษณา
ควบคุมขั้นตอนสำหรับการมองเห็นโฆษณา

ไลบรารีของไคลเอ็นต์จะตรวจจับการเปลี่ยนแปลงใน UI โฆษณาผ่าน Listener เหตุการณ์ เช่น ในชื่อ ViewTreeObserver เมื่อใดก็ตามที่ระบบระบุว่า UI ของโฆษณามีการเปลี่ยนแปลงใน ที่อาจส่งผลต่อการวัดการมองเห็นโฆษณา ไลบรารีของไคลเอ็นต์จะตรวจสอบ ได้ส่งการแจ้งเตือนล่าสุดไปยังผู้สังเกตการณ์แล้ว หากการอัปเดตครั้งล่าสุดนานกว่าเวลาในการตอบสนองที่อนุญาต (SDK กำหนดค่าได้สูงสุด 200 มิลลิวินาทีบนอุปกรณ์เคลื่อนที่) ระบบจะสร้างออบเจ็กต์ AdContainerInfo ใหม่และส่งการแจ้งเตือนไปยังผู้สังเกตการณ์ โมเดลแบบอิงตามเหตุการณ์นี้เหมาะสำหรับประสิทธิภาพของระบบมากกว่า มากกว่าแบบสำรวจที่ใช้ OMID ส่วนใหญ่ใน Android ในปัจจุบัน

API

ระบบจะเพิ่มรายการต่อไปนี้ลงในไลบรารี privacysandbox.ui.core

  • SessionObserver: โดยทั่วไปแล้ว SDK การวัดผลจะใช้ค่านี้ โดยแนบไปกับเซสชันที่ SDK แสดงผ่าน privacysandbox.ui อินเทอร์เฟซนี้ยังช่วยให้ SDK การวัดผลเลือกใช้หมวดหมู่สัญญาณความสามารถในการแสดงตัวโฆษณาได้อีกด้วย ซึ่งทำให้ไลบรารีของไคลเอ็นต์ UI สามารถ เก็บรวบรวมสัญญาณที่ผู้สังเกตสนใจ ซึ่งเหมาะกับระบบมากกว่า ประสิทธิภาพโดยรวม
  • registerObserver(): เพิ่มลงในคลาส Session แล้ว วิธีนี้จะทำให้ ทุกคนที่มีสิทธิ์เข้าถึงเซสชันเพื่อลงทะเบียนผู้สังเกตการณ์ หากผู้สังเกตการณ์คือ ที่ลงทะเบียนหลังจากเปิดเซสชัน UI แล้ว ระบบจะส่งแคชดังกล่าว AdContainerInfo ทันที หากลงทะเบียนไว้ก่อนเปิดเซสชัน ระบบจะส่ง AdContainerInfo เมื่อเปิดเซสชัน
  • AdContainerInfo: คลาสที่มี Geter ซึ่งช่วยให้ผู้สังเกตการณ์ได้รับข้อมูลคอนเทนเนอร์โฆษณาแบบอ่านอย่างเดียวสําหรับประเภทข้อมูลที่แสดงในส่วนความสามารถด้านบน ผลลัพธ์ที่แสดงค่าจากตัวรับเหล่านี้จะสอดคล้องกับผลลัพธ์ที่แสดงค่าแบบแยกส่วนได้ของตัวรับที่มีอยู่ของ View และคลาสย่อย หากมีการสร้างคอนเทนเนอร์โฆษณาแล้ว โดยใช้ Jetpack Compose เพื่อให้ระบบแสดงคุณสมบัติเชิงอรรถศาสตร์ของคอนเทนเนอร์ คลาสนี้ใช้คํานวณเหตุการณ์ MRAID และ OMID ที่เกี่ยวข้องกับการมองเห็นโฆษณาได้
  • SessionObserverotifyAdContainerChanged(): ใช้เพื่อแจ้งผู้สังเกตการณ์ เมื่อใดก็ตามที่ความสามารถในการแสดงตัวโฆษณาเปลี่ยนแปลง โดยจะส่งออบเจ็กต์ AdContainerInfo ซึ่งจะเรียกใช้ทุกครั้งที่ตรวจพบเหตุการณ์ที่ส่งผลต่อประเภทข้อมูลที่แสดงในส่วนความสามารถ หมายเหตุ: ระบบอาจเรียกใช้เมธอดนี้เพิ่มเติมจากเมธอดในเซสชัน ตัวอย่างเช่น Session.notifyResized() จะถูกเรียกเพื่อขอฟิลด์ SDK เพื่อปรับขนาดโฆษณา และ SessionObserver.notifyAdContainerChanged() ก็ เมื่อเกิดเหตุการณ์เช่นนี้ขึ้น
  • SessionObserverotifySessionClosed(): แจ้งให้ผู้สังเกตการณ์ทราบว่าเซสชันปิดแล้ว

การปรับปรุงในอนาคต

โค้ดใดก็ตามที่ทำงานในกระบวนการของแอปพลิเคชัน รวมถึงโค้ดจากไลบรารี privacysandbox.ui.client สามารถแก้ไขได้หากแอปพลิเคชันถูกบุกรุก ดังนั้น ตรรกะการเก็บรวบรวมสัญญาณที่ทำงานในกระบวนการของแอปพลิเคชันจึงมีแนวโน้มที่จะเกิดการแทรกแซงจากโค้ดแอปพลิเคชัน นโยบายนี้มีผลกับโค้ด SDK ที่ติดตั้งใช้งานก่อนเปิดตัว Privacy Sandbox ซึ่งทำงานในกระบวนการสมัครด้วย ดังนั้นการรวบรวมสัญญาณโดยไลบรารี UI จึงไม่ ทำให้สถานการณ์ด้านความปลอดภัยแย่ลง

นอกจากนี้ โค้ดในรันไทม์ของ SDK ยังใช้ API ของแพลตฟอร์มที่เรียกว่า setTrustedPresentationCallback ได้ ซึ่งจะให้การรับประกันที่มากขึ้นจากเฟรมเวิร์กเกี่ยวกับการแสดง UI ของโฆษณา setTrustedPresentationCallback ทำงานที่ระดับพื้นผิว และช่วยยืนยันสถานะเกี่ยวกับพื้นผิวได้ ที่มี UI โฆษณาโดยระบุเกณฑ์ขั้นต่ำในการนำเสนอ เช่น เปอร์เซ็นต์ของพิกเซลที่ปรากฏ เวลาบนหน้าจอ หรือขนาด ข้อมูลนี้อาจเป็น ตรวจสอบเทียบกับข้อมูลการมองเห็นโฆษณาที่ได้จากไลบรารีของไคลเอ็นต์ UI แล้ว คำอธิบาย ที่ด้านบน เนื่องจากข้อมูลที่ได้จากเฟรมเวิร์กมีความน่าเชื่อถือมากกว่า เหตุการณ์ใดๆ จาก ไลบรารี UI ที่ข้อมูลไม่สอดคล้องกับข้อมูลจากเฟรมเวิร์กสามารถ ทิ้งแล้ว ตัวอย่างเช่น หากผู้ฟังระบุ เรียกใช้ setTrustedPresentationCallback พร้อมการแจ้งเตือนว่าไม่มีพิกเซล แสดงอยู่บนหน้าจอ และไลบรารี UI ของไคลเอ็นต์จะแสดง จำนวนพิกเซลบนหน้าจอที่ไม่ใช่ 0 สามารถทิ้งข้อมูลจากรายการหลังได้

คำถามปลายเปิด

เรายินดีรับความคิดเห็นเกี่ยวกับประเด็นต่อไปนี้

  1. สัญญาณการมองเห็นโฆษณาที่คุณสนใจซึ่งไม่ได้กล่าวถึงในคําอธิบายนี้มีอะไรบ้าง
  2. ข้อเสนอปัจจุบันคือให้อัปเดตความสามารถในการแสดงตัวโฆษณาไม่น้อยกว่าทุก 200 มิลลิวินาที หากมีการเปลี่ยนแปลงที่เกี่ยวข้องใน UI นี่ใช่ เป็นความถี่ที่คุณรับได้ หากไม่ใช่ คุณต้องการให้แสดงโฆษณาบ่อยเพียงใด
  3. คุณต้องการวิเคราะห์ข้อมูลจาก setTrustedPresentationCallback ด้วยตนเอง หรือต้องการให้ไลบรารี UI ของผู้ให้บริการวางข้อมูลจากไลบรารี UI ของลูกค้าเมื่อข้อมูลไม่ตรงกับข้อมูล setTrustedPresentationCallback
  4. คุณใช้สัญญาณความสามารถในการแสดงตัวโฆษณาอย่างไร โปรดช่วยเราทำความเข้าใจกรณีการใช้งานของคุณด้วยการยื่นความคิดเห็นที่ตอบคําถามเหล่านี้