ערכות SDK להצגת מודעות בזמן הריצה ל-SDK לא יכולות לגשת להיררכיית התצוגה של בעלי תוכן דיגיטלי.
במקום זאת, ל-SDKs בסביבת זמן הריצה יש תצוגות משלהם. ה-SDK לא יכול להשתמש באותם ממשקי View API שבהם הוא משתמש מחוץ לסביבת זמן הריצה של ה-SDK כדי לקבוע אם המודעה גלויה למשתמש, כי תצוגת המודעה לא מצורפת לחלון האפליקציה. הבעיה הזו כוללת ממשקי 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
לכל חסימת שדה ראייה, בהתאם לאפס, לאחת או יותר מתצוגות האפליקציה שחופפות ל-SandboxedSdkView onScreenGeometry
דרישות
- הערכים של
uiContainerGeometry
,onScreenGeometry
ו-occludedGeometry
מפורטים במרחב הקואורדינטות של ה-viewport
. - הדיווח על שינויים ברמת החשיפה מתבצע עם זמן אחזור מינימלי.
- אפשר למדוד את הניראות במהלך כל מחזור החיים של הצגת המודעה, מהופעתה הראשונה ועד להופעתה האחרונה.
הצעת עיצוב
ההצעה הזו מבוססת על האופן שבו הצגת ממשק המשתמש פועלת באמצעות ספריות ממשק המשתמש של הלקוח והספק. נרחיב את ספריות ממשק המשתמש כדי לאפשר ל-SDK לרשום משקיף אחד או יותר לסשן של ממשק המשתמש. המשתמש הצופה יקבל מידע על זמינות הצפייה בכל פעם שיזוהו אירועים רלוונטיים שמשמשים לשינוי סוגי הנתונים בקטע capabilities. ערכות SDK למדידת ביצועים בסביבת זמן הריצה של ה-SDK (הטמעות של OMID ו-MRAID) יכולות לצרף את הצופה הזה לסשן של ממשק המשתמש, כדי שהמידע הזה יוכל להישלח אליהן ישירות. שותפי מדידה יכולים לשלב מידע שנאסף מספריות של ממשק משתמש עם נתונים על תוכן שכבר זמין (למשל, כשמשתמשים בסקריפטים למדידת ביצועים שהוחדרו לנכס הקריאייטיב של המודעה) כדי ליצור אירועי JavaScript של זמינות לצפייה.
ספריית הלקוח מקשיבה לשינויים בממשק המשתמש של המודעה באמצעות מאזיני אירועים כמו ViewTreeObserver
. בכל פעם שמתקבלת החלטה שהממשק של המודעה השתנה באופן שעלול להשפיע על מדידת הניראות, ספריית הלקוח בודקת מתי נשלחה ההתראה האחרונה למשתמש המעקב. אם הזמן שחלף מהעדכון האחרון ארוך יותר מזמן האחזור המותרת (ניתן להגדיר את הזמן הזה ב-SDK, עד 200 אלפיות השנייה לפחות בנייד), נוצר אובייקט AdContainerInfo
חדש ונשלחת התראה למשתמש. המודל הזה מבוסס-אירועים, והוא טוב יותר לבריאות המערכת מאשר הסקרים שמבוצעים על ידי רוב הטמעות OMID ב-Android כיום.
API
הפריטים הבאים יתווספו לספרייה privacysandbox.ui.core:
SessionObserver
: בדרך כלל מוטמע על ידי ערכת ה-SDK למדידת ביצועים, ומצורף לסשן שה-SDK מחזיר דרך privacysandbox.ui. הממשק הזה יאפשר גם ל-SDK למדידת ביצועים להביע הסכמה לקטגוריות מסוימות של אותות ניראות. כך ספריית הלקוח של ממשק המשתמש יכולה לאסוף רק את האותות שמעניינים את המתבונן, וכך לשפר את בריאות המערכת באופן כללי.registerObserver()
: השיטה הזו מתווספת לכיתהSession
ומאפשרת לכל מי שיש לו גישה לסשן לרשום משתמש כצופה. אם המשתמש המצפה נרשם אחרי פתיחת סשן ממשק המשתמש, הערך שלAdContainerInfo
שנשמר במטמון יישלח אליו מיד. אם הם נרשמו לפני פתיחת הסשן, הם יישלח אלAdContainerInfo
כשהסשן ייפתח.AdContainerInfo
: כיתה עם פונקציות getter שמאפשרות למשתמש במעקב לקבל מידע בקריאה בלבד על קונטיינר המודעות לגבי סוגי הנתונים שמפורטים בקטע יכולות שלמעלה. ערכי ההחזרה מה-getters האלה יתואמו, במידת האפשר, לערכי ההחזרה של ה-Parcelable מה-getters הקיימים ב-View
ובתת-הסוגים שלו. אם מאגר המודעות נוצר באמצעות Jetpack Compose, הדבר חושף את המאפיינים הסמנטיים של המאגר. אפשר להשתמש בכיתה הזו כדי לחשב אירועי MRAID ו-OMID שקשורים לזמינות לצפייה.SessionObserverotifyAdContainerChanged()
: משמש כדי להודיע למשתמש בכל פעם שחל שינוי בזמינות הצפייה. הוא מעביר אובייקטAdContainerInfo
. הפונקציה הזו מופעלת בכל פעם שמזוהים אירועים שמשפיעים על סוגי הנתונים שמפורטים בקטע 'יכולות'. הערה: יכול להיות שיתבצע קריאה לשיטה הזו בנוסף לשיטות ב-Session. לדוגמה,Session.notifyResized()
נקרא כדי לבקש מ-SDK לשנות את גודל המודעה, וגםSessionObserver.notifyAdContainerChanged()
נקרא כשזה קורה.SessionObserverotifySessionClosed()
: הודעה למשתמש הצופה על סגירת הסשן.
שיפורים עתידיים
אם האפליקציה נפרצה, אפשר לשנות כל קוד שפועל בתהליך האפליקציה, כולל הקוד מהספרייה privacysandbox.ui.client. לכן, כל לוגיקה של איסוף אותות שפועלת בתהליך האפליקציה חשופה לזיוף על ידי קוד האפליקציה. הדבר חל גם על קוד SDK שנפרס לפני הזמינות של ארגז החול לפרטיות, שפועל בתהליך הבקשה. לכן, איסוף האותות על ידי ספריית ממשק המשתמש לא מחמיר את מצב האבטחה.
בנוסף, קוד בסביבת זמן הריצה של ה-SDK יכול להשתמש בממשק API של פלטפורמה שנקרא setTrustedPresentationCallback
, שיכול לספק לו ערבויות חזקות יותר מהמסגרת לגבי הצגת ממשק המשתמש של המודעה. setTrustedPresentationCallback
פועל ברמת ה-Surface, ויכול לעזור בהצהרות לגבי ה-Surface שמכיל את ממשק המשתמש של המודעה על ידי ציון ערכי סף מינימלי להצגה, כמו אחוז הפיקסלים הגלויים, הזמן במסך או קנה המידה. אפשר לבדוק את הנתונים האלה מול נתוני זמינות לצפייה שסופקו על ידי ספריית הלקוח של ממשק המשתמש, כפי שמוסבר למעלה. מכיוון שהנתונים שסופקו על ידי המסגרת מהימנים יותר, אפשר לבטל כל אירוע מספריית ממשק המשתמש שהנתונים שלו לא תואמים לנתונים מהמסגרת. לדוגמה, אם המאזין שסופק ל-setTrustedPresentationCallback
הופעל עם התראה על כך שאין פיקסלים של ממשק המשתמש של המודעה שמוצגים במסך, וספריית ממשק המשתמש של הלקוח מציגה מספר פיקסלים שגדול מאפס במסך, אפשר להשליך את הנתונים מהספרייה השנייה.
שאלות פתוחות
- אילו אותות של צפייה מעניינים אותך ולא מוזכרים במאמר הזה?
- ההצעה הנוכחית היא לעדכן את נתוני הניראות לפחות כל 200 אלפיות השנייה, בתנאי שיש שינוי רלוונטי בממשק המשתמש. האם התדירות הזו מקובלת עליך? אם לא, באיזו תדירות הכי נוח לך?
- האם אתם מעדיפים לנתח את המידע מ-
setTrustedPresentationCallback
בעצמכם, או שספריית ממשק המשתמש של הספק תסיר נתונים מספריית ממשק המשתמש של הלקוח אם הם לא תואמים לנתוניsetTrustedPresentationCallback
? - איך צורכים אותות של ניראות? כדי לעזור לנו להבין את התרחישים לדוגמה שלכם, תוכלו לשלוח משוב עם תשובות לשאלות האלה.