Для устройств под управлением Android 13 или выше Android поддерживает несколько включенных профилей (MEP) для eUICC. Эта функция позволяет устройствам поддерживать две SIM-карты с помощью одного чипа eSIM, который может иметь несколько профилей SIM и может подключаться к двум разным операторам одновременно. Производители устройств должны работать с поставщиками SoC и поставщиками чипсетов eSIM, чтобы интегрировать эту функцию в свои устройства.
Фон
На устройствах под управлением Android 12 и ниже AOSP обеспечивает ограниченную поддержку, позволяя одной eSIM поддерживать несколько профилей одновременно. Несмотря на значительную экономию места и затрат, которую предлагает eSIM, отсутствие поддержки двух SIM-карт не позволяет производителям устройств внедрять устройства только с eSIM. Чтобы обеспечить поддержку двух SIM-карт на устройстве только с eSIM, производителям устройств приходится упаковывать два элемента eSIM в устройство, что увеличивает стоимость спецификации (BOM) и приводит к плохому пользовательскому опыту управления подписками. Функция 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. Модель выбора MEP-A1 ISD-R
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)