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 SIM doble a través de 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 de chips de eSIM para integrar esta función en sus dispositivos.
Información general
En los dispositivos con Android 12 y versiones anteriores, el AOSP proporciona compatibilidad limitada para permitir que una sola eSIM admita varios perfiles al mismo tiempo. A pesar de los importantes ahorros de espacio y costos que ofrece la eSIM, esta falta de compatibilidad con SIM dual impide que los fabricantes de dispositivos adopten dispositivos solo con eSIM. Para brindar compatibilidad con SIM dual en un dispositivo solo con eSIM, los fabricantes de dispositivos deben incluir 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 de MEP disponible en el AOSP a partir de Android 13 aborda este problema.
Arquitectura de la eUICC
En esta sección, se describe la arquitectura del chip eSIM para dispositivos con MEP en diferentes versiones de Android y la arquitectura del chip eSIM para dispositivos sin MEP.
Android 14
En los dispositivos que ejecutan Android 14 o versiones posteriores, Android admite 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 selección 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 de MEP-A1 y MEP-B.
MEP-A1: Se selecciona ISD-R en el puerto 0 (el puerto de comando es 0) y los perfiles se seleccionan en los puertos de eSIM 1 y superiores. Los comandos de ES10 siempre se envían al puerto 0, y el puerto de comando y el puerto de destino siempre son diferentes. El LPA selecciona el puerto.
Figura 1: Modelo de selección de ISD-R de MEP-A1
MEP-B: ISD-R se selecciona en cualquier puerto y a cualquier puerto se le puede asignar un perfil. Los comandos de habilitación y de inhabilitación se envían al puerto en el que se debe habilitar o inhabilitar el perfil (en el que 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 y versiones posteriores, en los dispositivos que admiten MEP, la ranura para eSIM contiene varios puertos de eUICC en los que cada puerto puede tener un perfil habilitado. Como se muestra en la Figura 3, con esta arquitectura, una sola eUICC (una sola ranura física) admite la función de SIM doble en espera (DSDS) porque cada puerto de la eUICC se vincula a una banda base del módem. La HAL y las APIs de Android 13 son independientes de la variante de MEP.
Figura 3: Arquitectura del chip 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 admite DSDS.
Figura 4: Arquitectura del chip eSIM sin compatibilidad con MEP (Android 12 o versiones anteriores)
Flujo de información de la API para varios perfiles habilitados
En la Figura 5, se describe el flujo de información de MEP para la 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: SIM física (pSIM), SIM integrada (iSIM) y SIM integrada (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 una ranura lógica y que UiccSlot
(ranura física) se asigne a varias ranuras lógicas.
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 los detalles sobre los requisitos de la HAL, las APIs y la interfaz de usuario. Los fabricantes de dispositivos deben trabajar con los proveedores de SoC y los proveedores de chipsets de eSIM para admitir MEP.
Requisitos del HAL
Para admitir MEP para la eUICC, implementa las siguientes APIs de HAL de IRadio AIDL, 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 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 de APDU ES10 durante las operaciones de canales lógicos de la ICC.
CardStatus
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 especificados por SimPortSlotMapping
.
En el caso de los dispositivos que ejecutan Android 14 o versiones posteriores, el módem debe pasar el modo de 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 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 devolver 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 de MEP compatible con todos los eventos de CardStatus.
setSimSlotMapping
El método setSimSlotMapping
debe pasar un array de SimPortSlotMapping
.
El índice del array es la ranura lógica, y SimPortSlotMapping
especifica el puerto asignado correspondiente y el índice de la ranura física. 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 del AOSP deben admitir las siguientes APIs.
UiccCardInfo
- (Android 13 y versiones posteriores)
isMultipleEnabledProfilesSupported
: Devuelve 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 una eSIM que no admite MEP, se devuelve una lista de un elemento. - (Obsoleto)
getIccId
: Devuelve un ICCID. Dado que una UICC puede tener más de un ICCID para dispositivos con MEP, usaUiccPortInfo.getIccId()
en su lugar.
(Android 13 y versiones posteriores) UiccPortInfo
getIccId
: Devuelve el ICCID si hay una suscripción habilitada en este puerto.getPortIndex
: Devuelve el índice de puerto.getLogicalSlotIndex
: Devuelve el índice de la pila de módem lógico activa.
SubscriptionInfo
- (Android 13 y versiones posteriores)
getPortIndex
: Devuelve el índice de puerto en el que está habilitada la suscripción. Si la suscripción está inhabilitada, se muestraINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
: Cambia a una suscripción determinada. Las apps que no tienen privilegios de operador en las suscripciones activas usan este método. Cuando se llama, la plataforma resuelve internamente el índice de puerto a través de un diálogo de tres opciones para inhabilitar la suscripción activa seleccionada si no hay puertos disponibles. Las apps que se segmentan para 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
(agregado 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 apps de llamadas con privilegios de operador sobre las suscripciones activas pueden especificar en qué puerto habilitar la suscripción. - (Android 13 y versiones posteriores)
isSimPortAvailable
: Devuelve si el índice de puerto que se pasa está disponible. Un puerto está disponible si no tiene una suscripción habilitada o si la app de llamadas tiene privilegios de 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 del LPA debe admitir esta función 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) solo pasa el índice de ranura física para obtener un objetosimApplicationState
. - (Android 13 y versiones posteriores)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Asigna las ranuras lógicas a las ranuras y los puertos físicos. - (Android 13 y versiones posteriores)
Collection<UiccSlotMapping> getSimSlotMapping
: Obtiene la asignación de ranuras lógicas a ranuras físicas de SIM y a índices de puertos.
Interfaz de usuario
Para resolver la ambigüedad de la selección de puertos de eSIM, en los dispositivos que admiten MEP, los usuarios deben poder inhabilitar una de las suscripciones activas para habilitar una nueva. En Android 13, el AOSP incluye un flujo de usuarios con un diálogo de tres opciones que se puede aplicar a los flujos de usuarios de habilitación de suscripciones 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 los siguientes parámetros de configuración:
Implementación de LPA
Para admitir el MEP, asegúrate de que tu implementación de la 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 pasen 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ódem, chip de eUICC y SO de eSIM para garantizar que el dispositivo pueda hacer lo siguiente:
- Se pueden habilitar dos perfiles de eSIM y adjuntarlos a dos redes diferentes.
- Los perfiles de eSIM se pueden activar y desactivar en cualquier puerto de eSIM.
- Hay un flujo de UX que activa la app de la empresa de telefonía celular y que permite a los usuarios cambiar de perfil.
Recomendación para operadores
Para garantizar que los usuarios no pierdan el servicio cuando muevan perfiles de eSIM de un puerto a otro, recomendamos que los operadores brinden asistencia para lo siguiente:
- Asignación fluida de IMEI y SIM
- Varios ICCIDs o SIMs para cada identificador de eUICC (EID)