На устройствах с Android 13 или более поздней версии поддерживается несколько профилей, включенных для eUICC. Эта функция позволяет устройствам поддерживать две SIM-карты с помощью одного чипа eSIM, который может иметь несколько профилей SIM-карт и может одновременно подключаться к двум разным операторам связи. Производители устройств должны сотрудничать с поставщиками процессоров и чипсетов eSIM, чтобы интегрировать эту функцию в свои устройства.
Фон
На устройствах с Android 12 и более ранних версий AOSP предоставляет ограниченную поддержку, позволяя одной eSIM поддерживать несколько профилей одновременно. Несмотря на значительную экономию места и средств, которую обеспечивает eSIM, отсутствие поддержки двух SIM-карт не позволяет производителям устройств выпускать модели, в которых используется только eSIM. Чтобы обеспечить поддержку двух SIM-карт на устройстве, где можно использовать только eSIM, производителям приходится добавлять в него два элемента eSIM. Это увеличивает стоимость спецификации и усложняет управление подписками. Функция MEP, доступная в AOSP с Android 13, решает эту проблему.
Архитектура eUICC
В этом разделе описывается архитектура чипа eSIM для устройств с MEP для разных версий Android и архитектура чипа eSIM для устройств без MEP.
Android 14
На устройствах с Android 14 или более поздней версии поддерживаются варианты MEP-A1 и MEP-B для выбора корневого домена безопасности эмитента (ISD-R) и портов eSIM, как указано в GSMA SGP V22 3.0. Ниже описаны модели выбора ISD-R для MEP-A1 и MEP-B.
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
Android 13
В Android 13 и более поздних версиях на устройствах с поддержкой MEP слот eSIM содержит несколько портов eUICC, в каждом из которых может быть включен профиль. Как показано на рисунке 3, при такой архитектуре одна карта eUICC (один физический слот) поддерживает режим DSDS с двумя SIM-картами, поскольку каждый порт 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-карт: физических (pSIM), интегрированных (iSIM) и встроенных (eSIM). Для eUICC с несколькими портами один объект UiccSlot и один объект UiccCard сопоставляются с несколькими экземплярами UiccPort. Каждый экземпляр UiccPort может быть связан не более чем с одним экземпляром UiccProfile. Этот поток позволяет сопоставить UiccPort с логическим слотом, а UiccSlot (физический слот) – с несколькими логическими слотами.
Рисунок 5. Поток информации для eUICC с поддержкой MEP
Реализация
В этом разделе описывается, как реализовать функцию MEP, включая подробные сведения о требованиях HAL, API и пользовательском интерфейсе. Производителям устройств следует сотрудничать с поставщиками процессоров и чипсетов 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) и передается информация о команде APDU ES10 во время операций с логическим каналом ICC.
CardStatus
Модем должен поддерживать 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().
UiccPortInfo (Android 13 и более поздние версии)
getIccId: возвращает ICCID, если на этом порту есть активная подписка.getPortIndex. Возвращает индекс порта.getLogicalSlotIndex: возвращает индекс активного стека логического модема.
SubscriptionInfo
- (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 и более поздних версий.
TelephonyManager
- (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.
Рисунок 6. Путь пользователя для включения подписки на SIM-карту
Флаги функций
Чтобы поддерживать MEP, устройства должны объявлять следующие флаги функций:
Реализация LPA
Чтобы поддерживать несколько профилей eSIM, убедитесь, что ваша реализация LPA соответствует следующим требованиям:
- Реализует API из EuiccService для поддержки нескольких портов.
- Использует API для выбора порта и включения профиля.
- Предоставляет UX, позволяющий приложениям операторов связи включать профили на выбранных портах.
Проверка
Чтобы проверить реализацию функции 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);