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

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

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

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