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