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

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

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

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

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

API

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

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

คำถามเปิด

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