ערכות SDK של מודעות בזמן הריצה של ה-SDK לא יכולות לגשת להיררכיית התצוגות של בעל האפליקציה.
במקום זאת, לערכות SDK בזמן הריצה יש תצוגות משלהן. לא ניתן להשתמש ב-SDK
לצפות בממשקי API שבהם נעשה שימוש מחוץ לזמן הריצה של ה-SDK כדי לקבוע אם המודעה
גלויות למשתמש, כי תצוגת המודעה לא מצורפת לקובץ
חלון. הבעיה הזו כוללת ממשקי API של תצוגה ב-Android, כמו getLocationOnScreen
, getLocationInWindow
או getVisibility
, שלא מחזירים את הערכים הצפויים.
תמיכה במדידת הניראות של מודעות היא אחת הדרישות המרכזיות של זמן הריצה ל-SDK. מטרת הצעת העיצוב הזו היא לספק תמיכה ב-Open Measurement ובשירותי מדידה דומים. הפתרונות שמתוארים כאן עשויים להיות רלוונטיים גם לממשקי API לדיווח על שיוך (Attribution). נשמח לקבל ממך משוב על ההצעה הזו.
יכולות
המטרה של העיצוב הזה היא לאפשר ל-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 שמאפשרות למשתמש במעקב לקבל מידע בקריאה בלבד על קונטיינר המודעות לגבי סוגי הנתונים שמפורטים בקטע יכולות שלמעלה. הערכים המוחזרים מהגורמים האלה שתואמים, ככל האפשר, לערכי ההחזרה של מגרשים מה קיים ב-View
ובמחלקות המשנה שלו. אם מאגר המודעות נוצר באמצעות 'Jetpack פיתוח נייטיב', הוא חושף את המאפיינים הסמנטיים של הקונטיינר. הזה ניתן להשתמש ב-class כדי לחשב אירועי MRAID ו-OMID שקשורים לניראות.SessionObserverotifyAdContainerChanged()
: משמש כדי להודיע למשתמש בכל פעם שחל שינוי בזמינות הצפייה. היא מעבירה אובייקטAdContainerInfo
. הפונקציה הזו מופעלת בכל פעם שמזוהים אירועים שמשפיעים על סוגי הנתונים שמפורטים בקטע 'יכולות'. הערה: ייתכן שהשיטה הזו נקראת בנוסף ל-methods בסשן. לדוגמה,Session.notifyResized()
נקרא כדי לבקש מ-SDK לשנות את גודל המודעה, וגםSessionObserver.notifyAdContainerChanged()
נקרא כשזה קורה.SessionObserverotifySessionClosed()
: התראה לצופה הסשן נסגר.
שיפורים עתידיים
אם האפליקציה נפרצה, אפשר לשנות כל קוד שפועל בתהליך האפליקציה, כולל הקוד מהספרייה privacysandbox.ui.client. לכן, כל לוגיקה של איסוף אותות שפועלת בתהליך האפליקציה חשופה לזיוף על ידי קוד האפליקציה. הדבר חל גם על קוד SDK שנפרס לפני הזמינות של ארגז החול לפרטיות, שפועל בתהליך הבקשה. כתוצאה מכך, איסוף האותות על ידי ספריית ממשק המשתמש לא מתבצע להחמיר את המצב הביטחוני.
בנוסף, הקוד בזמן הריצה של ה-SDK יכול להשתמש ב-API של פלטפורמה שנקרא
setTrustedPresentationCallback
שיכול להעניק לה אחריות טובה יותר
את המסגרת על הצגת ממשק המשתמש של המודעות. setTrustedPresentationCallback
פועל ברמת ה-Surface, ויכול לעזור בהצהרות לגבי ה-Surface שמכיל את ממשק המשתמש של המודעה על ידי ציון ערכי סף מינימלי להצגה, כמו אחוז הפיקסלים הגלויים, הזמן במסך או קנה המידה. אפשר לבדוק את הנתונים האלה מול נתוני זמינות לצפייה שסופקו על ידי ספריית הלקוח של ממשק המשתמש, כפי שמוסבר למעלה. הנתונים שסופקו על ידי ה-framework מהימנים יותר, לכן כל האירועים
ספריית ממשק משתמש שהנתונים לא תואמים לנתונים מה-framework יכולה להיות
נמחקו. לדוגמה, אם המאזינים סיפקו
האפליקציה setTrustedPresentationCallback
הופעלה עם התראה שלפיה אין פיקסלים
של ממשק המשתמש של המודעה מוצגים במסך, וספריית ממשק המשתמש של הלקוח מציגה
מספר פיקסלים שאינו אפס במסך, ניתן למחוק נתונים מהשני.
שאלות פתוחות
אנחנו מזמינים אתכם לשלוח משוב לגבי הנושאים הבאים:
- אילו אותות של צפייה מעניינים אותך ולא מוזכרים במאמר הזה?
- ההצעה הנוכחית היא לעדכן את ניראות המודעות בתדירות נמוכה יותר מכל 200 אלפיות השנייה, בתנאי שיתבצע שינוי רלוונטי בממשק המשתמש. האם זה התדירות מקובלת עליך? אם לא, באיזו תדירות היית רוצה להשתמש?
- האם אתם מעדיפים לנתח את המידע מ-
setTrustedPresentationCallback
בעצמכם, או שספריית ממשק המשתמש של הספק תסיר נתונים מספריית ממשק המשתמש של הלקוח אם הם לא תואמים לנתוניsetTrustedPresentationCallback
? - איך משתמשים באותות ניראות? כדי לעזור לנו להבין את תרחישי השימוש שלכם, תוכלו לשלוח משוב עם תשובות לשאלות האלה.