W przypadku urządzeń z systemem Android 13 lub nowszym system Android obsługuje wiele profili (MEP) dla eUICC. Ta funkcja umożliwia urządzeniom obsługę dwóch kart SIM przy użyciu jednego chipa eSIM, który może mieć wiele profili SIM i może łączyć się jednocześnie z dwoma różnymi operatorami. Producenci urządzeń muszą współpracować z dostawcami SoC i chipsetów eSIM, aby zintegrować tę funkcję ze swoimi urządzeniami.
Tło
Na urządzeniach z Androidem 12 i starszym AOSP zapewnia ograniczoną obsługę, umożliwiając pojedynczej karcie eSIM obsługę wielu profili jednocześnie. Pomimo znacznych oszczędności miejsca i kosztów, jakie oferuje eSIM, brak obsługi dwóch kart SIM uniemożliwia producentom urządzeń wdrażanie urządzeń obsługujących wyłącznie eSIM. Aby zapewnić obsługę dwóch kart SIM na urządzeniu obsługującym wyłącznie eSIM, producenci urządzeń muszą umieścić w urządzeniu dwa elementy eSIM, co zwiększa koszty zestawienia materiałów (BOM) i pogarsza komfort zarządzania subskrypcjami przez użytkowników. Funkcja MEP dostępna w AOSP od Androida 13 rozwiązuje ten problem.
Architektura eUICC
W tej sekcji opisano architekturę chipa eSIM dla urządzeń z MEP dla różnych wersji Androida oraz architekturę chipa eSIM dla urządzeń bez MEP.
Androida 14
W przypadku urządzeń z systemem Android 14 lub nowszym system Android obsługuje opcje MEP-A1 i MEP-B umożliwiające wybór głównego katalogu domeny bezpieczeństwa wystawcy (ISD-R) i wybór portów eSIM zgodnie z specyfikacją GSMA SGP V22 3.0 . Poniżej opisano modele wyboru MEP-A1 i MEP-B ISD-R.
MEP-A1: ISD-R jest wybrany 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 poleceń i port docelowy są zawsze różne. LPA wybiera port.
Rysunek 1. Model doboru MEP-A1 ISD-R
MEP-B: ISD-R jest wybrany na dowolnym porcie i do każdego portu można przypisać profil. Polecenia włączania i wyłączania są wysyłane do portu, na którym profil ma zostać włączony lub wyłączony (gdzie oczekuje na odświeżenie). Port poleceń i port docelowy są zawsze takie same.
Rysunek 2. Model doboru MEP-B ISD-R
Androida 13
W systemie Android 13 lub nowszym na urządzeniach obsługujących MEP gniazdo eSIM zawiera wiele portów eUICC, dla których port może mieć włączony profil. Jak pokazano na rysunku 3, w tej architekturze pojedynczy eUICC (pojedyncze gniazdo fizyczne) obsługuje dual SIM w trybie gotowości (DSDS), dzięki połączeniu każdego portu eUICC z pasmem podstawowym modemu. Android 13 HAL i interfejsy API są niezależne od wersji MEP.
Rysunek 3. Architektura chipa eSIM z obsługą MEP (Android 13 lub nowszy)
Android 12 i starsze
W przypadku urządzeń z systemem Android 12 lub starszym bez MEP, jak pokazano na rysunku 4, gniazdo eSIM obsługuje tylko jeden włączony profil jednocześnie, a urządzenie nie obsługuje DSDS.
Rysunek 4. Architektura chipa eSIM bez obsługi MEP (Android 12 lub starszy)
Przepływ informacji API dla wielu włączonych profili
Rysunek 5 opisuje przepływ informacji dla MEP dla eUICC w systemie Android 13. Struktura telefonii obejmuje klasę UiccPort
, która reprezentuje fizyczną strukturę eUICC. Klasa UiccPort
jest używana dla wszystkich typów kart SIM: fizycznej karty SIM (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 co najwyżej jedną instancją UiccProfile
. Ten przepływ umożliwia UiccPort
mapowanie do logicznego gniazda, a UiccSlot
(fizyczne gniazdo) do mapowania do wielu logicznych gniazd.
Rysunek 5. Przepływ informacji dla eUICC przy wsparciu MEP
Realizacja
W tej sekcji opisano sposób implementowania funkcji MEP, w tym szczegółowe informacje na temat wymagań HAL, interfejsów API i interfejsu użytkownika. Producenci urządzeń powinni współpracować z dostawcami SoC i chipsetów eSIM, aby zapewnić obsługę MEP.
Wymagania HAL-u
Aby obsługiwać MEP dla eUICC, zaimplementuj następujące interfejsy API IRadio AIDL HAL, znajdujące się w /platform/hardware/interfaces/radio/aidl/aidl_api
.
Urządzenia z systemem Android 14 lub nowszym muszą korzystać z 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 komendzie ES10 APDU podczas operacji na kanale logicznym ICC.
Stan karty
Modem musi obsługiwać 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 systemem Android 14 lub nowszym modem musi przejść obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
Stan SimSlotu
Modem musi obsługiwać API SimSlotStatus
jako odpowiedź na metodę getSimSlotsStatus
. Stan gniazda SIM obejmuje tablicę interfejsu SimPortInfo
, która zawiera indeks portu, identyfikator ICCID włączonego profilu i stan portu. Modem musi zwracać co najmniej dwa obiekty SimPortInfo
.
W przypadku urządzeń z systemem Android 14 lub nowszym modem musi przejść obsługiwany tryb MEP ze wszystkimi zdarzeniami CardStatus.
setSimSlotMapping
Metoda setSimSlotMapping
musi przekazywać tablicę SimPortSlotMapping
. Indeksem tablicy jest gniazdo logiczne, a SimPortSlotMapping
określa odpowiedni zmapowany port i indeks gniazda fizycznego. Metoda setSimSlotMapping
ustawia mapowanie z 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 systemem Android obsługujące wiele włączonych profili w ramach stosu telefonicznego AOSP muszą obsługiwać następujące interfejsy API.
Informacje o karcie Uicc
- (Android 13 i nowsze)
isMultipleEnabledProfilesSupported
: Zwraca, czy ten UICC obsługuje MEP. - (Android 13 i nowsze)
getPorts
: Zwraca listę wszystkich możliwych portów dla konkretnego UICC. Jeśli UICC jest kartą pSIM lub eSIM, która nie obsługuje MEP, zwraca listę jednego elementu. - (Przestarzałe)
getIccId
: Zwraca identyfikator ICCID. Ponieważ UICC może mieć więcej niż jeden ICCID dla urządzeń z MEP, zamiast tego użyjUiccPortInfo.getIccId()
.
(Android 13 i nowsze) UiccPortInfo
-
getIccId
: Zwraca ICCID, jeśli na tym porcie jest włączona subskrypcja. -
getPortIndex
: Zwraca indeks portu. -
getLogicalSlotIndex
: Zwraca indeks aktywnego stosu logicznego modemu.
Informacje o subskrypcji
- (Android 13 i nowsze)
getPortIndex
: Zwraca indeks portu, na którym włączona jest subskrypcja. Jeśli subskrypcja jest wyłączona, zwracaINVALID_PORT_ID -1
.
Menedżer Euicc
-
switchToSubscription
: Przełącza na daną subskrypcję. Używany przez aplikacje, które nie mają uprawnień operatora w przypadku aktywnych subskrypcji. Po wywołaniu platforma wewnętrznie rozpoznaje indeks portu za pomocą okna dialogowego z trzema opcjami wyboru, aby wyłączyć wybraną aktywną subskrypcję, jeśli nie ma dostępnych portów. Aplikacje przeznaczone dla systemu Android 13 i nowszego nie mogą używać tego interfejsu API do wyłączania subskrypcji poprzez przekazanie nieprawidłowego identyfikatora subskrypcji . zamiast tego muszą użyć metodyswitchToSubscription
(dodanej w systemie Android 13) z określonym indeksem portu. - (Android 13 i nowsze)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Przełącza do danej subskrypcji. Wywoływanie aplikacji z uprawnieniami operatora w stosunku do aktywnych subskrypcji może określić, na którym porcie ma zostać włączona subskrypcja. - (Android 13 i nowsze)
isSimPortAvailable
: Zwraca informację, czy dostępny jest indeks portu przechodzącego. Port jest dostępny, jeśli nie ma włączonej subskrypcji lub aplikacja wywołująca ma uprawnienia operatora w stosunku do subskrypcji zainstalowanej na wybranym porcie.
Serwis Euicc
- (Android 13 i nowsze)
onSwitchToSubscriptionWithPort
: Przełącza na daną subskrypcję na określonym porcie. Implementacja LPA musi to obsługiwać na Androidzie 13 i nowszych.
Menedżer telefonii
- (Android 13 i nowsze)
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 nowsze)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Mapuje gniazda logiczne na gniazda i porty fizyczne. - (Android 13 i nowsze)
Collection<UiccSlotMapping> getSimSlotMapping
: Pobiera mapowanie z gniazd logicznych na fizyczne gniazda 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ą subskrypcję. W systemie Android 13 AOSP zawiera przepływ użytkownika z oknem dialogowym trzech opcji, które można zastosować do subskrypcji, umożliwiając przepływ użytkownika z poziomu aplikacji Ustawienia. Rysunek 6 przedstawia przykład takiego przepływu UX.
Rysunek 6. Przebieg użytkownika umożliwiający włączenie subskrypcji karty SIM
Flagi funkcyjne
Aby obsługiwać MEP, urządzenia muszą zadeklarować następujące flagi funkcji:
Wdrożenie LPA
Aby wesprzeć MEP, upewnij się, że Twoja implementacja LPA spełnia następujące wymagania:
- Implementuje interfejsy API z EuiccService do obsługi wielu portów.
- Używa interfejsów API do wyboru portu i włączania profilu.
- Zapewnia interfejs użytkownika umożliwiający aplikacjom operatorów włączanie profili na wybranych portach.
Walidacja
Aby przetestować implementację funkcji MEP, upewnij się, że kompilacje przeszły następujące przypadki testowe CTS (dla publicznych interfejsów API): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Producenci urządzeń powinni również współpracować ze swoimi dostawcami modemów, chipów eUICC i systemów operacyjnych eSIM, aby mieć pewność, że urządzenie będzie mogło wykonywać następujące czynności:
- Można włączyć dwa profile eSIM i podłączyć je do dwóch różnych sieci.
- Profile eSIM można aktywować i dezaktywować na dowolnym porcie eSIM.
- Aplikacja operatora uruchamia przepływ UX, umożliwiając użytkownikom przełączanie profili.
Rekomendacja dla przewoźników
Aby mieć pewność, że użytkownicy nie stracą usług po przeniesieniu profili eSIM z jednego portu do drugiego, zalecamy, aby operatorzy zapewniali obsługę następujących elementów:
- Płynne mapowanie IMEI i SIM
- Wiele identyfikatorów ICCID lub kart SIM dla każdego identyfikatora eUICC (EID)