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

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

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

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

  • 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.

UiccCardИнформация

  • (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 .

EuiccМенеджер

  • 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.

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

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