Несколько включенных профилей

На устройствах под управлением 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.

    Модель выбора ISD-R MEP-A1

    Рисунок 1. Модель выбора ISD-R MEP-A1

  • MEP-B: 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.

Архитектура чипа eSIM с поддержкой MEP

Рисунок 3. Архитектура чипа eSIM с поддержкой MEP (Android 13 или выше)

Android 12 и ниже

Для устройств под управлением Android 12 или ниже без MEP, как показано на рисунке 4, слот eSIM поддерживает только один включенный профиль одновременно, и устройство не может поддерживать DSDS.

Архитектура чипа eSIM без поддержки MEP

Рисунок 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-потока.

Поток пользователей для подписки на SIM-карту MEP

Рисунок 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)