ערכות SDK של מודעות בזמן הריצה של ה-SDK לא יכולות לגשת להיררכיית התצוגות של בעל האתר.
במקום זאת, לערכות SDK בזמן הריצה יש תצוגות משלהן. ערכת ה-SDK לא יכולה להשתמש באותם ממשקי API של View שבהם הם משתמשים מחוץ לזמן הריצה של ה-SDK, כדי לקבוע אם המודעה גלויה למשתמש, כי תצוגת המודעה לא מצורפת לחלון של האפליקציה. זה כולל ממשקי API ל-Android כמו getLocationOnScreen
, getLocationInWindow
או getVisibility
, שלא מחזירים את הערכים הצפויים.
תמיכה במדידת הניראות של מודעות היא דרישה חיונית לזמן ריצה ל-SDK. המטרה של הצעת העיצוב הזו היא להשיג תמיכה במדידה פתוחה ובשירותי מדידה דומים. הפתרונות שמתוארים כאן עשויים להתאים גם ל-Attribution Reporting API. נשמח לקבל משוב על ההצעה הזו.
יכולות
העיצוב הזה נועד לתמוך בערכות SDK של מודעות או בשותפי מדידה כדי לחשב את נתוני הניראות הבאים (השמות הם זמניים וכפופים לשינויים):
viewport [Rect]
: מייצג את מסך המכשיר או את הגאומטריה של חלון האפליקציה, בהתאם ליכולות של הפלטפורמה.uiContainerGeometry [Rect]
: הגיאומטריה של ה-SandboxedSdkView
שעובר רינדור.alpha [float]
: השקיפות של ה-SandboxedSdkView
שעבר רינדור.onScreenGeometry [Rect]
: קבוצת המשנה שלuiContainerGeometry
, שלא נחתכת על ידי צפיות הורה, עד וכוללviewport
).occludedGeometry [Rect]
: החלקים שלonScreenGeometry
שמוסתרים על ידי התצוגות בהיררכיה של האפליקציה. כוללRect
לכל הסתרה, שתואמת לאפס, לתצוגה אחת או יותר באפליקציה שמצטלבת עםSandboxedSdkView onScreenGeometry
דרישות
- הערכים של
uiContainerGeometry
,onScreenGeometry
ו-occludedGeometry
מבוטאים במרחב הקואורדינטות שלviewport
. - הדיווח על שינויים בחשיפה מתרחש לאחר זמן אחזור מינימלי.
- החשיפה ניתנת למדידה למשך כל מחזור החיים של צפייה במודעה, החל מהחשיפה הראשונה ועד האחרונה.
עיצוב הצעה
ההצעה הזו מבוססת על האופן שבו מצגת UI פועלת באמצעות ספריות ממשק המשתמש של הלקוח והספק. נרחיב את ספריות ממשק המשתמש כדי לאפשר ל-SDK לרשום צופה אחד או יותר בסשן בממשק המשתמש. הצופה יקבל מידע על הניראות בכל פעם שיזוהו אירועים רלוונטיים שמשנים את סוגי הנתונים בקטע capabilities. ערכות SDK למדידה בהטמעות של זמן הריצה של ה-SDK (OMID ו-MRAID) יכולות לצרף את הצופה הזה לסשן של ממשק המשתמש, כדי שאפשר יהיה לשלוח את המידע הזה ישירות. שותפי המדידה יכולים לשלב מידע שהתקבל מספריות של ממשק המשתמש עם נתונים על תוכן שכבר זמין (למשל, בעת שימוש בסקריפטים למדידה שהוחדרו לקריאייטיב של המודעה) כדי ליצור אירועים של ניראות JavaScript.
ספריית הלקוח מאזינה לשינויים בממשק המשתמש של המודעות באמצעות פונקציות event listener כמו ViewTreeObserver
. בכל פעם שהיא קובעת שממשק המשתמש של המודעה השתנה באופן שעשוי להשפיע על מדידת הניראות, ספריית הלקוח בודקת מתי ההתראה האחרונה נשלחה לצופה. אם העדכון האחרון ארוך יותר מזמן האחזור המותר (ניתן להגדיר על ידי ה-SDK, עד 200 אלפיות השנייה לפחות בנייד), נוצר אובייקט AdContainerInfo
חדש ונשלחת התראה לצופה. המודל הזה מבוסס-אירועים עדיף על תקינות המערכת ולא על הסקרים שמתבצעים כיום על ידי רוב ההטמעות של OMID ב-Android.
API
הפריטים הבאים יתווספו לספרייה של privacysandbox.ui.core:
SessionObserver
: בדרך כלל מיושם על ידי ה-SDK למדידת האפליקציה, שמצורף לסשן שמוחזר מה-SDK דרך privacysandbox.ui. הממשק הזה גם יאפשר ל-SDK למדידה להביע הסכמה לקטגוריות מסוימות של אותות ניראות. כך ספריית הלקוח של ממשק המשתמש יכולה לאסוף רק אותות שהצופים מתעניינים בהם, וכך לשפר את תקינות המערכת באופן כללי.registerObserver()
: השיטה הזו נוספת למחלקהSession
, וכך מאפשרת לכל מי שיש לו גישה לסשן לרשום צופה. אם הצופה נרשם אחרי שהסשן של ממשק המשתמש נפתח, הוא יישלח מיד במטמוןAdContainerInfo
. אם נרשמים לפני שהסשן נפתח, הם יישלחוAdContainerInfo
כשהפעילות תיפתח.AdContainerInfo
: מחלקה עם נמענים שמאפשרת לצופה לקבל מידע לקריאה בלבד על קונטיינרים של מודעות עבור סוגי הנתונים שמפורטים בקטע קאפביליטים למעלה. הערכים המוחזרים מהמקבלים האלה יתאימו, ככל האפשר, לערכים המוחזרים של החבילה ממקבלים קיימים ב-View
ובמחלקות המשנה שלו. אם מאגר המודעות נוצר באמצעות Jetpack Compose, הוא חושף את המאפיינים הסמנטיים של המאגר. ניתן להשתמש במחלקה הזו כדי לחשב אירועי MRAID ו-OMID שקשורים לניראות.SessionObserverotifyAdContainerChanged()
: משמשת כדי להודיע לצופה בכל פעם שהניראות משתנה. היא מעבירה אובייקטAdContainerInfo
. הוא נקרא בכל פעם שמזוהים אירועים שמשפיעים על סוגי הנתונים המפורטים בקטע 'יכולות'. הערה: ייתכן שתתבצע קריאה לשיטה הזו בנוסף לשיטות ב'סשן'. לדוגמה,Session.notifyResized()
נקרא כדי לבקש מה-SDK לשנות את גודל המודעה, ו-SessionObserver.notifyAdContainerChanged()
נקרא גם כשזה קורה.SessionObserverotifySessionClosed()
: מודיע לצופה שהסשן נסגר.
שיפורים עתידיים
אפשר לשנות כל קוד שפועל בתהליך האפליקציה, כולל הקוד מהספרייהprivacysandbox.ui.client, אם הוא נפגע. לכן, כל לוגיקה של איסוף אותות שפועלת בתהליך האפליקציה נוטה לפגיעה בקוד של האפליקציה. הדבר נכון גם לגבי קוד ה-SDK שנפרס לפני הזמינות של ארגז החול לפרטיות שפועל בתהליך הבקשה. לכן, איסוף אותות על ידי ספריית ממשק המשתמש לא מחמיר את מצב האבטחה.
בנוסף, קוד בסביבת זמן הריצה של ה-SDK יכול להשתמש בפלטפורמה API בשם setTrustedPresentationCallback
וכך לספק לו רמת אחריות חזקה יותר לגבי המצגת בממשק המשתמש של המודעות. setTrustedPresentationCallback
פועלת ברמת פני השטח, ויכולה לעזור לכם להגיע לטענות נכוֹנוּת (assertion) לגבי
הפלטפורמה שמכילה את ממשק המשתמש של המודעה על ידי ציון ערכי סף מינימליים להצגה, כמו
אחוז הפיקסלים הגלויים, זמן השימוש במסך או קנה המידה. אפשר לבדוק את הנתונים האלה מול נתוני הניראות שמסופקים על ידי ספריית הלקוח של ממשק המשתמש, כמו שמוסבר למעלה. הנתונים שסופקו על ידי ה-framework הם אמינים יותר, ולכן אפשר למחוק מאירועים בספריית ממשק המשתמש שהנתונים שלהם לא תואמים לנתונים מה-framework. לדוגמה, אם ה-listener שסופק ל-setTrustedPresentationCallback
מופעל עם התראה על כך שלא מוצגים פיקסלים בממשק המשתמש של המודעה, ובספריית ממשק המשתמש של הלקוח מוצג מספר הפיקסלים שהוא לא אפס, אפשר למחוק נתונים מהממשק השני.
שאלות פתוחות
ניתן לשלוח משוב על הנושאים הבאים:
- באילו אותות של ניראות אתם מתעניינים שלא מוזכרים בהסבר הזה?
- ההצעה הנוכחית היא לעדכן את הניראות בכל 200 אלפיות השנייה, בתנאי שיהיה שינוי רלוונטי בממשק המשתמש. האם התדירות הזו מקובלת עליכם? אם לא, באיזו תדירות היית רוצה להשתמש?
- האם אתם מעדיפים לנתח מידע מ-
setTrustedPresentationCallback
בעצמכם, או כדי שספריית ממשק המשתמש של הספק תשמיט נתונים מספריית ממשק המשתמש של הלקוח, אם הם לא תואמים לנתוניsetTrustedPresentationCallback
? - איך אתם צורכים אותות של ניראות? כדי לעזור לנו להבין תרחישים לדוגמה, תוכלו לשלוח לנו משוב על השאלות האלה.