זמן הריצה ל-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 הבאים:
-
SdkActivityLauncher: מפעיל הפעילות מאפשר לערכות SDK לטפל בהפעלת פעילויות מאפליקציית הלקוח. אפליקציות לקוח צריכות ליצור מפעיל ולהעביר אותו כפרמטר לממשקי ה-API של ה-SDK שמפעילים פעילויות. -
<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): פונקציית הרחבה שאפליקציית הלקוח יכולה להפעיל מהפעילויות שלה כדי ליצור משגרים. -
SdkActivityLauncher.launchSdkActivity(IBinder): שיטה שבה ה-SDK משתמש כדי לבקש מהאפליקציה להפעיל פעילויות.
תהליך ההפעלה של פעילויות באמצעות ספריות פעילויות הוא כזה:
- ערכת ה-SDK מוסיפה פרמטר מהסוג
SdkActivityLauncherלכל ממשקי ה-API שיפעילו פעילויות. - אפליקציית הלקוח קוראת ל-
createSdkActivityLauncherבאחת מהפעילויות שלה כדי ליצור launcher שאפשר להעביר ל-SDK בקריאות ל-API. - ערכת ה-SDK שולחת קריאה אל
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)ומאחזרת את טוקן המזהה. - ה-SDK קורא ל-
launchSdkActivityכדי להפעיל את הפעילות.
בתרשים הבא מוצג התהליך במקרה של שימוש בספריות פעילות.
ממשקי API של הפלטפורמה
הפלטפורמה מציגה את ממשקי ה-API הבאים כדי להקל על היצירה והניהול של פעילויות בסביבת ארגז חול ב-SDK Runtime:
-
SdkSandboxActivityHandler: ה-Activity Handler משמש להודעה ל-SDK כשנוצרת פעילות, והוא נרשם על ידי ה-SDK. - כדי לעזור ברישום של Activity Handlers, ה-SDK יכול להשתמש בשיטות הבאות בקטע
SdkSandboxController:-
.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler): רושם מופע שלSdkSandboxActivityHandler, ומחזיר מזההIBinder. -
.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler): מבטל את הרישום של מופע רשום שלSdkSandboxActivityHandlerבאמצעות המזהה שלו.
-
-
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): השיטה הזו מופעלת מאפליקציית הלקוח וגורמת ליצירת פעילויות עבור ה-SDK. אפליקציית הלקוח צריכה להעביר כפרמטרים את הפעילות ההתחלתית שנבחרה ואת מזהה Activity Handler של ה-SDK.
כדי להתחיל פעילות באמצעות ממשקי ה-API של הפלטפורמה, ערכות ה-SDK צריכות לפעול לפי התהליך הבא:
- ה-SDK רושם את handler הפעילות באמצעות ממשקי ה-API שסופקו ומקבל מזהה.
- ערכת ה-SDK משתפת את המזהה הזה עם אפליקציית הלקוח שלה.
- אפליקציית הלקוח קוראת לשיטה כדי להתחיל פעילות בסביבת הריצה של ה-SDK באמצעות ה-API של הפלטפורמה
startSdkSandboxActivity(Activity, IBinder), ומעבירה כפרמטרים את הפעילות ההתחלתית שנבחרה לפעילות החדשה הזו ואת המזהה של Activity Handler. - הפלטפורמה מתחילה פעילות, ומודיעה ל-SDK באמצעות קריאה חוזרת (callback) ב-Activity Handler (
SdkSandboxActivityHandler.onActivityCreated(Activity)). - ה-SDK משתמש בפעילות כדי לאכלס אותה במודעה.
שימוש בממשקי API של הפלטפורמה מאפשר ל-SDK לשתף את המזהה של SdkSandboxActivityHandler עם אפליקציית הלקוח דרך ממשקי ה-API שלה בזמן המתאים, ולהנחות את אפליקציות הלקוח לגבי אופן השימוש בו.
בתרשים הזרימה הבא, ל-SDK לדוגמה יש מתודה launchActivity(AppCallback) שמצפה לקריאה חוזרת (מוגדרת כחלק מה-API של ה-SDK). הקריאה החוזרת הזו משמשת את ה-SDK לשיתוף המזהה של Activity Handler (SdkSandboxActivityHandler) עם אפליקציית הלקוח.
ניראות
בזמן הריצה ל-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
לטיפול בניווט אחורה.