במכשירים עם Android מגרסה 13 ואילך, מערכת Android תומכת במספר פרופילים מופעלים (MEP) ל-eUICC. התכונה הזו מאפשרת למכשירים לתמוך ב-SIM כפול באמצעות שבב eSIM יחיד, שיכול להכיל כמה פרופילים של SIM ולהתחבר לשני ספקים שונים בו-זמנית. יצרני מכשירים צריכים לעבוד עם ספקי SoC וספקי ערכות שבבים של eSIM כדי לשלב את התכונה הזו במכשירים שלהם.
רקע
במכשירים עם Android 12 ומטה, מערכת AOSP מספקת תמיכה מוגבלת שמאפשרת ל-eSIM יחיד לתמוך בכמה פרופילים בו-זמנית. למרות החיסכון המשמעותי במקום ובעלויות ש-eSIM מציע, היעדר תמיכה בכרטיס SIM כפול מונע מיצרני מכשירים לאמץ מכשירים עם eSIM בלבד. כדי לספק תמיכה בכרטיס SIM כפול במכשיר עם כרטיס eSIM בלבד, יצרני המכשירים צריכים לארוז שני רכיבי eSIM במכשיר, מה שמגדיל את עלויות רשימת החומרים (BOM) ומוביל לחוויית משתמש לא טובה בניהול המינוי. התכונה MEP שזמינה ב-AOSP מגרסה Android 13 פותרת את הבעיה הזו.
ארכיטקטורת eUICC
בקטע הזה מתוארת ארכיטקטורת שבב ה-eSIM במכשירים עם MEP לגרסאות שונות של Android, וארכיטקטורת שבב ה-eSIM במכשירים ללא MEP.
Android 14
במכשירים עם Android מגרסה 14 ואילך, מערכת Android תומכת באפשרויות MEP-A1 ו-MEP-B לבחירת שורש תחום האבטחה של המנפיק (ISD-R) ולבחירת יציאות eSIM, כפי שמפורט ב-GSMA SGP V22 3.0. בהמשך מתוארים מודלים לבחירת ISD-R MEP-A1 ו-MEP-B:
MEP-A1: ISD-R נבחר ביציאה 0 (יציאת הפקודה היא 0) ופרופילים נבחרים ביציאות eSIM 1 ומעלה. פקודות ES10 תמיד נשלחות ליציאה 0, ויציאת הפקודה ויציאת היעד תמיד שונות. ה-LPA בוחר את היציאה.
איור 1. מודל בחירה של MEP-A1 ISD-R
MEP-B: ISD-R נבחר בכל יציאה, ואפשר להקצות פרופיל לכל יציאה. פקודות ההפעלה וההשבתה נשלחות ליציאה שבה צריך להפעיל או להשבית את הפרופיל (כאשר יש רענון בהמתנה). יציאת הפקודה ויציאת היעד תמיד זהות.
איור 2. מודל לבחירת ISD-R של MEP-B
Android 13
ב-Android מגרסה 13 ואילך, במכשירים שתומכים ב-MEP, חריץ ה-eSIM מכיל כמה יציאות eUICC, ובכל יציאה יכול להיות פרופיל מופעל. כפי שמוצג באיור 3, בארכיטקטורה הזו, כרטיס eUICC יחיד (חריץ פיזי יחיד) תומך ב-Dual SIM Dual Standby (DSDS) כי כל יציאת eUICC מקושרת לפס בסיס של מודם. HAL ו-API של Android 13 לא תלויים בווריאנט MEP.
איור 3. ארכיטקטורת שבב eSIM עם תמיכה ב-MEP (Android מגרסה 13 ואילך)
Android מגרסה 12 ומטה
במכשירים עם Android בגרסה 12 ומטה ללא MEP, כמו שמוצג באיור 4, חריץ ה-eSIM תומך רק בפרופיל מופעל אחד בכל פעם. המשמעות היא שהמכשיר לא תומך ב-DSDS.
איור 4. ארכיטקטורת שבב eSIM ללא תמיכה ב-MEP (Android 12 ומטה)
זרימת המידע של API עבור כמה פרופילים מופעלים
איור 5 מתאר את זרימת המידע של MEP עבור eUICC ב-Android 13. מסגרת הטלפוניה כוללת את המחלקה UiccPort, שמייצגת את המבנה הפיזי ב-eUICC. הסיווג UiccPort משמש לכל סוגי כרטיסי ה-SIM: כרטיס SIM פיזי (pSIM), כרטיס SIM משולב (iSIM) וכרטיס SIM מוטמע (eSIM). במקרה של eUICC עם כמה יציאות, אובייקט UiccSlot אחד ואובייקט UiccCard אחד ממופים לכמה מופעים של UiccPort. כל מופע של UiccPort יכול להיות מקושר למופע אחד לכל היותר של UiccProfile. התהליך הזה מאפשר ל-UiccPort להיות ממופה למשבצת לוגית, ול-UiccSlot (משבצת פיזית) להיות ממופה לכמה משבצות לוגיות.
איור 5. זרימת המידע ב-eUICC עם תמיכה ב-MEP
הטמעה
בקטע הזה מוסבר איך מטמיעים את התכונה MEP, כולל פרטים על דרישות HAL, ממשקי API וממשק משתמש. יצרני מכשירים צריכים לעבוד עם ספקי SoC וספקי ערכות שבבים של eSIM כדי לתמוך ב-MEP.
דרישות HAL
כדי לתמוך ב-MEP עבור eUICC, מטמיעים את ממשקי ה-API הבאים של IRadio AIDL HAL, שנמצאים ב-/platform/hardware/interfaces/radio/aidl/aidl_api.
במכשירים עם Android מגרסה 14 ואילך, צריך להשתמש בממשקי HAL בגרסה IRadio 2.1, שמשתמשים ב-MultipleEnabledProfileMode (מודל בחירת ISD-R שנתמך על ידי המודם או ה-eUICC) ומעבירים מידע על פקודת ES10 APDU במהלך פעולות של ערוץ לוגי ICC.
CardStatus
המודם צריך לתמוך ב-API CardStatus כתגובה ל-method getIccCardStatusResponse. התגובה צריכה לכלול את אינדקס היציאה ואת אינדקס החריץ הפיזי שצוינו על ידי SimPortSlotMapping.
במכשירים עם Android מגרסה 14 ואילך, המודם צריך לעבור את מצב ה-MEP הנתמך עם כל האירועים של CardStatus.
SimSlotStatus
המודם צריך לתמוך ב-API SimSlotStatus כתגובה ל-method getSimSlotsStatus. סטטוס חריץ ה-SIM כולל מערך של הממשק SimPortInfo, שכולל את אינדקס היציאה, את מספר ה-ICCID של הפרופיל המופעל ואת מצב היציאה. המודם צריך להחזיר לפחות שני אובייקטים של SimPortInfo.
במכשירים עם Android מגרסה 14 ואילך, המודם צריך לעבור את מצב ה-MEP הנתמך עם כל האירועים של CardStatus.
setSimSlotMapping
השיטה setSimSlotMapping חייבת להעביר מערך של SimPortSlotMapping. האינדקס של המערך הוא המשבצת הלוגית, וSimPortSlotMapping מציין את היציאה הממופה המתאימה ואת אינדקס המשבצת הפיזית. השיטה setSimSlotMapping מגדירה את המיפוי מיציאות לחריצים לוגיים. אפליקציית ה-LPA משתמשת בשיטה הזו כדי לבחור את היציאה הפעילה.
ממשקי API שתומכים ב-MEP ל-eUICC
מכשירי Android שתומכים במספר פרופילים מופעלים כחלק מחבילת הטלפוניה של AOSP, נדרשים לתמוך בממשקי ה-API הבאים.
UiccCardInfo
- (Android מגרסה 13 ואילך)
isMultipleEnabledProfilesSupported: מחזירה אם כרטיס ה-UICC הזה תומך ב-MEP. - (Android מגרסה 13 ומעלה)
getPorts: מחזירה את רשימת היציאות האפשריות ל-UICC מסוים. אם ה-UICC הוא pSIM או eSIM שלא תומך ב-MEP, הפונקציה מחזירה רשימה עם רכיב אחד. - (Deprecated)
getIccId: מחזירה ICCID. מכיוון של-UICC יכול להיות יותר מ-ICCID אחד למכשירים עם MEP, צריך להשתמש ב-UiccPortInfo.getIccId()במקום זאת.
(Android מגרסה 13 ואילך) UiccPortInfo
-
getIccId: הפונקציה מחזירה את מספר ה-ICCID אם יש מינוי פעיל ביציאה הזו. -
getPortIndex: מחזירה את אינדקס היציאה. -
getLogicalSlotIndex: מחזירה את האינדקס של מחסנית המודם הלוגית הפעילה.
SubscriptionInfo
- (Android מגרסה 13 ואילך)
getPortIndex: מחזירה את אינדקס היציאה שבו המינוי מופעל. אם המינוי מושבת, מוחזרINVALID_PORT_ID -1.
EuiccManager
-
switchToSubscription: מעבר למינוי נתון. ההרשאה הזו משמשת אפליקציות שאין להן הרשאת ספק במינויים פעילים. כשקוראים לפונקציה הזו, הפלטפורמה פותרת באופן פנימי את אינדקס היציאה באמצעות תיבת דו-שיח עם שלוש אפשרויות בחירה כדי להשבית את המינוי הפעיל שנבחר אם אין יציאות זמינות. באפליקציות שמטרגטות את Android 13 ואילך, אסור להשתמש ב-API הזה כדי להשבית מינוי באמצעות העברת מזהה מינוי לא תקין. במקום זאת, צריך להשתמש בשיטהswitchToSubscription(נוספה ב-Android 13) עם אינדקס היציאה שצוין. - (Android מגרסה 13 ואילך)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): מעבר למינוי נתון. אפליקציות לביצוע שיחות עם הרשאת ספק לגבי המינויים הפעילים יכולות לציין באיזה פורט להפעיל את המינוי. - (Android מגרסה 13 ואילך)
isSimPortAvailable: מחזירה אם אינדקס היציאה שמועבר זמין. פורט זמין אם לא מופעלת בו מינוי או אם לאפליקציית השיחות יש הרשאת ספק על המינוי שמותקן בפורט שנבחר.
EuiccService
- (Android מגרסה 13 ואילך)
onSwitchToSubscriptionWithPort: מעבר למינוי נתון ביציאה שצוינה. ההטמעה של LPA חייבת לתמוך בכך ב-Android מגרסה 13 ואילך.
TelephonyManager
- (Android מגרסה 13 ואילך)
getSimApplicationState: מחזירה קבוע שמציין את המצב של אפליקציית הכרטיס. ה-API הזה מעביר גם אינדקס של חריץ פיזי וגם אינדקס של יציאה. השיטהgetSimApplicationState(int physicalSlotIndex)(שיצאה משימוש) מעבירה רק את האינדקס של החריץ הפיזי כדי לקבל אובייקטsimApplicationState. - (Android מגרסה 13 ואילך)
setSimSlotMapping(Collection<UiccSlotMapping> slots): מיפוי של החריצים הלוגיים לחריצים ולחיבורים פיזיים. - (Android מגרסה 13 ואילך)
Collection<UiccSlotMapping> getSimSlotMapping: מקבל את המיפוי מחריצים לוגיים לחריצי SIM פיזיים ומאינדקסים של יציאות.
ממשק משתמש
כדי לפתור את הבעיה של בחירת מספר לניוד ב-eSIM, במכשירים שתומכים ב-MEP, המשתמשים צריכים להשבית אחד מהמינויים הפעילים כדי להפעיל מינוי חדש. ב-Android 13, AOSP כולל תהליך למשתמש עם תיבת דו-שיח עם שלוש אפשרויות שאפשר להחיל על תהליכים למשתמש להפעלת מינויים מתוך אפליקציית ההגדרות. באיור 6 מוצג תהליך לדוגמה של חוויית המשתמש.
איור 6. מסלול המשתמש באפליקציה להפעלת מינוי לכרטיס SIM
מתגי feature flag
כדי לתמוך ב-MEP, המכשירים צריכים להצהיר על דגלי התכונות הבאים:
הטמעה של LPA
כדי לתמוך ב-MEP, צריך לוודא שההטמעה של LPA עומדת בדרישות הבאות:
- מיישם את ממשקי ה-API מ-EuiccService כדי לתמוך בכמה יציאות.
- משתמש בממשקי API לבחירת יציאה ולהפעלת פרופיל.
- מספקת חוויית משתמש שמאפשרת לאפליקציות של ספקים להפעיל פרופילים ביציאות נבחרות.
אימות
כדי לבדוק את ההטמעה של התכונה MEP, צריך לוודא שה-builds עוברים את מקרי הבדיקה הבאים של CTS (עבור ממשקי API ציבוריים):
/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.
יצרני מכשירים צריכים גם לעבוד עם ספקי המודם, שבב ה-eUICC ומערכת ההפעלה של ה-eSIM כדי לוודא שהמכשיר יכול לבצע את הפעולות הבאות:
- אפשר להפעיל שני פרופילים של eSIM ולצרף אותם לשתי רשתות שונות.
- אפשר להפעיל ולהשבית פרופילים של eSIM בכל יציאת eSIM.
- יש תהליך UX שמופעל על ידי אפליקציית הספק ומאפשר למשתמשים לעבור בין פרופילים.
המלצה לחברות תובלה
כדי לוודא שהמשתמשים לא יאבדו את השירות כשהם מעבירים פרופילי eSIM מיציאה אחת לאחרת, מומלץ לספקי הסלולר לספק תמיכה בפעולות הבאות:
- מיפוי גמיש של IMEI ו-SIM
- כמה מספרי ICCID או כרטיסי SIM לכל מזהה eUICC (EID)