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