W przypadku urządzeń z Androidem 13 lub nowszym Android obsługuje wiele włączonych profili (MEP) dla eUICC. Ta funkcja umożliwia urządzeniom obsługę dual SIM za pomocą pojedynczego układu eSIM, który może mieć wiele profili SIM i może łączyć się z 2 różnymi operatorami jednocześnie. Aby zintegrować tę funkcję z urządzeniami, producenci urządzeń muszą współpracować z dostawcami układów SoC i układów eSIM.
Tło
W przypadku urządzeń z Androidem 12 lub starszym AOSP zapewnia ograniczoną obsługę umożliwiającą jednoczesne korzystanie z wielu profili na jednej karcie eSIM. Pomimo znacznych oszczędności miejsca i kosztów, jakie oferuje eSIM, brak obsługi dual SIM uniemożliwia producentom urządzeń stosowanie urządzeń tylko z eSIM. Aby zapewnić obsługę dual SIM na urządzeniu tylko z eSIM, producenci urządzeń muszą umieścić w urządzeniu 2 elementy eSIM, co zwiększa koszty materiałów i prowadzi do słabych wrażeń użytkowników związanych z zarządzaniem subskrypcjami. Problem ten rozwiązuje funkcja MEP dostępna w AOSP od Androida 13.
Architektura eUICC
W tej sekcji opisujemy architekturę układu eSIM w przypadku urządzeń z MEP w różnych wersjach Androida oraz architekturę układu 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 bezpieczeństwa wystawcy (ISD-R) oraz 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 wybierany na porcie 0 (port poleceń to 0), a profile są wybierane na portach eSIM 1 i nowszych. Polecenia ES10 są zawsze wysyłane do portu 0, a port poleceń i port docelowy są zawsze różne. Port wybiera LPA.
Rysunek 1. Model wyboru ISD-R MEP-A1
MEP-B: ISD-R jest wybierany na dowolnym porcie, a do dowolnego portu można przypisać profil. Polecenia włączania i wyłączania są wysyłane do portu, w którym należy włączyć lub wyłączyć profil (w którym oczekuje się odświeżenia). Port poleceń i port docelowy są zawsze takie same.
Rysunek 2. Model wyboru ISD-R MEP-B
Android 13
W Androidzie 13 lub nowszym na urządzeniach obsługujących 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 eUICC (pojedyncze gniazdo fizyczne) obsługuje dual SIM dual standby (DSDS), ponieważ każdy port eUICC jest połączony z pasmem podstawowym modemu. Interfejs HAL i interfejsy API w Androidzie 13 są niezależne od wariantu MEP.
Rysunek 3. Architektura układu eSIM z obsługą MEP (Android 13 lub nowszy)
Android 12 i starsze wersje
W przypadku urządzeń z Androidem 12 lub starszym bez MEP, jak pokazano na rysunku 4, gniazdo eSIM obsługuje tylko 1 włączony profil naraz. Oznacza to, że urządzenie nie może obsługiwać 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 o MEP dla eUICC w Androidzie 13. Platforma telefoniczna zawiera klasę UiccPort, która reprezentuje strukturę fizyczną na eUICC. Klasa UiccPort jest używana w przypadku wszystkich typów kart SIM: fizycznych kart SIM (pSIM), zintegrowanych kart SIM (iSIM) i wbudowanych kart 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 być połączona z co najwyżej 1 instancją UiccProfile. Ten przepływ umożliwia mapowanie UiccPort na gniazdo logiczne, a UiccSlot (gniazdo fizyczne) na wiele gniazd logicznych.
Rysunek 5. Przepływ informacji o eUICC z obsługą MEP
Implementacja
W tej sekcji opisujemy, jak zaimplementować funkcję MEP, w tym szczegóły dotyczące wymagań HAL, interfejsów API i interfejsu użytkownika. Aby obsługiwać MEP, producenci urządzeń powinni współpracować z dostawcami układów SoC i układów eSIM.
Wymagania HAL
Aby obsługiwać MEP dla 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ć wersji 2.1 interfejsów HAL IRadio, które używają
MultipleEnabledProfileMode (model wyboru ISD-R obsługiwany przez modem
lub eUICC) i przekazują informacje o poleceniu ES10 APDU podczas operacji na kanałach logicznych ICC.
CardStatus
Modem musi obsługiwać interfejs API CardStatus jako odpowiedź 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 przekazywać obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
SimSlotStatus
Modem musi obsługiwać interfejs API SimSlotStatus jako odpowiedź na metodę
getSimSlotsStatus. Stan gniazda SIM zawiera tablicę interfejsu
SimPortInfo, która obejmuje indeks portu, identyfikator ICCID dla
włączonego profilu i stan portu. Modem musi zwracać co najmniej 2 obiekty SimPortInfo.
W przypadku urządzeń z Androidem 14 lub nowszym modem musi przekazywać obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
setSimSlotMapping
Metoda setSimSlotMapping musi przekazywać tablicę
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 pSIM lub eSIM, która nie obsługuje MEP, zwraca listę z 1 elementem. - (Wycofany)
getIccId: zwraca identyfikator ICCID. Ponieważ karta UICC może mieć więcej niż 1 identyfikator ICCID w przypadku urządzeń z MEP, użyj zamiast tegoUiccPortInfo.getIccId().
(Android 13 lub nowszy) UiccPortInfo
getIccId: zwraca identyfikator ICCID, jeśli na tym porcie jest włączona subskrypcja.getPortIndex: zwraca indeks portu.getLogicalSlotIndex: zwraca indeks aktywnego stosu modemu logicznego.
SubscriptionInfo
- (Android 13 lub nowszy)
getPortIndex: zwraca indeks portu, na którym jest włączona subskrypcja. Jeśli subskrypcja jest wyłączona, zwracaINVALID_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 ta metoda jest wywoływana, platforma wewnętrznie rozwiązuje indeks portu za pomocą okna z 3 opcjami wyboru dialogowego, 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) z określonym indeksem portu.- (Android 13 lub nowszy)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): przełącza na daną subskrypcję. Aplikacje wywołujące z uprawnieniami operatora w przypadku aktywnych subskrypcji mogą określić, na którym porcie ma zostać włączona subskrypcja. - (Android 13 lub nowszy)
isSimPortAvailable: zwraca informację, czy przekazywany indeks portu jest dostępny. Port jest dostępny, jeśli nie ma włączonej subskrypcji lub aplikacja wywołująca ma uprawnienia operatora w przypadku subskrypcji zainstalowanej na wybranym porcie.
EuiccService
- (Android 13 lub nowszy)
onSwitchToSubscriptionWithPort: przełącza na daną subskrypcję na określonym porcie. Implementacja LPA musi obsługiwać tę metodę w Androidzie 13 lub nowszym.
TelephonyManager
- (Android 13 lub 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)(wycofana) przekazuje tylko indeks gniazda fizycznego, aby uzyskać obiektsimApplicationState. - (Android 13 lub nowszy)
setSimSlotMapping(Collection<UiccSlotMapping> slots): mapuje gniazda logiczne na gniazda fizyczne i porty. - (Android 13 lub nowszy)
Collection<UiccSlotMapping> getSimSlotMapping: pobiera mapowanie gniazd logicznych na fizyczne gniazda SIM i indeksy portów.
Interfejs użytkownika
Aby rozwiązać problem z 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ą subskrypcję. W Androidzie 13 AOSP zawiera wzorzec przeglądania z oknem z 3 opcjami, który można zastosować do wzorców przeglądania związanych z włączaniem subskrypcji w aplikacji Ustawienia. Rysunek 6 przedstawia przykład tego wzorca przeglądania.
Rysunek 6. Wzorzec przeglądania związany z włączaniem 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, aby obsługiwać wiele portów.
- Używa interfejsów API do wybierania portów i włączania profili.
- Zapewnia wzorzec przeglądania umożliwiający 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 potwierdzić, że urządzenie może wykonywać te czynności:
- Można 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 uruchamia wzorzec przeglądania, który umożliwia użytkownikom przełączanie profili.
Zalecenia dla operatorów
Aby użytkownicy nie tracili dostępu do usług podczas przenoszenia profili eSIM z jednego portu na drugi, zalecamy operatorom obsługę tych funkcji:
- Płynne mapowanie IMEI i SIM
- Wiele identyfikatorów ICCID lub kart SIM dla każdego identyfikatora eUICC (EID)