複数の有効なプロファイル

Android 13 以降を搭載したデバイスでは、eUICC 用の複数の有効なプロファイル(MEP)がサポートされます。この機能により、デバイスは単一の eSIM チップを使用したデュアル SIM をサポートできます。その場合、eSIM チップは複数の SIM プロファイルを持つことができ、2 つの異なる携帯通信会社に同時に接続することが可能です。デバイス メーカーがこの機能をデバイスに組み込むには、SoC ベンダーおよび eSIM チップセット ベンダーと協力する必要があります。

背景

Android 12 以前を搭載したデバイスの場合、AOSP は、単一の eSIM で複数のプロファイルを同時にサポートできる制限付きサポートを提供します。eSIM はスペースとコストを大幅に削減しますが、デュアル SIM のサポートの欠如は、デバイス メーカーが eSIM 専用デバイスを採用することを妨げる要因になります。デバイス メーカーが eSIM 専用デバイスでデュアル SIM をサポートするには、2 つの eSIM 要素をデバイスに組み込む必要があります。これは、部品表(BOM)のコストを増大させ、サブスクリプション管理のユーザー エクスペリエンスの低下を招きます。Android 13 以降では、AOSP で利用可能な MEP 機能によってこの問題が解決されています。

eUICC アーキテクチャの変更

このセクションでは、Android 13 を搭載したデバイス(MEP あり)と Android 12 以前を搭載したデバイス(MEP なし)における eSIM チップ アーキテクチャの比較を示します。図 1 に示すように、MEP をサポートするデバイスでは、eSIM スロットに複数の eUICC ポートがあり、各ポートに有効なプロファイルを設定できます。このアーキテクチャでは、各 eUICC ポートをモデム ベースバンドにリンクすることにより、単一の eUICC(単一の物理スロット)がデュアル SIM デュアル スタンバイ(DSDS)をサポートします。図 2 は、MEP がないデバイスの eSIM チップ アーキテクチャを示しています。

MEP をサポートする eSIM チップ アーキテクチャ

図 1. MEP をサポートする eSIM チップ アーキテクチャ(Android 13 以降)

MEP をサポートしない eSIM チップ アーキテクチャ

図 2. MEP をサポートしない eSIM チップ アーキテクチャ(Android 12 以前)

複数の有効なプロファイルの API 情報フロー

図 3 は、Android 13 における eUICC 用 MEP の情報フローを示しています。電話通信フレームワークには、eUICC 上の物理構造を表す UiccPort クラスがあります。UiccPort クラスは、物理 SIM(pSIM)、統合 SIM(iSIM)、埋め込み SIM(eSIM)というすべてのタイプの SIM カードで使用されます。複数のポートがある eUICC では、単一の UiccSlot オブジェクトと UiccCard オブジェクトが複数の UiccPort インスタンスにマッピングされます。各 UiccPort インスタンスがリンクできる UiccProfile インスタンスは最大で 1 つです。このフローでは、UiccPort を 1 つの論理スロットにマッピングし、UiccSlot(物理スロット)を複数の論理スロットにマッピングできます。

MEP 情報フロー

図 3. MEP をサポートする eUICC の情報フロー

実装

このセクションでは、MEP 機能を実装する方法を示し、HAL の要件、API、ユーザー インターフェースについて詳しく説明します。デバイス メーカーが MEP をサポートするには、SoC ベンダーおよび eSIM チップセット ベンダーと協力する必要があります。

HAL の要件

eUICC 用の MEP をサポートするには、以下の IRadio 2.0 AIDL HAL API を実装します。

CardStatus

モデムは、getIccCardStatusResponse メソッドへのレスポンスとして、CardStatus API をサポートする必要があります。レスポンスは、SimPortSlotMapping で指定されるポート インデックスと物理スロット インデックスを含む必要があります。

SimSlotStatus

モデムは、getSimSlotsStatus メソッドへのレスポンスとして、SimSlotStatus API をサポートする必要があります。SIM スロット ステータスには、SimPortInfo インターフェースの配列が含まれます。この配列には、ポート インデックス、有効なプロファイルの ICCID、ポートの状態が格納されています。モデムは、少なくとも 2 つの SimPortInfo オブジェクトを返す必要があります。

setSimSlotMapping

setSimSlotMapping メソッドは、SimPortSlotMapping の配列を渡す必要があります。配列のインデックスは論理スロットであり、SimPortSlotMapping は対応するマッピング済みポートと物理スロット インデックスを指定します。setSimSlotMapping メソッドは、ポートから論理スロットへのマッピングを設定します。LPA アプリは、このメソッドを使用してアクティブなポートを選択します。

eUICC 用の MEP をサポートする API

AOSP テレフォニー スタックの一部として複数の有効なプロファイルをサポートする Android デバイスは、以下の API をサポートする必要があります。

UiccCardInfo

  • (Android 13 以降)isMultipleEnabledProfilesSupported: この UICC が MEP をサポートするかどうかを返します。
  • (Android 13 以降)getPorts: 特定の UICC で使用可能なすべてのポートのリストを返します。UICC が MEP をサポートしない pSIM または eSIM である場合は、1 つの要素のみを含むリストを返します。
  • (非推奨)getIccId: ICCID を返します。UICC は MEP をサポートするデバイスで複数の ICCID を持つことができるので、代わりに UiccPortInfo.getIccId() を使用してください。

(Android 13 以降)UiccPortInfo

  • getIccId: このポートに有効なサブスクリプションがある場合は、ICCID を返します。
  • getPortIndex: ポート インデックスを返します。
  • getLogicalSlotIndex: アクティブな論理モデムスタック インデックスを返します。

SubscriptionInfo

  • (Android 13 以降)getPortIndex: サブスクリプションが有効になっているポート インデックスを返します。サブスクリプションが無効になっている場合は、INVALID_PORT_ID -1 を返します。

EuiccManager

  • switchToSubscription: 指定されたサブスクリプションに切り替えます。アクティブなサブスクリプションに対する携帯通信会社権限がないアプリで使用されます。このメソッドが呼び出されると、プラットフォームは、三択式の選択ダイアログを通じてポート インデックスを内部的に解決し、使用可能なポートがない場合は、選択されたアクティブなサブスクリプションを無効にします。Android 13 以降をターゲットとするアプリでは、無効なサブスクリプション ID を渡してサブスクリプションを無効にするためにこの API を使用してはなりません。代わりに、ポート インデックスを指定して switchToSubscription(Android 13 で追加されたメソッド)を使用してください。
  • (Android 13 以降)switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): 指定されたポートで指定されたサブスクリプションに切り替えます。アクティブなサブスクリプションに対する携帯通信会社権限を持つアプリを呼び出すことにより、どのポートでサブスクリプションを有効にするかを指定できます。
  • (Android 13 以降)isSimPortAvailable: ポート インデックスを渡せるかどうかを返します。ポートが使用できるのは、サブスクリプションが有効になっていない場合か、選択されたポートにインストールされているサブスクリプションに対する携帯通信会社権限を呼び出し元アプリが持っている場合です。

EuiccService

  • (Android 13 以降)onSwitchToSubscriptionWithPort: 指定されたポートで指定されたサブスクリプションに切り替えます。LPA 実装は、Android 13 以降でこれをサポートする必要があります。

TelephonyManager

ユーザー インターフェース

eSIM ポート選択のあいまいさを解決するには、MEP をサポートするデバイスで、ユーザーがアクティブなサブスクリプションのいずれかを無効にして新しいサブスクリプションを有効にできることが必要です。Android 13 では、AOSP により三択式のダイアログを含むユーザーフローが用意されています。このダイアログは、設定アプリからユーザーフローを有効にするサブスクリプションに適用できます。図 4 は、この UX フローの例を示しています。

MEP をサポートする SIM サブスクリプションのユーザーフロー

図 4. SIM サブスクリプションを有効にするユーザーフロー

機能フラグ

MEP をサポートするには、デバイスで以下の機能フラグを宣言する必要があります。

LPA 実装

MEP をサポートするには、LPA 実装が以下の要件を満たしていることを確認してください。

  • 複数のポートをサポートするために EuiccService の API を実装している。
  • ポートの選択とプロファイルの有効化を行う API を使用している。
  • 携帯通信会社アプリが選択されたポートでプロファイルを有効にできる UX を提供している。

検証

MEP 機能の実装をテストするには、ビルドが次の CTS テストケースに合格することを確認します(公開 API の場合): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts

また、デバイス メーカーは、モデム、eUICC チップ、eSIM OS のベンダーと協力して、デバイスで以下を実現する必要があります。

  • 2 つの eSIM プロファイルを有効にして 2 つの異なるネットワークに接続できる。
  • 任意の eSIM ポートで eSIM プロファイルを有効または無効にできる。
  • 携帯通信会社アプリによってトリガーされ、ユーザーがプロファイルを切り替えることができる UX フローが存在する。