На устройствах под управлением Android 13 и более поздних версий Android поддерживает несколько включённых профилей (MEP) для eUICC. Эта функция позволяет устройствам поддерживать две SIM-карты, используя один чип eSIM, который может иметь несколько профилей SIM-карт и одновременно подключаться к двум разным операторам. Производители устройств должны сотрудничать с поставщиками SoC и чипсетов eSIM для интеграции этой функции в свои устройства.
Фон
На устройствах под управлением Android 12 и более ранних версий AOSP предоставляет ограниченную поддержку, позволяя одной eSIM поддерживать несколько профилей одновременно. Несмотря на значительную экономию места и средств, обеспечиваемую eSIM, отсутствие поддержки двух SIM-карт не позволяет производителям устройств выпускать устройства, поддерживающие только eSIM. Чтобы обеспечить поддержку двух SIM-карт на устройстве, поддерживающем только eSIM, производителям устройств приходится устанавливать два модуля eSIM, что увеличивает стоимость материалов и усложняет управление подписками. Функция MEP, доступная в AOSP, начиная с Android 13, решает эту проблему.
архитектура eUICC
В этом разделе описывается архитектура чипа eSIM для устройств с MEP для различных версий Android и архитектура чипа eSIM для устройств без MEP.
Андроид 14
Для устройств под управлением Android 14 и выше Android поддерживает параметры MEP-A1 и MEP-B для выбора корневого домена безопасности эмитента (ISD-R) и выбора портов eSIM, как указано в GSMA SGP V22 3.0 . Ниже описаны модели выбора MEP-A1 и MEP-B ISD-R.
MEP-A1: ISD-R выбран на порту 0 (командный порт — 0), а профили выбираются на портах eSIM 1 и выше. Команды ES10 всегда отправляются на порт 0, а командный порт и целевой порт всегда различаются. Порт выбирается LPA.
Рисунок 1. Модель выбора ISD-R MEP-A1
MEP-B: ISD-R выбран на любом порту, и любому порту можно назначить профиль. Команды включения и выключения отправляются на порт, где требуется включить или отключить профиль (где ожидается обновление). Порт команды и целевой порт всегда совпадают.
Рисунок 2. Модель выбора MEP-B ISD-R
Андроид 13
В Android 13 и более поздних версиях на устройствах с поддержкой MEP слот eSIM содержит несколько портов eUICC, каждый из которых может иметь активный профиль. Как показано на рисунке 3, в этой архитектуре один слот eUICC (один физический слот) поддерживает режим ожидания двух SIM-карт (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.
Статус карты
Модем должен поддерживать API CardStatus
в ответе на метод getIccCardStatusResponse
. Ответ должен включать индекс порта и индекс физического слота, указанные в SimPortSlotMapping
.
Для устройств под управлением Android 14 и выше модем должен пройти поддерживаемый режим MEP со всеми событиями CardStatus.
SimSlotStatus
Модем должен поддерживать API SimSlotStatus
в ответ на метод 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, возвращает список из одного элемента. - (Устарело)
getIccId
: возвращает ICCID. Поскольку UICC-карта может иметь несколько ICCID для устройств с MEP, используйте вместо неёUiccPortInfo.getIccId()
.
(Android 13 и выше) UiccPortInfo
-
getIccId
: Возвращает ICCID, если на этом порту включена подписка. -
getPortIndex
: возвращает индекс порта. -
getLogicalSlotIndex
: возвращает индекс активного логического стека модема.
Информация о подписке
- (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 и выше.
Менеджер телефонии
- (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 показан пример такого UX-потока.
Рисунок 6. Процесс включения подписки на SIM-карту
Флаги функций
Для поддержки MEP устройства должны декларировать следующие флаги функций:
Реализация LPA
Для поддержки MEP убедитесь, что реализация LPA соответствует следующим требованиям:
- Реализует API EuiccService для поддержки нескольких портов.
- Использует API для выбора порта и включения профиля.
- Обеспечивает пользовательский интерфейс, позволяющий приложениям операторов включать профили на выбранных портах.
Проверка
Чтобы протестировать реализацию функции MEP, убедитесь, что сборки проходят следующие тестовые случаи 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)