בזמן הריצה של ה-SDK יש הגבלות על האופן שבו ערכות ה-SDK יכולות להשיק פעילויות חדשות. הדבר מהווה אתגר לפורמטים של מודעות במסך מלא, שבדרך כלל מסתמכים על התחלת פעילות נפרדת כדי לשפר את השליטה ואת חוויית המשתמש. כדי לפתור את הבעיה הזו, זמן הריצה של ה-SDK כולל מנגנון חדשני לפעילויות בארגז חול.
ערכות SDK שנטענות בתוך סביבת זמן הריצה של ה-SDK לא יכולות להגדיר תגי <activity>
ישירות במניפסט או ליזום פעילויות משלהן.
במקום זאת, אנחנו משיקים פעולת Intent חדשה, START_SANDBOXED_ACTIVITY
.
בעוד שערכות SDK מוגבלות גם להפעלת Intents עם הפעולה הזו, ערכות SDK יכולות לבקש מאפליקציית הלקוח להפעיל את הכוונה הזו. לאחר מכן המערכת יוצרת פעילות שמוגדרת בפלטפורמה ומעבירה אותה ל-SDK. הפעילות הזו תרוץ ב- זהה לתהליך בערכת ה-SDK.
לאחר מכן, ערכת ה-SDK יכולה להשתמש בפעילות הזו כדי להטמיע ולנהל את המודעה במסך מלא חוויה אישית.
הפעילות שמסופקת על ידי הפלטפורמה היא android.app.Activity
רגיל,
הושק כחלק מהמשימה של אפליקציית הלקוח.
יצירת פעילות בזמן הריצה של ה-SDK
יש שתי שיטות עיקריות ליצירת פעילויות: שימוש בספריות הפעילות של Jetpack ביעילות או אינטראקציה ישירה עם ממשקי API של Platform.
מומלץ להשתמש בספריות פעילות, כי הן מפשטות את יצירת הפעילויות על ידי הפשטה של המורכבות הבסיסית.
ספריות פעילות
פעילות ספריות מספקות יתרונות:
- תקציר של הפרטים הפנימיים של רישום handlers של פעילות ושיתוף המזהים שלהם עם אפליקציות לקוח.
- נותנים למפתחי האפליקציות שליטה רבה יותר על האופן שבו ערכות 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
באחת מהפעילויות שלו כדי ליצור מרכז אפליקציות שניתן להעביר ל-SDK בקריאות ל-API. - הקריאות ל-SDK
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
ומאחזר את האסימון המזהה. - הקריאות ל-SDK
launchSdkActivity
כדי להתחיל את הפעילות.
בתרשים הבא מוצג הזרימה במקרה של שימוש בספריות פעילות.
ממשקי API של הפלטפורמה
הפלטפורמה מציגה את ממשקי ה-API הבאים כדי לאפשר יצירה ניהול פעילויות בארגז החול בתוך זמן הריצה של ה-SDK:
SdkSandboxActivityHandler
: מטפל הפעילות משמש כדי להודיע ל-SDK כשפעילות נוצרת והוא נרשם על ידי ה-SDK.- כדי לעזור ברישום של מטפלי פעילות, ה-SDK יכול להשתמש בשיטות הבאות בקטע
SdkSandboxController
:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: רושם מופע שלSdkSandboxActivityHandler
, שמחזיר את המזההIBinder
..unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: מבטל רישום של מופע רשום שלSdkSandboxActivityHandler
באמצעות המזהה שלו.
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: השיטה הזו מופעלת מאפליקציית הלקוח. היא מפעילה את היצירה של פעילויות בשביל ה-SDK. אפליקציית הלקוח צריכה להעביר כפרמטרים את פעילות ההתחלה שנבחרה ואת מזהה מטפל הפעילות של ה-SDK.
כדי להתחיל פעילות באמצעות ממשקי ה-API של הפלטפורמה, ערכות ה-SDK צריכות לפעול לפי התהליך הבא:
- ערכת ה-SDK רושמת את הגורם המטפל בפעילות באמצעות ממשקי ה-API שסופקו, ומקבלת מזהה.
- מזהה ה-SDK משתף את המזהה הזה עם אפליקציית הלקוח שלו.
- אפליקציית הלקוח מפעילה את השיטה כדי להתחיל פעילות בזמן הריצה של ה-SDK באמצעות ה-API של הפלטפורמה
startSdkSandboxActivity(Activity, IBinder)
, ומעבירה כפרמטרים את פעילות ההתחלה שנבחרה לפעילות החדשה הזו ואת המזהה של מטפל הפעילות. - הפלטפורמה מתחילה פעילות ומודיעה ל-SDK על ידי קריאה חוזרת (callback) ב-handler של הפעילות (
SdkSandboxActivityHandler.onActivityCreated(Activity)
). - ערכת ה-SDK משתמשת בפעילות כדי לאכלס אותה במודעה.
השימוש בממשקי API הופך את ה-SDK לאחראי לשתף את של SdkSandboxActivityHandler מזהה עם אפליקציית הלקוח באמצעות ממשקי ה-API שלה בזמן המתאים, וכן ידריך אפליקציות לקוח איך להשתמש בהן.
בתרשים הזרימה הבא, ל-SDK לדוגמה יש שיטה launchActivity(AppCallback)
שמצפה ל
קריאה חוזרת (callback) (מוגדרת כחלק מה-API של ה-SDK). הקריאה החוזרת (callback) הזו משמשת את
SDK לשיתוף של מטפל הפעילויות (SdkSandboxActivityHandler
)
מזהה עם אפליקציית הלקוח.
ניראות
בזמן הריצה ל-SDK, מודעות שמשולבות בהיררכיית התצוגות של אפליקציית הלקוח משתמשות בצד הערוצים כדי לעבד תצוגות SDK מתהליך ה-SDK לתהליך של אפליקציית הלקוח.
ל-SDK לא ניתן להשתמש באותם ממשקי API של תצוגה מפורטת שבהם נעשה שימוש מחוץ לזמן הריצה של ה-SDK כדי לקבוע אם המודעה גלויה למשתמש, כי הצפייה במודעה לא מצורף לחלון של האפליקציה (ניראות).
לעומת זאת, הפעילות שמסופקת על ידי הפלטפורמה פועלת בתוך תהליך זמן הריצה של ה-SDK, וכך לא צריך יותר ערוצים צדדיים ומאפשרת לערכות ה-SDK להשתמש בממשקי API סטנדרטיים של Activity
ו-View
ל-Android.
לאור היישומים השונים האלו, המאמצים המתמשכים שלנו נועדו לאחד ממשקים לאחזור אותות הניראות, ללא קשר להקשר של טעינת המודעות.
מחזור חיים
ActivityHolder
מועברים ל-SDK באמצעות
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
יכול להטמיע
LifecycleOwner
ואפשר להשתמש בו כדי לדעת
Lifecycle.Event
.
ניווט חזרה
השיטה
ActivityHolder.getOnBackPressedDispatcher()
החזרות
OnBackPressedDispatcher
שאפשר להשתמש בו כדי לרשום
OnBackPressedCallback
כדי לטפל בניווט חזרה.