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 équipés d'Android 12 ou version antérieure, AOSP offre une prise en charge limitée permettant à une seule eSIM de prendre en charge plusieurs profils en même temps. Malgré les économies importantes d'espace et de coûts offertes par l'eSIM, ce manque de prise en charge de la double carte SIM empêche les fabricants d'appareils d'adopter des appareils uniquement eSIM. Pour fournir une prise en charge de la double carte SIM sur un appareil uniquement eSIM, les fabricants d'appareils doivent intégrer deux éléments eSIM dans l'appareil, ce qui augmente les coûts de la 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 : l'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. Le LPA sélectionne le port.
Figure 1. Modèle de sélection ISD-R MEP-A1
MEP-B : l'ISD-R est sélectionné sur n'importe quel port, et n'importe quel port peut être attribué à un profil. Les commandes d'activation et de désactivation sont envoyées au port où le profil doit être activé ou désactivé (où une actualisation est en attente). Le port de commande et le port cible sont toujours les mêmes.
Figure 2. Modèle de sélection ISD-R MEP-B
Android 13
Dans Android 13 ou version ultérieure, sur les appareils compatibles avec MEP, l'emplacement eSIM contient plusieurs ports eUICC où chaque port peut avoir un profil activé. Comme illustré dans la figure 3, avec cette architecture, une seule eUICC (un seul emplacement physique) est compatible avec la double carte SIM en mode veille (DSDS), car chaque port eUICC est lié à une bande de base de modem. Les API et HAL Android 13 sont indépendants de la variante MEP.
Figure 3. Architecture de la puce eSIM avec prise en charge de 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é dans la figure 4, l'emplacement eSIM n'est compatible qu'avec un seul profil activé à la fois. Cela signifie que l'appareil n'est pas compatible avec 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 SIM intégrée (eSIM). Pour une eUICC avec plusieurs ports, un seul objet UiccSlot et un seul objet UiccCard sont mappés à plusieurs instances UiccPort. Chaque instance UiccPort peut être liée à une instance UiccProfile au maximum. Ce flux permet à UiccPort de mapper un emplacement logique et à UiccSlot (emplacement physique) de mapper plusieurs emplacements logiques.
Figure 5. Flux d'informations pour eUICC avec prise en charge de 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 HAL IRadio AIDL suivantes,
situées dans /platform/hardware/interfaces/radio/aidl/aidl_api.
Les appareils équipés d'Android 14 ou version ultérieure doivent utiliser la
version IRadio 2.1 des interfaces HAL, qui utilisent
MultipleEnabledProfileMode (modèle de sélection ISD-R compatible avec le modem
ou l'eUICC) et transmettent les informations de commande APDU ES10 lors des opérations de canal logique 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 du port
et l'index de l'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'
SimPortInfo interface, qui comprend l'index du port, l'ICCID pour
le 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 setSimSlotMapping méthode doit transmettre un tableau de
SimPortSlotMapping. L'index du tableau est l'emplacement logique, et SimPortSlotMapping spécifie le port mappé et l'index 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 compatibles avec plusieurs profils activés dans la pile de téléphonie AOSP doivent être compatibles avec les API suivantes.
UiccCardInfo
- (Android 13 ou version ultérieure)
isMultipleEnabledProfilesSupported: indique si cette UICC est compatible avec MEP. - (Android 13 ou version ultérieure)
getPorts: renvoie la liste de tous les ports possibles pour une UICC particulière. Si l'UICC est une pSIM 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, utilisez plutôtUiccPortInfo.getIccId().
(Android 13 ou version ultérieure) 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 modem logique active.
SubscriptionInfo
- (Android 13 ou version ultérieure)
getPortIndex: renvoie l'index du port sur lequel l'abonnement est activé. Si l'abonnement est désactivé, renvoieINVALID_PORT_ID -1.
EuiccManager
switchToSubscription: passe à 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 sélection à trois choix dialogue pour désactiver l'abonnement actif sélectionné s'il n'y a pas de ports disponibles. Les applications ciblant Android 13 ou version ultérieure 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 du port spécifié.- (Android 13 ou version ultérieure)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): passe à un abonnement donné. Les applications appelantes disposant de privilèges d'opérateur sur les abonnements actifs peuvent spécifier le port sur lequel activer l'abonnement. - (Android 13 ou version ultérieure)
isSimPortAvailable: indique si l'index du port transmis est disponible. Un port est disponible s'il n'a pas d'abonnement activé ou si l'application appelante dispose de privilèges d'opérateur sur l'abonnement installé sur le port sélectionné.
EuiccService
- (Android 13 ou version ultérieure)
onSwitchToSubscriptionWithPort: passe à un abonnement donné sur un port spécifié. L'implémentation LPA doit être compatible avec cette fonctionnalité sur Android 13 ou version ultérieure.
TelephonyManager
- (Android 13 ou version ultérieure)
getSimApplicationState: renvoie une constante indiquant l'état de l'application de la carte. Cette API transmet à la fois un index d'emplacement physique et un index de port. LagetSimApplicationState(int physicalSlotIndex)méthode (obsolète) ne transmet que l'index de l'emplacement physique pour obtenir un objetsimApplicationState. - (Android 13 ou version ultérieure)
setSimSlotMapping(Collection<UiccSlotMapping> slots): mappe les emplacements logiques aux emplacements physiques et aux ports. - (Android 13 ou version ultérieure)
Collection<UiccSlotMapping> getSimSlotMapping: obtient le mappage des emplacements logiques aux emplacements SIM physiques et aux index de port.
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, AOSP inclut un parcours utilisateur avec une boîte de dialogue à trois choix qui peut être appliquée aux parcours utilisateur d'activation d'abonnement à partir de l'application Paramètres. La figure 6 montre un exemple de ce parcours UX.
Figure 6. Parcours utilisateur pour activer un abonnement SIM
Commutateurs de fonctionnalité
Pour prendre en charge MEP, les appareils doivent déclarer les commutateurs de fonctionnalité suivants :
Implémentation LPA
Pour prendre en charge MEP, assurez-vous que votre LPA implémentation répond aux exigences suivantes :
- Implémente les API de EuiccService pour prendre en charge plusieurs ports.
- Utilise les API pour la sélection des ports et l'activation des profils.
- Fournit une expérience utilisateur permettant aux applications d'opérateurs d'activer des profils sur les 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 de système d'exploitation eSIM pour confirmer que l'appareil peut effectuer les opérations suivantes :
- Deux profils eSIM peuvent être activés et associés à 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 vous assurer que les utilisateurs ne perdent pas le service lorsqu'ils déplacent des profils eSIM d'un port à un autre, nous vous recommandons de prendre en charge les éléments suivants :
- Mappage fluide de l'IMEI et de la SIM
- Plusieurs ICCID ou SIM pour chaque identifiant eUICC (EID)