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

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

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

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

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

API

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

  • SessionObserver: โดยปกติแล้วจะติดตั้งใช้งานโดย SDK การวัดผล ซึ่งจะแนบไปกับเซสชันที่ SDK แสดงผลผ่าน privacysandbox.ui อินเทอร์เฟซนี้ยังทำให้ SDK การวัดเลือกใช้สัญญาณการมองเห็นโฆษณาบางหมวดหมู่ได้ด้วย ผลก็คือจะทำให้ไลบรารีของไคลเอ็นต์ UI รวบรวมเฉพาะสัญญาณที่ผู้สังเกตการณ์สนใจเท่านั้น ซึ่งส่งผลดีต่อประสิทธิภาพโดยรวมของระบบ
  • registerObserver(): การเพิ่มลงในคลาส Session ช่วยให้ทุกคนที่มีสิทธิ์เข้าถึงเซสชันสามารถลงทะเบียนผู้สังเกตการณ์ได้ หากมีการลงทะเบียนผู้สังเกตการณ์หลังจากเปิดเซสชัน UI แล้ว ระบบจะส่งผู้สังเกตการณ์ AdContainerInfo ที่แคชไว้ทันที หากลงทะเบียนก่อนที่เซสชันจะเปิด ระบบจะส่ง AdContainerInfo เมื่อมีการเปิดเซสชัน
  • AdContainerInfo: คลาสที่มี Getters ที่ช่วยให้ผู้สังเกตการณ์สามารถรับข้อมูลคอนเทนเนอร์ของโฆษณาแบบอ่านอย่างเดียวสำหรับประเภทข้อมูลที่ระบุไว้ในส่วน Capabilite ด้านบน ค่าที่แสดงผลจาก Getter เหล่านี้จะสอดคล้องกับค่าส่งคืนที่แยกวิเคราะห์ได้จาก Getter ที่มีอยู่ใน 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 ที่มีข้อมูลซึ่งไม่สอดคล้องกับข้อมูลจากเฟรมเวิร์ก เช่น หากเรียกใช้ Listener ที่ระบุไปยัง setTrustedPresentationCallback โดยมีการแจ้งเตือนว่าไม่มีพิกเซลของ UI ของโฆษณาแสดงบนหน้าจอ และไลบรารี UI ของไคลเอ็นต์แสดงจำนวนพิกเซลบนหน้าจอที่ไม่ใช่ 0 คุณจะทิ้งข้อมูลจากรายการหลังได้

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

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

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