הצעה לעיצוב ניראות בזמן ריצה ל-SDK

ערכות SDK של מודעות בזמן הריצה של ה-SDK לא יכולות לגשת להיררכיית התצוגות של בעל האפליקציה. במקום זאת, לערכות SDK בזמן הריצה יש תצוגות משלהן. לא ניתן להשתמש ב-SDK לצפות בממשקי API שבהם נעשה שימוש מחוץ לזמן הריצה של ה-SDK כדי לקבוע אם המודעה גלויות למשתמש, כי תצוגת המודעה לא מצורפת לקובץ חלון. הבעיה הזו כוללת ממשקי API של תצוגה ב-Android, כמו getLocationOnScreen,‏ getLocationInWindow או getVisibility, שלא מחזירים את הערכים הצפויים.

תמיכה במדידת הניראות של מודעות היא אחת הדרישות המרכזיות של זמן הריצה ל-SDK. מטרת הצעת העיצוב הזו היא לספק תמיכה ב-Open Measurement ובשירותי מדידה דומים. הפתרונות שמתוארים כאן עשויים להיות רלוונטיים גם לממשקי API לדיווח על שיוך (Attribution). נשמח לקבל ממך משוב על ההצעה הזו.

יכולות

המטרה של העיצוב הזה היא לאפשר ל-SDK של מודעות או לשותפי מדידה לחשב את נתוני הניראות הבאים (השמות הם זמניים ועשויים להשתנות):

איור שמראה איך הרכיבים של מידת הניראות בזמן ריצה של SDK פועלים באופן הדדי
סקירה כללית על זמן ריצה ל-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 הופעלה עם התראה שלפיה אין פיקסלים של ממשק המשתמש של המודעה מוצגים במסך, וספריית ממשק המשתמש של הלקוח מציגה מספר פיקסלים שאינו אפס במסך, ניתן למחוק נתונים מהשני.

שאלות פתוחות

אנחנו מזמינים אתכם לשלוח משוב לגבי הנושאים הבאים:

  1. אילו אותות של צפייה מעניינים אותך ולא מוזכרים במאמר הזה?
  2. ההצעה הנוכחית היא לעדכן את ניראות המודעות בתדירות נמוכה יותר מכל 200 אלפיות השנייה, בתנאי שיתבצע שינוי רלוונטי בממשק המשתמש. האם זה התדירות מקובלת עליך? אם לא, באיזו תדירות היית רוצה להשתמש?
  3. האם אתם מעדיפים לנתח את המידע מ-setTrustedPresentationCallback בעצמכם, או שספריית ממשק המשתמש של הספק תסיר נתונים מספריית ממשק המשתמש של הלקוח אם הם לא תואמים לנתוני setTrustedPresentationCallback?
  4. איך משתמשים באותות ניראות? כדי לעזור לנו להבין את תרחישי השימוש שלכם, תוכלו לשלוח משוב עם תשובות לשאלות האלה.