SDK โฆษณาในรันไทม์ของ SDK จะเข้าถึงลําดับชั้นของมุมมองของผู้เผยแพร่โฆษณาไม่ได้
แต่ SDK ในรันไทม์จะมีมุมมองของตัวเอง SDK ไม่สามารถใช้ View API เดียวกันกับที่ใช้ภายนอกรันไทม์ของ SDK เพื่อพิจารณาว่าโฆษณา
แสดงต่อผู้ใช้หรือไม่ เนื่องจากไม่ได้แนบมุมมองโฆษณากับหน้าต่างของแอปพลิเคชัน
ซึ่งรวมถึง View API ของ Android เช่น getLocationOnScreen
getLocationInWindow หรือ getVisibility ซึ่งไม่แสดงค่าที่คาดไว้
การรองรับการวัดการมองเห็นโฆษณาเป็นข้อกำหนดหลักของ SDK Runtime ข้อเสนอการออกแบบนี้มีเป้าหมายเพื่อรองรับ Open Measurement และบริการวัดผลที่คล้ายกัน โซลูชัน ที่กล่าวถึงในที่นี้อาจใช้ได้กับ Attribution Reporting API ด้วย
ความสามารถ
การออกแบบนี้มีจุดมุ่งหมายเพื่อรองรับ 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 ของไคลเอ็นต์ได้
คำถามเปิด
- คุณสนใจสัญญาณการมองเห็นใดที่ไม่ได้กล่าวถึงในคำอธิบายนี้
- ข้อเสนอในปัจจุบันคือการอัปเดตการมองเห็นโฆษณาบ่อยครั้งไม่น้อยกว่าทุกๆ 200 มิลลิวินาที หากมีการเปลี่ยนแปลงที่เกี่ยวข้องใน UI คุณยอมรับความถี่นี้ได้ไหม หากไม่ คุณต้องการให้ส่งอีเมลแจ้งเตือนบ่อยเพียงใด
- คุณต้องการวิเคราะห์ข้อมูลจาก
setTrustedPresentationCallbackตัวคุณเอง หรือต้องการให้ไลบรารี UI ของผู้ให้บริการทิ้งข้อมูลจากไลบรารี UI ของไคลเอ็นต์เมื่อข้อมูลไม่ตรงกับข้อมูลsetTrustedPresentationCallback - คุณใช้สัญญาณความสามารถในการแสดงตัวโฆษณาอย่างไร ช่วยให้เราเข้าใจกรณีการใช้งานของคุณโดยการ ส่งความคิดเห็นที่ตอบคำถามเหล่านี้