W przypadku urządzeń z Androidem 13 lub nowszym Android obsługuje wiele włączonych profili (MEP) dla eUICC. Ta funkcja umożliwia obsługę dual SIM na urządzeniach za pomocą jednego układu eSIM, który może mieć wiele profili SIM i może łączyć się z 2 różnymi operatorami jednocześnie. Producenci urządzeń muszą współpracować z dostawcami układów SoC i chipsetów eSIM, aby zintegrować tę funkcję na swoich urządzeniach.
Tło
Na urządzeniach z Androidem 12 i starszym AOSP zapewnia ograniczoną obsługę, która umożliwia jednoczesne korzystanie z wielu profili na jednej karcie eSIM. Mimo znacznych oszczędności miejsca i kosztów, jakie zapewnia eSIM, brak obsługi 2 kart SIM uniemożliwia producentom urządzeń wprowadzenie na rynek urządzeń obsługujących tylko eSIM. Aby zapewnić obsługę dual SIM na urządzeniu tylko z eSIM, producenci muszą umieścić w nim 2 elementy eSIM, co zwiększa koszty materiałów i prowadzi do pogorszenia komfortu użytkowników w zakresie zarządzania subskrypcjami. Funkcja MEP dostępna w AOSP od Androida 13 rozwiązuje ten problem.
Architektura eUICC
W tej sekcji opisujemy architekturę chipa eSIM w przypadku urządzeń z MEP na różnych wersjach Androida oraz architekturę chipa eSIM w przypadku urządzeń bez MEP.
Android 14
W przypadku urządzeń z Androidem 14 lub nowszym Android obsługuje opcje MEP-A1 i MEP-B do wyboru głównej domeny zabezpieczeń wydawcy (ISD-R) i portów eSIM zgodnie ze specyfikacją GSMA SGP V22 3.0. Poniżej opisujemy modele wyboru ISD-R MEP-A1 i MEP-B.
MEP-A1: ISD-R jest wybrana na porcie 0 (port poleceń to 0), a profile są wybrane na portach eSIM 1 i wyższych. Polecenia ES10 są zawsze wysyłane do portu 0, a port polecenia i port docelowy są zawsze różne. LPA wybiera port.
Rysunek 1. Model wyboru MEP-A1 ISD-R
MEP-B: ISD-R jest wybierany na dowolnym porcie i do dowolnego portu można przypisać profil. Polecenia włączania i wyłączania są wysyłane do portu, w którym profil ma zostać włączony lub wyłączony (w przypadku którego oczekuje się odświeżenia). Port poleceń i port docelowy są zawsze takie same.
Rysunek 2. Model wyboru MEP-B ISD-R
Android 13
Na urządzeniach z Androidem 13 lub nowszym, które obsługują MEP, gniazdo eSIM zawiera wiele portów eUICC, z których każdy może mieć włączony profil. Jak pokazano na rysunku 3, w tej architekturze pojedynczy moduł eUICC (jedno gniazdo fizyczne) obsługuje tryb Dual SIM Dual Standby (DSDS), ponieważ każdy port eUICC jest połączony z modemem. Interfejsy HAL i API Androida 13 są niezależne od wariantu MEP.
Ilustracja 3. Architektura układu eSIM z obsługą MEP (Android 13 lub nowszy)
Android 12 i starsze
W przypadku urządzeń z Androidem 12 lub starszym bez MEP, jak pokazano na rysunku 4, gniazdo eSIM obsługuje tylko jeden włączony profil naraz, a urządzenie nie obsługuje DSDS.
Rysunek 4. Architektura układu eSIM bez obsługi MEP (Android 12 lub starszy)
Przepływ informacji z interfejsu API w przypadku wielu włączonych profili
Rysunek 5 przedstawia przepływ informacji w przypadku MEP dla eUICC w Androidzie 13. Platforma telefoniczna zawiera klasę
UiccPort
, która reprezentuje fizyczną strukturę na karcie eUICC. Klasa
UiccPort
jest używana w przypadku wszystkich rodzajów kart SIM: fizycznych kart SIM (pSIM), zintegrowanych kart SIM (iSIM) i wbudowanych kart SIM (eSIM). W przypadku karty eUICC z wieloma portami pojedynczy obiekt UiccSlot
i obiekt UiccCard
są mapowane na wiele instancji UiccPort
. Każda instancja UiccPort
może być połączona z maksymalnie 1 instancją UiccProfile
. Ten proces umożliwia przypisanie UiccPort
do gniazda logicznego i UiccSlot
(gniazda fizycznego) do wielu gniazd logicznych.
Rysunek 5. Przepływ informacji w przypadku karty eUICC z obsługą MEP
Implementacja
W tej sekcji opisujemy, jak wdrożyć funkcję MEP, w tym wymagania dotyczące HAL, interfejsy API i interfejs użytkownika. Producenci urządzeń powinni współpracować z dostawcami układów SOC i chipsetów eSIM, aby obsługiwać MEP.
Wymagania dotyczące HAL
Aby obsługiwać MEP w przypadku eUICC, zaimplementuj te interfejsy API IRadio AIDL HAL, które znajdują się w /platform/hardware/interfaces/radio/aidl/aidl_api
.
Urządzenia z Androidem 14 lub nowszym muszą używać interfejsów HAL w wersji IRadio 2.1, które korzystają z MultipleEnabledProfileMode
(model wyboru ISD-R obsługiwany przez modem lub eUICC) i przekazują informacje o poleceniach APDU ES10 podczas operacji na kanałach logicznych karty ICC.
CardStatus
Modem musi obsługiwać interfejs API CardStatus
w odpowiedzi na metodę getIccCardStatusResponse
. Odpowiedź musi zawierać indeks portu i indeks gniazda fizycznego określony przez SimPortSlotMapping
.
W przypadku urządzeń z Androidem 14 lub nowszym modem musi przejść obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
SimSlotStatus
Modem musi obsługiwać interfejs API SimSlotStatus
w odpowiedzi na metodę getSimSlotsStatus
. Stan gniazda SIM zawiera tablicę interfejsu SimPortInfo
, która obejmuje indeks portu, identyfikator ICCID włączonego profilu i stan portu. Modem musi zwrócić co najmniej 2 obiekty SimPortInfo
.
W przypadku urządzeń z Androidem 14 lub nowszym modem musi przejść obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
setSimSlotMapping
Metoda
setSimSlotMapping
musi przekazywać tablicę elementów
SimPortSlotMapping
.
Indeks tablicy to gniazdo logiczne, a SimPortSlotMapping
określa odpowiedni zmapowany port i indeks gniazda fizycznego. Metoda setSimSlotMapping
ustawia mapowanie portów na gniazda logiczne. Aplikacja LPA używa tej metody do wybierania aktywnego portu.
Interfejsy API obsługujące MEP dla eUICC
Urządzenia z Androidem, które obsługują wiele włączonych profili w ramach stosu telefonicznego AOSP, muszą obsługiwać te interfejsy API:
UiccCardInfo
- (Android 13 lub nowszy)
isMultipleEnabledProfilesSupported
: zwraca informację, czy ta karta UICC obsługuje MEP. - (Android 13 lub nowszy)
getPorts
: Zwraca listę wszystkich możliwych portów dla danej karty UICC. Jeśli karta UICC to karta pSIM lub eSIM, która nie obsługuje MEP, zwraca listę z 1 elementem. - (Wycofano)
getIccId
: Zwraca identyfikator ICCID. Ponieważ karta UICC może mieć więcej niż jeden identyfikator ICCID w przypadku urządzeń z technologią MEP, użyjUiccPortInfo.getIccId()
.
(Android 13 i nowsze) UiccPortInfo
getIccId
: Zwraca numer ICCID, jeśli na tym porcie jest włączona subskrypcja.getPortIndex
: Zwraca indeks portu.getLogicalSlotIndex
: Zwraca aktywny indeks stosu logicznego modemu.
SubscriptionInfo
- (Android 13 lub nowszy)
getPortIndex
: Zwraca indeks portu, w którym włączona jest subskrypcja. Jeśli subskrypcja jest wyłączona, zwraca wartośćINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
: Przełącza na daną subskrypcję. Używane przez aplikacje, które nie mają uprawnień operatora w przypadku aktywnych subskrypcji. Gdy platforma jest wywoływana, wewnętrznie rozwiązuje indeks portu za pomocą okna dialogowego z 3 opcjami wyboru, aby wyłączyć wybraną aktywną subskrypcję, jeśli nie ma dostępnych portów. Aplikacje kierowane na Androida 13 lub nowszego nie mogą używać tego interfejsu API do wyłączania subskrypcji przez przekazywanie nieprawidłowego identyfikatora subskrypcji. Zamiast tego muszą używać metodyswitchToSubscription
(dodanej w Androidzie 13) ze wskazanym indeksem portu.- (Android 13 lub nowszy)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: przełącza się na daną subskrypcję. Aplikacje do dzwonienia z uprawnieniami operatora w zakresie aktywnych subskrypcji mogą określać, na którym porcie włączyć subskrypcję. - (Android 13 lub nowszy)
isSimPortAvailable
: Zwraca informację o tym, czy przekazany indeks portu jest dostępny. Port jest dostępny, jeśli nie ma włączonej subskrypcji lub aplikacja do dzwonienia ma uprawnienia operatora w zakresie subskrypcji zainstalowanej na wybranym porcie.
EuiccService
- (Android 13 lub nowszy)
onSwitchToSubscriptionWithPort
: przełącza się na daną subskrypcję na określonym porcie. Implementacja LPA musi obsługiwać tę funkcję na Androidzie 13 i nowszym.
TelephonyManager
- (Android 13 i nowszy)
getSimApplicationState
: Zwraca stałą wskazującą stan aplikacji karty. Ten interfejs API przekazuje zarówno indeks gniazda fizycznego, jak i indeks portu. MetodagetSimApplicationState(int physicalSlotIndex)
(przestarzała) przekazuje tylko indeks gniazda fizycznego, aby uzyskać obiektsimApplicationState
. - (Android 13 i nowszy)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Mapuje gniazda logiczne na gniazda fizyczne i porty. - (Android 13 lub nowszy)
Collection<UiccSlotMapping> getSimSlotMapping
: Pobiera mapowanie z logicznych gniazd na fizyczne gniazda SIM i indeksy portów.
Interfejs użytkownika
Aby rozwiązać problem z niejednoznacznym wyborem portu eSIM, na urządzeniach obsługujących MEP użytkownicy muszą mieć możliwość wyłączenia jednej z aktywnych subskrypcji, aby włączyć nową subskrypcję. W Androidzie 13 AOSP zawiera proces użytkownika z oknem z 3 opcjami, które można zastosować do procesów użytkownika związanych z włączaniem subskrypcji w aplikacji Ustawienia. Rysunek 6 przedstawia przykład tego procesu UX.
Rysunek 6. Wzorzec przeglądania umożliwiający włączenie subskrypcji SIM
Flagi funkcji
Aby obsługiwać MEP, urządzenia muszą deklarować te flagi funkcji:
Implementacja LPA
Aby obsługiwać MEP, upewnij się, że implementacja LPA spełnia te wymagania:
- Implementuje interfejsy API z EuiccService do obsługi wielu portów.
- Korzysta z interfejsów API do wybierania portów i włączania profili.
- Umożliwia aplikacjom operatorów włączanie profili na wybranych portach.
Weryfikacja
Aby przetestować implementację funkcji MEP, upewnij się, że kompilacje przechodzą te testy CTS (w przypadku publicznych interfejsów API):
/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
Producenci urządzeń powinni też współpracować z dostawcami modemów, układów eUICC i systemów operacyjnych eSIM, aby mieć pewność, że urządzenie może wykonywać te czynności:
- Możesz włączyć 2 profile eSIM i połączyć je z 2 różnymi sieciami.
- Profile eSIM można aktywować i dezaktywować na dowolnym porcie eSIM.
- Aplikacja operatora wywołuje proces UX, który umożliwia użytkownikom przełączanie profili.
Zalecenia dla przewoźników
Aby użytkownicy nie tracili dostępu do usług podczas przenoszenia profili eSIM z jednego portu na drugi, zalecamy operatorom zapewnienie obsługi tych funkcji:
- Płynne mapowanie numerów IMEI i SIM
- Wiele identyfikatorów ICCID lub kart SIM dla każdego identyfikatora eUICC (EID)