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

שליחת משוב

בזמן הריצה של ה-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 משתמש כדי לבקש מהאפליקציה להפעיל פעילויות.

תהליך ההשקה של פעילויות עם ספריות פעילות הוא כזה:

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

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

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

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

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

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

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

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

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

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

ניראות

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

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

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

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

מחזור חיים

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

ניווט חזרה

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