Pour les appareils équipés d'Android 13 ou version ultérieure, Android est compatible avec plusieurs profils activés (MEP) pour l'eUICC. Cette fonctionnalité permet aux appareils de prendre en charge la double carte SIM à l'aide d'une seule puce eSIM, qui peut contenir plusieurs profils SIM et se connecter à deux opérateurs différents en même temps. Les fabricants d'appareils doivent collaborer avec les fournisseurs de SoC et de chipsets eSIM pour intégrer cette fonctionnalité à leurs appareils.
Arrière-plan
Sur les appareils exécutant Android 12 ou une version antérieure, l'AOSP offre une compatibilité limitée permettant à une seule eSIM de prendre en charge plusieurs profils en même temps. Malgré les économies d'espace et de coûts importantes offertes par l'eSIM, ce manque de prise en charge de la double SIM empêche les fabricants d'appareils d'adopter des appareils uniquement eSIM. Pour prendre en charge la double carte SIM sur un appareil eSIM uniquement, les fabricants d'appareils doivent intégrer deux éléments eSIM dans l'appareil, ce qui augmente les coûts de nomenclature et entraîne une mauvaise expérience utilisateur pour la gestion des abonnements. La fonctionnalité MEP disponible dans AOSP à partir d'Android 13 résout ce problème.
Architecture eUICC
Cette section décrit l'architecture de la puce eSIM pour les appareils avec MEP pour différentes versions d'Android, ainsi que l'architecture de la puce eSIM pour les appareils sans MEP.
Android 14
Pour les appareils équipés d'Android 14 ou version ultérieure, Android est compatible avec les options MEP-A1 et MEP-B pour la sélection de la racine du domaine de sécurité de l'émetteur (ISD-R) et la sélection des ports eSIM, comme spécifié dans GSMA SGP V22 3.0. Les modèles de sélection ISD-R MEP-A1 et MEP-B sont décrits ci-dessous.
MEP-A1 : ISD-R est sélectionné sur le port 0 (le port de commande est 0) et les profils sont sélectionnés sur les ports eSIM 1 et supérieurs. Les commandes ES10 sont toujours envoyées au port 0, et le port de commande et le port cible sont toujours différents. L'autorité portuaire sélectionne le port.
Figure 1 : Modèle de sélection MEP-A1 ISD-R
MEP-B : ISD-R est sélectionné sur n'importe quel port, et un profil peut être attribué à n'importe quel port. Les commandes d'activation et de désactivation sont envoyées au port où le profil doit être activé ou désactivé (lorsqu'une actualisation est en attente). Le port de commande et le port cible sont toujours identiques.
Figure 2. Modèle de sélection MEP-B ISD-R
Android 13
Dans Android 13 ou version ultérieure, sur les appareils compatibles MEP, l'emplacement eSIM contient plusieurs ports eUICC, dont chacun peut avoir un profil activé. Comme le montre la figure 3, avec cette architecture, une seule eUICC (un seul emplacement physique) est compatible avec la technologie Dual SIM Dual Standby (DSDS), car chaque port eUICC est associé à une bande de base de modem. Les API et HAL Android 13 sont indépendantes de la variante MEP.
Figure 3 : Architecture de la puce eSIM avec prise en charge MEP (Android 13 ou version ultérieure)
Android 12 et versions antérieures
Pour les appareils équipés d'Android 12 ou version antérieure sans MEP, comme illustré à la figure 4, l'emplacement eSIM ne prend en charge qu'un seul profil activé à la fois et l'appareil n'est pas compatible avec la fonctionnalité DSDS.
Figure 4 : Architecture de la puce eSIM sans prise en charge de MEP (Android 12 ou version antérieure)
Flux d'informations de l'API pour plusieurs profils activés
La figure 5 décrit le flux d'informations pour MEP pour eUICC dans Android 13. Le framework de téléphonie inclut la classe UiccPort
, qui représente la structure physique sur l'eUICC. La classe UiccPort
est utilisée pour tous les types de cartes SIM : SIM physique (pSIM), SIM intégrée (iSIM) et eSIM. Pour une eUICC avec plusieurs ports, un seul objet UiccSlot
et un seul objet UiccCard
correspondent à plusieurs instances UiccPort
. Chaque instance UiccPort
ne peut être associée qu'à une seule instance UiccProfile
. Ce flux permet à UiccPort
de correspondre à un emplacement logique et à UiccSlot
(emplacement physique) de correspondre à plusieurs emplacements logiques.
Figure 5. Flux d'informations pour l'eUICC avec prise en charge MEP
Implémentation
Cette section explique comment implémenter la fonctionnalité MEP, y compris des informations sur les exigences HAL, les API et l'interface utilisateur. Les fabricants d'appareils doivent collaborer avec les fournisseurs de SoC et de chipsets eSIM pour prendre en charge MEP.
Exigences HAL
Pour prendre en charge MEP pour eUICC, implémentez les API IRadio AIDL HAL suivantes, disponibles dans /platform/hardware/interfaces/radio/aidl/aidl_api
.
Les appareils exécutant Android 14 ou version ultérieure doivent utiliser la version 2.1 des interfaces HAL IRadio, qui utilisent MultipleEnabledProfileMode
(modèle de sélection ISD-R pris en charge par le modem ou l'eUICC) et transmettent les informations de la commande APDU ES10 lors des opérations sur les canaux logiques ICC.
CardStatus
Le modem doit être compatible avec l'API CardStatus
en réponse à la méthode getIccCardStatusResponse
. La réponse doit inclure l'index de port et l'index d'emplacement physique spécifiés par SimPortSlotMapping
.
Pour les appareils équipés d'Android 14 ou version ultérieure, le modem doit transmettre le mode MEP compatible avec tous les événements CardStatus.
SimSlotStatus
Le modem doit être compatible avec l'API SimSlotStatus
en réponse à la méthode getSimSlotsStatus
. L'état de l'emplacement SIM inclut un tableau de l'interface SimPortInfo
, qui comprend l'index du port, l'ICCID du profil activé et l'état du port. Le modem doit renvoyer au moins deux objets SimPortInfo
.
Pour les appareils équipés d'Android 14 ou version ultérieure, le modem doit transmettre le mode MEP compatible avec tous les événements CardStatus.
setSimSlotMapping
La méthode setSimSlotMapping
doit transmettre un tableau de SimPortSlotMapping
.
L'index du tableau est l'emplacement logique, et SimPortSlotMapping
spécifie l'index du port et de l'emplacement physique correspondants. La méthode setSimSlotMapping
définit le mappage des ports aux emplacements logiques. L'application LPA utilise cette méthode pour sélectionner le port actif.
API compatibles avec MEP pour eUICC
Les appareils Android qui prennent en charge plusieurs profils activés dans la pile de téléphonie AOSP doivent être compatibles avec les API suivantes.
UiccCardInfo
- (Android 13 et versions ultérieures)
isMultipleEnabledProfilesSupported
: renvoie une valeur indiquant si cette UICC est compatible avec MEP. - (Android 13 et versions ultérieures)
getPorts
: Renvoie la liste de tous les ports possibles pour une UICC donnée. Si la carte UICC est une carte SIM physique ou une eSIM qui n'est pas compatible avec MEP, renvoie une liste d'un seul élément. - (Obsolète)
getIccId
: renvoie un ICCID. Étant donné qu'une UICC peut avoir plusieurs ICCID pour les appareils avec MEP, utilisezUiccPortInfo.getIccId()
à la place.
(Android 13 et versions ultérieures) UiccPortInfo
getIccId
: renvoie l'ICCID s'il existe un abonnement activé sur ce port.getPortIndex
: Renvoie l'index du port.getLogicalSlotIndex
: renvoie l'index de la pile de modems logiques active.
SubscriptionInfo
- (Android 13 et versions ultérieures)
getPortIndex
: Renvoie l'index du port sur lequel l'abonnement est activé. Si l'abonnement est désactivé, la valeurINVALID_PORT_ID -1
est renvoyée.
EuiccManager
switchToSubscription
: bascule vers un abonnement donné. Utilisé par les applications qui ne disposent pas de privilèges d'opérateur sur les abonnements actifs. Lorsqu'elle est appelée, la plate-forme résout en interne l'index du port via une boîte de dialogue à trois choix pour désactiver l'abonnement actif sélectionné s'il n'y a pas de ports disponibles. Les applications ciblant Android 13 et les versions ultérieures ne doivent pas utiliser cette API pour désactiver un abonnement en transmettant un ID d'abonnement non valide. Elles doivent plutôt utiliser la méthodeswitchToSubscription
(ajoutée dans Android 13) avec l'index de port spécifié.- (Android 13 et versions ultérieures)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Passe à un abonnement donné. Les applications d'appel disposant de privilèges d'opérateur sur les abonnements actifs peuvent spécifier le port sur lequel activer l'abonnement. - (Android 13 et versions ultérieures)
isSimPortAvailable
: Indique si l'index de port transmis est disponible. Un port est disponible s'il n'est associé à aucun abonnement ou si l'application d'appel dispose d'un privilège d'opérateur sur l'abonnement installé sur le port sélectionné.
EuiccService
- (Android 13 et versions ultérieures)
onSwitchToSubscriptionWithPort
: Passe à un abonnement donné sur un port spécifié. L'implémentation LPA doit être compatible avec cette fonctionnalité sur Android 13 et versions ultérieures.
TelephonyManager
- (Android 13 et versions ultérieures)
getSimApplicationState
: Renvoie une constante indiquant l'état de l'application de carte. Cette API transmet à la fois un index d'emplacement physique et un index de port. La méthodegetSimApplicationState(int physicalSlotIndex)
(obsolète) ne transmet que l'index de l'emplacement physique pour obtenir un objetsimApplicationState
. - (Android 13 et versions ultérieures)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Mappe les emplacements logiques aux emplacements et ports physiques. - (Android 13 et versions ultérieures)
Collection<UiccSlotMapping> getSimSlotMapping
: obtient le mappage des emplacements logiques vers les emplacements SIM physiques et les index de ports.
Interface utilisateur
Pour résoudre l'ambiguïté de la sélection du port eSIM, sur les appareils compatibles avec MEP, les utilisateurs doivent pouvoir désactiver l'un des abonnements actifs pour activer un nouvel abonnement. Dans Android 13, l'AOSP inclut un flux utilisateur avec une boîte de dialogue à trois choix qui peut être appliquée aux flux utilisateur d'activation d'abonnement à partir de l'application Paramètres. La figure 6 montre un exemple de ce flux d'expérience utilisateur.
Figure 6. Parcours utilisateur pour activer un abonnement SIM
Feature flags
Pour prendre en charge MEP, les appareils doivent déclarer les indicateurs de fonctionnalité suivants :
Implémentation de LPA
Pour prendre en charge MEP, assurez-vous que l'implémentation de votre LPA répond aux exigences suivantes :
- Implémente les API de EuiccService pour prendre en charge plusieurs ports.
- Utilise les API pour la sélection du port et l'activation du profil.
- Fournit une UX permettant aux applications des opérateurs d'activer des profils sur des ports sélectionnés.
Validation
Pour tester votre implémentation de la fonctionnalité MEP, assurez-vous que les builds réussissent les cas de test CTS suivants (pour les API publiques) :
/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Les fabricants d'appareils doivent également collaborer avec leurs fournisseurs de modem, de puce eUICC et d'OS eSIM pour s'assurer que l'appareil peut effectuer les opérations suivantes :
- Vous pouvez activer deux profils eSIM et les associer à deux réseaux différents.
- Les profils eSIM peuvent être activés et désactivés sur n'importe quel port eSIM.
- Un parcours UX est déclenché par l'application de l'opérateur, ce qui permet aux utilisateurs de changer de profil.
Recommandation pour les opérateurs
Pour s'assurer que les utilisateurs ne perdent pas le service lorsqu'ils déplacent des profils eSIM d'un port à un autre, nous recommandons aux opérateurs de prendre en charge les éléments suivants :
- Mappage fluide de l'IMEI et de la carte SIM
- Plusieurs ICCID ou SIM pour chaque identifiant eUICC (EID)