Na urządzeniach z Androidem 13 lub nowszym Android obsługuje wiele włączonych profili (MEP) dla eUICC. Ta funkcja umożliwia urządzeniom obsługę dwóch kart SIM za pomocą jednego układu eSIM, który może mieć wiele profili kart SIM i może łączyć się z dwoma różnymi operatorami jednocześnie. Producenci urządzeń muszą współpracować z dostawcami układów SoC i układów eSIM, aby zintegrować tę funkcję na swoich urządzeniach.
Tło
Na urządzeniach z Androidem 12 lub starszym AOSP zapewnia ograniczone wsparcie, które umożliwia korzystanie z jednego profilu eSIM naraz. Pomimo znacznych oszczędności miejsca i kosztów, jakie oferuje eSIM, brak obsługi karty SIM Dual SIM uniemożliwia producentom urządzeń korzystanie z urządzeń obsługujących tylko eSIM. Aby zapewnić obsługę 2 kart SIM w urządzeniu obsługującym tylko eSIM, producenci muszą umieścić w urządzeniu 2 elementy eSIM, co zwiększa koszty materiałów (BOM) i zmniejsza wygodę użytkowników związanych z zarządzaniem subskrypcjami. Funkcja MEP dostępna w AOSP na Androidzie 13 rozwiązuje ten problem.
Architektura eUICC
W tej sekcji opisujemy architekturę układu eSIM w przypadku urządzeń z technologią MEP w różnych wersjach Androida oraz architekturę z układem eSIM w przypadku urządzeń bez MEP.
Android 14
Na urządzeniach z Androidem 14 lub nowszym Android obsługuje opcje MEP-A1 i MEP-B do wyboru głównego katalogu zabezpieczeń wystawcy (ISD-R) oraz opcje wyboru portów eSIM zgodnie ze specyfikacją GSMA SGP V22 3.0. Poniżej opisujemy modele wyboru MEP-A1 i MEP-B ISD-R.
MEP-A1: wybrany jest format ISD-R na porcie 0 (port poleceń to 0), a profile – na portach eSIM 1 i wyższych. Polecenia ES10 są zawsze wysyłane na port 0, a port polecenia i port docelowy są zawsze różne. LPA wybiera port.
Rysunek 1. Model wyboru MEP-A1 ISD-R
MEP-B: na dowolnym porcie wybrano ISD-R i dowolny port może mieć przypisany profil. Polecenia włączania i wyłączania są wysyłane do portu, w którym profil musi zostać włączony lub wyłączony (gdzie oczekuje odświeżanie). Port poleceń i port docelowy są zawsze takie same.
Rysunek 2. Model wyboru MEP-B ISD-R
Android 13
W Androidzie 13 lub nowszym na urządzeniach obsługujących MEP, gniazdo eSIM zawiera kilka portów eUICC, z których każdy może mieć włączony profil. Jak widać na rys. 3 w tej architekturze, pojedyncze gniazdo eUICC (pojedyncze fizyczne gniazdo) obsługuje DSDS (dual SIM dual Standby), ponieważ każdy port eUICC łączy się z pasmem podstawowym modemu. HAL i interfejsy API Androida 13 są niezależne od wersji MEP.
Rysunek 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 niższym bez MEP (patrz rysunek 4) gniazdo eSIM obsługuje tylko jeden włączony profil naraz i nie obsługuje DSDS.
Rysunek 4. Architektura układu eSIM bez obsługi MEP (Android 12 lub starszy)
Przepływ informacji o interfejsie API w przypadku wielu włączonych profili
Rysunek 5 przedstawia przepływ informacji w przypadku MEP dla eUICC w Androidzie 13. Usługa telefonii obejmuje klasę UiccPort
, która reprezentuje strukturę fizyczną na eUICC. Klasa UiccPort
jest używana w przypadku wszystkich typów kart SIM: karty fizycznej (pSIM), zintegrowanej karty SIM (iSIM) i wbudowanej karty SIM (eSIM). W przypadku eUICC z wieloma portami pojedynczy obiekt UiccSlot
i obiekt UiccCard
są mapowane na wiele instancji UiccPort
. Każda instancja UiccPort
może łączyć się z maksymalnie 1 instancją UiccProfile
. Ten proces umożliwia zmapowanie UiccPort
do slotu logicznego, a UiccSlot
(fizycznego slotu) do wielu slotów logicznych.
Rysunek 5. Przepływ informacji w eUICC z obsługą MEP
Implementacja
W tej sekcji opisujemy, jak wdrożyć funkcję MEP, w tym szczegółowe informacje o wymaganiach HAL, interfejsach API i interfejsie użytkownika. Producenci urządzeń powinni współpracować z dostawcami układów SoC i dostawcami chipsetów eSIM, aby obsługiwać MEP.
Wymagania dotyczące HAL
Aby obsługiwać MEP w 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 poleceniu ES10 APDU podczas operacji na kanale logicznym ICC.
CardStatus
Modem musi obsługiwać interfejs API CardStatus
jako odpowiedź na metodę getIccCardStatusResponse
. Odpowiedź musi zawierać indeks portu i indeks fizycznego gniazda określony przez SimPortSlotMapping
.
W przypadku urządzeń z Androidem 14 lub nowszym modem musi przekazywać obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
SimSlotStatus
Modem musi obsługiwać interfejs API SimSlotStatus
w odpowiedzi na metodę getSimSlotsStatus
. Stan gniazda karty SIM obejmuje tablicę interfejsu SimPortInfo
, która zawiera indeks portu, identyfikator ICCID dla włączonego profilu oraz stan portu. Modem musi zwrócić co najmniej dwa obiekty SimPortInfo
.
W przypadku urządzeń z Androidem 14 lub nowszym modem musi obsługiwać tryb MEP we wszystkich zdarzeniach CardStatus.
setSimSlotMapping
Metoda setSimSlotMapping
musi przekazywać tablicę SimPortSlotMapping
.
Indeks tablicy to logiczny slot, a SimPortSlotMapping
określa odpowiadający mu mapowany port i indeks fizycznego slotu. 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 zestawu funkcji dotyczących telefonii AOSP, muszą obsługiwać te interfejsy API.
UiccCardInfo
- (Android 13 i nowsze)
isMultipleEnabledProfilesSupported
: wskazuje, czy ten interfejs UICC obsługuje MEP. - (Android 13 i nowsze)
getPorts
: zwraca listę wszystkich możliwych portów dla danego interfejsu UICC. Jeśli karta UICC to karta pSIM lub eSIM, która nie obsługuje MEP, zwraca listę z 1 elementem. - (wycofane)
getIccId
: zwraca identyfikator ICCID. Ponieważ karta UICC może mieć więcej niż 1 identyfikator ICCID na urządzenie z MEP, użyj zamiast tegoUiccPortInfo.getIccId()
.
(Android 13 lub nowszy) UiccPortInfo
getIccId
: zwraca ICCID, jeśli na tym porcie jest włączona subskrypcja.getPortIndex
: zwraca indeks portu.getLogicalSlotIndex
: zwraca indeks aktywnego modemu logicznego.
Informacje o subskrypcji
- (Android 13 lub nowszy)
getPortIndex
: zwraca indeks portu, na którym subskrypcja jest włączona. Jeśli subskrypcja jest wyłączona, zwraca wartośćINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
:przełącza się na daną subskrypcję. Używany przez aplikacje, które nie mają uprawnień operatora do aktywnych subskrypcji. Po wywołaniu platforma wewnętrznie przekształca indeks portu za pomocą okna dialogowego z 3 opcjami, 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 przekazanie nieprawidłowego identyfikatora subskrypcji. Zamiast tego muszą używać metodyswitchToSubscription
(dodanej w Androidzie 13) z określonym indeksem portu.- (Android 13 lub nowszy)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: przełącza się na daną subskrypcję. Aplikacje wywołujące aplikacje z uprawnieniami operatora dotyczące aktywnych subskrypcji mogą określić, który port ma włączyć subskrypcję. - (Android 13 lub nowszy)
isSimPortAvailable
: zwraca informację, czy indeks portu przekazywania jest dostępny. Port jest dostępny, jeśli nie ma włączonej subskrypcji lub aplikacja do połączeń ma uprawnienia operatora dotyczące subskrypcji zainstalowanej na wybranym porcie.
Usługa EuiccService
- (Android 13 lub nowszy)
onSwitchToSubscriptionWithPort
: Przełącza na daną subskrypcję w określonym porcie. Implementacja LPA musi obsługiwać tę funkcję w Androidzie 13 lub nowszym.
Menedżer telefonii
- (Android 13 i nowsze)
getSimApplicationState
: zwraca stałą wskazującą stan aplikacji karty. Ten interfejs API przekazuje zarówno indeks slotu fizycznego, jak i indeks portu. MetodagetSimApplicationState(int physicalSlotIndex)
(przestarzała) przekazuje tylko fizyczny indeks slotu, aby uzyskać obiektsimApplicationState
. - (Android 13 i nowsze wersje)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: mapuje gniazda logiczne na fizyczne gniazda i porty. - (Android 13 lub nowszy)
Collection<UiccSlotMapping> getSimSlotMapping
: Pobiera mapowanie z logicznych gniazd na fizyczne gniazda kart SIM i indeksy portów.
Interfejs użytkownika
Aby rozwiązać problem niejednoznaczności wyboru 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ą. W Androidzie 13 AOSP obejmuje wzorzec użytkownika z oknem wyboru 3 wyborów, który można zastosować do subskrypcji umożliwiającej przepływ użytkowników z aplikacji Ustawienia. Ilustracja 6 przedstawia przykład tego procesu w interfejsie użytkownika.
Rysunek 6. Proces włączania subskrypcji karty SIM przez użytkownika
Flagi funkcji
Aby obsługiwać MEP, urządzenia muszą deklarować te flagi funkcji:
Implementacja LPA
Aby umożliwić korzystanie z MEP, upewnij się, że implementacja LPA spełnia te wymagania:
- Implementuje interfejsy API EuiccService do obsługi wielu portów.
- Do wyboru portu i włączenia profilu używa interfejsów API.
- Zapewnia UX, dzięki czemu aplikacje operatorów mogą włączać profile na wybranych portach.
Weryfikacja
Aby przetestować implementację funkcji MEP, upewnij się, że kompilacje przechodzą te przypadki testowe 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 modemem, układem eUICC i systemem operacyjnym eSIM, aby zapewnić, że urządzenia:
- Można włączyć 2 profile eSIM i przypisać je do 2 różnych sieci.
- Profile eSIM można aktywować i dezaktywować na dowolnym porcie eSIM.
- Aplikacja operatora uruchamia proces UX, który umożliwia użytkownikom przełączanie profili.
Rekomendacja dla operatorów
Aby użytkownicy nie tracili usług podczas przenoszenia profili eSIM z jednego portu na inny, operatorzy powinni zapewnić obsługę tych funkcji:
- Łatwe mapowanie IMEI i karty SIM
- Wiele identyfikatorów ICCID lub kart SIM dla każdego identyfikatora eUICC (EID)