En el caso de los dispositivos que ejecutan Android 13 o versiones posteriores, Android admite varios perfiles habilitados (MEP) para eUICC. Esta función permite que los dispositivos tengan compatibilidad con dos tarjetas SIM mediante un solo chip eSIM, que puede tener varios perfiles de SIM y conectarse a dos operadores diferentes al mismo tiempo. Los fabricantes de dispositivos deben trabajar con los proveedores de SoC y los proveedores de chipsets de eSIM para integrar esta función en sus dispositivos.
Segundo plano
En dispositivos con Android 12 y versiones anteriores, AOSP proporciona compatibilidad limitada para permitir que una sola eSIM admita varios perfiles a la vez. A pesar de los ahorros significativos de espacio y costos que ofrece la eSIM, esta falta de compatibilidad con la doble SIM impide que los fabricantes de dispositivos adopten dispositivos solo con eSIM. Para admitir la doble SIM en un dispositivo solo con eSIM, los fabricantes de dispositivos deben empaquetar dos elementos de eSIM en el dispositivo, lo que aumenta los costos de la lista de materiales (BoM) y genera experiencias del usuario deficientes para la administración de suscripciones. La función MEP disponible en AOSP a partir de Android 13 soluciona este problema.
Arquitectura de la eUICC
En esta sección, se describe la arquitectura del chip de eSIM para dispositivos con MEP para diferentes versiones de Android y la arquitectura del chip de eSIM para dispositivos sin MEP.
Android 14
En el caso de los dispositivos que ejecutan Android 14 o versiones posteriores, Android es compatible con las opciones MEP-A1 y MEP-B para la selección de la raíz del dominio de seguridad del emisor (ISD-R) y la de los puertos de eSIM como se especifica en GSMA SGP V22 3.0. A continuación, se describen los modelos de selección de ISD-R MEP-A1 y MEP-B.
MEP-A1: Se selecciona ISD-R en el puerto 0 (el puerto de comandos es 0) y se seleccionan los perfiles en los puertos de eSIM 1 y superiores. Los comandos ES10 siempre se envían al puerto 0, y el puerto de comando y el puerto de destino siempre son diferentes. La LPA selecciona el puerto.
Figura 1: Modelo de selección de ISD-R MEP-A1
MEP-B: Se selecciona ISD-R en cualquier puerto y se puede asignar un perfil a cualquier puerto. Los comandos de habilitación y de inhabilitación se envían al puerto en el que se debe habilitar o inhabilitar el perfil (donde hay una actualización pendiente). El puerto de comando y el puerto de destino siempre son los mismos.
Figura 2: Modelo de selección de ISD-R de MEP-B
Android 13
En Android 13 o versiones posteriores, en los dispositivos que admiten MEP, la ranura para eSIM contiene varios puertos eUICC en los que el puerto puede tener un perfil habilitado. Como se muestra en la Figura 3, con esta arquitectura, un solo eUICC (un solo ranura física) admite Dual SIM Dual Standby (DSDS) porque cada puerto eUICC se vincula a una banda base de módem. Las APIs y la HAL de Android 13 son independientes de la variante de MEP.
Figura 3: Arquitectura del chip de eSIM con compatibilidad con MEP (Android 13 o versiones posteriores)
Android 12 y versiones anteriores
En el caso de los dispositivos que ejecutan Android 12 o versiones anteriores sin MEP, como se muestra en la Figura 4, la ranura para eSIM solo admite un perfil habilitado a la vez y el dispositivo no puede admitir DSDS.
Figura 4: Arquitectura del chip de eSIM sin compatibilidad con MEP (Android 12 o versiones anteriores)
Flujo de información de API para varios perfiles habilitados
En la Figura 5, se describe el flujo de información de MEP para eUICC en Android 13. El framework de telefonía incluye la clase UiccPort
, que representa la estructura física en la eUICC. La clase UiccPort
se usa para todos los tipos de tarjetas SIM: física (pSIM), integrada (iSIM) y eSIM. En el caso de una eUICC con varios puertos, un solo objeto UiccSlot
y un objeto UiccCard
se asignan a varias instancias de UiccPort
. Cada instancia de UiccPort
puede vincularse a, como máximo, una instancia de UiccProfile
. Este flujo permite que UiccPort
se asigne a un zócalo lógico y que UiccSlot
(zócalo físico) se asigne a varios zócalos lógicos.
Figura 5: Flujo de información para la eUICC con compatibilidad con MEP
Implementación
En esta sección, se describe cómo implementar la función de MEP, incluidos detalles sobre los requisitos de HAL, las APIs y la interfaz de usuario. Los fabricantes de dispositivos deben trabajar con proveedores de SoC y proveedores de chipsets de eSIM para admitir MEP.
Requisitos del HAL
Para admitir MEP para eUICC, implementa las siguientes APIs de HAL de AIDL de IRadio, que se encuentran en /platform/hardware/interfaces/radio/aidl/aidl_api
.
Los dispositivos que ejecutan Android 14 o versiones posteriores deben usar la versión 2.1 de IRadio de las interfaces de HAL, que usan MultipleEnabledProfileMode
(modelo de selección de ISD-R compatible con el módem o la eUICC) y pasan información de comandos APDU de ES10 durante las operaciones de canal lógico de ICC.
Estado de la tarjeta
El módem debe admitir la API de CardStatus
como respuesta al método getIccCardStatusResponse
. La respuesta debe incluir el índice de puerto y el índice de ranura física que especifica SimPortSlotMapping
.
En el caso de los dispositivos que ejecutan Android 14 o versiones posteriores, el módem debe pasar el modo MEP compatible con todos los eventos de CardStatus.
SimSlotStatus
El módem debe admitir la API de SimSlotStatus
como respuesta al método getSimSlotsStatus
. El estado de la ranura para SIM incluye un array de la interfaz SimPortInfo
, que incluye el índice de puerto, el ICCID del perfil habilitado y el estado del puerto. El módem debe mostrar al menos dos objetos SimPortInfo
.
En el caso de los dispositivos que ejecutan Android 14 o versiones posteriores, el módem debe pasar el modo MEP compatible con todos los eventos CardStatus.
setSimSlotMapping
El método setSimSlotMapping
debe pasar un array de SimPortSlotMapping
.
El índice del array es el zócalo lógico y SimPortSlotMapping
especifica el puerto asignado y el índice del zócalo físico correspondientes. El método setSimSlotMapping
establece la asignación de puertos a ranuras lógicas. La app de LPA usa este método para seleccionar el puerto activo.
APIs que admiten MEP para eUICC
Los dispositivos Android que admiten varios perfiles habilitados como parte de la pila de telefonía de AOSP deben admitir las siguientes APIs.
UiccCardInfo
- (Android 13 y versiones posteriores)
isMultipleEnabledProfilesSupported
: Muestra si esta UICC admite MEP. - (Android 13 y versiones posteriores)
getPorts
: Devuelve la lista de todos los puertos posibles para una UICC en particular. Si la UICC es una pSIM o eSIM que no admite MEP, muestra una lista de un elemento. - (Obsoleto)
getIccId
: Devuelve un ICCID. Como un UICC puede tener más de un ICCID para dispositivos con MEP, usaUiccPortInfo.getIccId()
.
UiccPortInfo (Android 13 y versiones posteriores)
getIccId
: Muestra el ICCID si hay una suscripción habilitada en este puerto.getPortIndex
: Muestra el índice de puerto.getLogicalSlotIndex
: Muestra el índice de pila de módem lógico activo.
SubscriptionInfo
- (Android 13 y versiones posteriores)
getPortIndex
: Muestra el índice de puerto en el que está habilitada la suscripción. Si la suscripción está inhabilitada, muestraINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
: Cambia a una suscripción determinada. Lo usan las apps que no tienen privilegios del operador en las suscripciones activas. Cuando se realiza la llamada, la plataforma resuelve el índice de puerto de forma interna a través de un diálogo de selección de tres opciones para inhabilitar la suscripción activa seleccionada si no hay puertos disponibles. Las apps orientadas a Android 13 y versiones posteriores no deben usar esta API para inhabilitar una suscripción pasando un ID de suscripción no válido. En su lugar, deben usar el métodoswitchToSubscription
(que se agregó en Android 13) con el índice de puerto especificado.- (Android 13 y versiones posteriores)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Cambia a una suscripción determinada. Las llamadas a apps con privilegios de operador sobre las suscripciones activas pueden especificar en qué puerto se habilitará la suscripción. - (Android 13 y versiones posteriores)
isSimPortAvailable
: Devuelve si el índice de puerto de paso está disponible. Un puerto está disponible si no tiene habilitada una suscripción o si la app de llamada tiene privilegios del operador sobre la suscripción instalada en el puerto seleccionado.
EuiccService
- (Android 13 y versiones posteriores)
onSwitchToSubscriptionWithPort
: Cambia a una suscripción determinada en un puerto especificado. La implementación de LPA debe admitir esto en Android 13 y versiones posteriores.
TelephonyManager
- (Android 13 y versiones posteriores)
getSimApplicationState
: Devuelve una constante que indica el estado de la aplicación de la tarjeta. Esta API pasa un índice de ranura física y un índice de puerto. El métodogetSimApplicationState(int physicalSlotIndex)
(obsoleto) pasa solo el índice de ranura física para obtener un objetosimApplicationState
. - (Android 13 y versiones posteriores)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Asigna los ranuras lógicas a ranuras y puertos físicos. - (Android 13 y versiones posteriores)
Collection<UiccSlotMapping> getSimSlotMapping
: Obtiene la asignación de ranuras lógicas a ranuras de SIM físicas y a índices de puertos.
Interfaz de usuario
Para resolver la ambigüedad de la selección de puertos de eSIM, en los dispositivos compatibles con MEP, los usuarios deben poder inhabilitar una de las suscripciones activas para habilitar una nueva. En Android 13, AOSP incluye un flujo de usuarios con un diálogo de tres opciones que se puede aplicar a los flujos de usuarios que habilitan la suscripción desde la app de Configuración. En la Figura 6, se muestra un ejemplo de este flujo de UX.
Figura 6: Flujo de usuarios para habilitar la suscripción a la SIM
Feature flags
Para admitir MEP, los dispositivos deben declarar las siguientes marcas de función:
Implementación de LPA
Para admitir MEP, asegúrate de que la implementación de tu LPA cumpla con los siguientes requisitos:
- Implementa las APIs de EuiccService para admitir varios puertos.
- Usa las APIs para la selección de puertos y la habilitación de perfiles.
- Proporciona una UX que permite que las apps de operadores habiliten perfiles en puertos seleccionados.
Validación
Para probar tu implementación de la función de MEP, asegúrate de que las compilaciones superen los siguientes casos de prueba de CTS (para APIs públicas): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Los fabricantes de dispositivos también deben trabajar con sus proveedores de módems, chips eUICC y sistemas operativos de eSIM para garantizar que el dispositivo pueda hacer lo siguiente:
- Se pueden habilitar dos perfiles de eSIM y conectarlos a dos redes diferentes.
- Los perfiles de eSIM se pueden activar y desactivar en cualquier puerto de eSIM.
- Hay un flujo de UX activado por la app del operador que permite a los usuarios cambiar de perfil.
Recomendación para operadores
Para garantizar que los usuarios no pierdan el servicio cuando transfieran perfiles de eSIM de un puerto a otro, recomendamos que los operadores proporcionen asistencia para lo siguiente:
- Asignación fluida de IMEI y SIM
- Varios ICCID o SIM para cada identificador de eUICC (EID)