תמיכה בפעילות במודעות במסך מלא

זמן הריצה ל-SDK מטיל הגבלות על האופן שבו ערכות SDK יכולות להפעיל פעילויות חדשות. הדבר יוצר בעיה בפורמטים של מודעות במסך מלא, שמסתמכים בדרך כלל על הפעלה של פעילות נפרדת כדי לשפר את השליטה ואת חוויית המשתמש. כדי לפתור את הבעיה הזו, אנחנו מציגים ב-SDK Runtime מנגנון חדש לפעילויות בארגז חול.

ערכות SDK שנטענות בסביבת זמן הריצה ל-SDK לא יכולות להגדיר ישירות תגי <activity> במניפסט שלהן או ליזום פעילויות משלהן. במקום זאת, מוצגת פעולת כוונה חדשה, START_SANDBOXED_ACTIVITY.

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

לאחר מכן, ה-SDK יכול להשתמש בפעילות הזו כדי להטמיע ולנהל את חוויית השימוש במודעה במסך מלא.

הפעילות שמסופקת על ידי הפלטפורמה היא android.app.Activity סטנדרטית, שהופעלה כחלק מהמשימה של אפליקציית הלקוח.

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

יש שתי שיטות עיקריות ליצירת פעילויות: שימוש בספריות הפעילות היעילות של Jetpack או אינטראקציה ישירה עם ממשקי Platform API.

מומלץ להשתמש בספריות של פעילויות, כי הן מפשטות את יצירת הפעילויות על ידי הפשטה של המורכבות הבסיסית.

ספריות פעילויות

ספריות פעילויות מספקות כמה יתרונות:

  • הפשטה של הפרטים הפנימיים של רישום מטפלי פעילות ושיתוף המזהים שלהם עם אפליקציות לקוח.
  • התכונה הזו מאפשרת למפתחי אפליקציות לשלוט טוב יותר באופן שבו ערכות SDK יוצרות פעילויות באפליקציות שלהם, על ידי הגדרת תנאים (פרדיקטים) שצריכים להתקיים.
  • ליצור דרך אחידה לערכות SDK להגדיר ממשקי API שמפעילים פעילויות.

יש שלוש ספריות פעילות: ליבה, לקוח וספק.

  • ספריית הליבה מספקת את הממשקים שבהם משתמשים אפליקציות לקוח וספריות של ספקים.
  • ספריית הספק מספקת ממשקי API לערכות SDK להפעלת פעילויות.
  • ספריית הלקוח מספקת ממשקי API לאפליקציות לקוח כדי ליצור כלי להפעלת פעילויות, שערכות SDK יכולות להשתמש בו כדי לבקש מאפליקציות להפעיל פעילויות.

הספריות האלה מציגות את ממשקי ה-API הבאים:

תהליך ההפעלה של פעילויות באמצעות ספריות פעילויות הוא כזה:

  1. ערכת ה-SDK מוסיפה פרמטר מהסוג SdkActivityLauncher לכל ממשקי ה-API שיפעילו פעילויות.
  2. אפליקציית הלקוח קוראת ל-createSdkActivityLauncher באחת מהפעילויות שלה כדי ליצור launcher שאפשר להעביר ל-SDK בקריאות ל-API.
  3. ערכת ה-SDK שולחת קריאה אל SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) ומאחזרת את טוקן המזהה.
  4. ה-SDK קורא ל-launchSdkActivity כדי להפעיל את הפעילות.

בתרשים הבא מוצג התהליך במקרה של שימוש בספריות פעילות.

דיאגרמת רצף של ספריית פעילויות
תרשים רצף שמציג את תהליך הפעלת פעילות באמצעות ספריות פעילות.

ממשקי API של הפלטפורמה

הפלטפורמה מציגה את ממשקי ה-API הבאים כדי להקל על היצירה והניהול של פעילויות בסביבת ארגז חול ב-SDK Runtime:

כדי להתחיל פעילות באמצעות ממשקי ה-API של הפלטפורמה, ערכות ה-SDK צריכות לפעול לפי התהליך הבא:

  1. ה-SDK רושם את handler הפעילות באמצעות ממשקי ה-API שסופקו ומקבל מזהה.
  2. ערכת ה-SDK משתפת את המזהה הזה עם אפליקציית הלקוח שלה.
  3. אפליקציית הלקוח קוראת לשיטה כדי להתחיל פעילות בסביבת הריצה של ה-SDK באמצעות ה-API של הפלטפורמה startSdkSandboxActivity(Activity, IBinder), ומעבירה כפרמטרים את הפעילות ההתחלתית שנבחרה לפעילות החדשה הזו ואת המזהה של Activity Handler.
  4. הפלטפורמה מתחילה פעילות, ומודיעה ל-SDK באמצעות קריאה חוזרת (callback) ב-Activity Handler‏ (SdkSandboxActivityHandler.onActivityCreated(Activity)).
  5. ה-SDK משתמש בפעילות כדי לאכלס אותה במודעה.

שימוש בממשקי API של הפלטפורמה מאפשר ל-SDK לשתף את המזהה של SdkSandboxActivityHandler עם אפליקציית הלקוח דרך ממשקי ה-API שלה בזמן המתאים, ולהנחות את אפליקציות הלקוח לגבי אופן השימוש בו.

בתרשים הזרימה הבא, ל-SDK לדוגמה יש מתודה launchActivity(AppCallback) שמצפה לקריאה חוזרת (מוגדרת כחלק מה-API של ה-SDK). הקריאה החוזרת הזו משמשת את ה-SDK לשיתוף המזהה של Activity Handler ‏ (SdkSandboxActivityHandler) עם אפליקציית הלקוח.

דיאגרמת רצף של ממשקי API של פלטפורמה
תרשים רצף שמציג את תהליך הפעלת פעילות באמצעות ממשקי API של הפלטפורמה.

ניראות

בזמן הריצה ל-SDK, מודעות שמשולבות בהיררכיית התצוגה של אפליקציית הלקוח משתמשות בערוצים צדדיים כדי לעבד תצוגות SDK מתהליך ה-SDK לתהליך של אפליקציית הלקוח.

ערכת ה-SDK לא יכולה להשתמש באותם ממשקי API של View שהיא משתמשת בהם מחוץ לזמן הריצה של ה-SDK כדי לקבוע אם המודעה גלויה למשתמש, כי תצוגת המודעה לא מצורפת לחלון של האפליקציה (Viewability).

לעומת זאת, הפעילות שסופקה על ידי הפלטפורמה פועלת באופן מקורי בתהליך של זמן הריצה ל-SDK, כך שאין צורך בערוצים צדדיים וערכות ה-SDK יכולות להשתמש בממשקי API רגילים של Android‏ Activity ו-View.

בגלל ההטמעות השונות האלה, אנחנו פועלים כדי לאחד את הממשקים לאחזור אותות הנראות, בלי קשר להקשר של טעינת המודעות.

מחזור חיים

הפרמטר ActivityHolder שמועבר ל-SDK דרך SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) מטמיע את LifecycleOwner ואפשר להשתמש בו כדי לקבל מידע על Lifecycle.Event.

חזרה לדף הקודם

השיטה ActivityHolder.getOnBackPressedDispatcher() מחזירה OnBackPressedDispatcher שאפשר להשתמש בה כדי לרשום מופעים של OnBackPressedCallback לטיפול בניווט אחורה.