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