搭載 Android 13 以上版本的裝置支援 eUICC 的多個已啟用設定檔 (MEP)。這項功能可讓裝置透過單一 eSIM 晶片支援雙 SIM 卡,該晶片可有多個 SIM 卡設定檔,並同時連線至兩個不同的電信業者。裝置製造商必須與 SoC 供應商和 eSIM 晶片組供應商合作,才能在裝置上整合這項功能。
背景
在搭載 Android 12 以下版本的裝置上,AOSP 僅提供有限的支援,允許單一 eSIM 卡同時支援多個設定檔。儘管 eSIM 卡可大幅節省空間和成本,但缺乏雙 SIM 卡支援功能,導致裝置製造商無法採用僅支援 eSIM 卡的裝置。如要在僅支援 eSIM 卡的裝置上提供雙 SIM 卡支援,裝置製造商必須在裝置中封裝兩個 eSIM 元素,這會增加物料清單 (BOM) 成本,並導致訂閱管理的使用者體驗不佳。Android 13 以上版本 AOSP 提供的 MEP 功能可解決這個問題。
eUICC 架構
本節說明不同 Android 版本裝置的 MEP eSIM 晶片架構,以及沒有 MEP 的裝置 eSIM 晶片架構。
Android 14
如果裝置搭載 Android 14 以上版本,Android 支援 MEP-A1 和 MEP-B 選項,可選取發卡機構安全網域根目錄 (ISD-R) 和 eSIM 連接埠,詳情請參閱 GSMA SGP V22 3.0。以下說明 MEP-A1 和 MEP-B ISD-R 選取模型。
MEP-A1:在連接埠 0 上選取 ISD-R (指令連接埠為 0),並在 eSIM 連接埠 1 以上選取設定檔。ES10 指令一律會傳送至連接埠 0,且指令連接埠和目標連接埠一律不同。LPA 會選取通訊埠。
圖 1. MEP-A1 ISD-R 選取模型
MEP-B:在任何通訊埠上選取 ISD-R,且任何通訊埠都可以指派設定檔。啟用和停用指令會傳送至需要啟用或停用設定檔的通訊埠 (等待重新整理)。指令通訊埠和目標通訊埠一律相同。
圖 2. MEP-B ISD-R 選取模型
Android 13
在 Android 13 以上版本中,如果裝置支援 MEP,eSIM 卡槽會包含多個 eUICC 連接埠,每個連接埠都可以啟用設定檔。如圖 3 所示,採用這種架構時,單一 eUICC (單一實體插槽) 會將每個 eUICC 連接埠連結至數據機基頻,藉此支援雙卡雙待模式 (DSDS)。Android 13 HAL 和 API 與 MEP 變體無關。
圖 3. 支援 MEP 的 eSIM 晶片架構 (Android 13 以上版本)
Android 12 以下版本
如圖 4 所示,如果裝置搭載 Android 12 以下版本,且不支援 MEP,則 eSIM 卡槽一次只能啟用一個設定檔,且裝置無法支援 DSDS。
圖 4:不支援 MEP 的 eSIM 晶片架構 (Android 12 以下版本)
啟用多個設定檔時的 API 資訊流程
圖 5 說明 Android 13 中 eUICC 的 MEP 資訊流程。電話架構包含 UiccPort
類別,代表 eUICC 上的實體結構。UiccPort
類別適用於所有類型的 SIM 卡:實體 SIM 卡 (pSIM)、整合式 SIM 卡 (iSIM) 和嵌入式 SIM 卡 (eSIM)。如果 eUICC 有多個連接埠,單一 UiccSlot
物件和 UiccCard
物件會對應至多個 UiccPort
執行個體。每個 UiccPort
執行個體最多只能連結至一個 UiccProfile
執行個體。這個流程可讓 UiccPort
對應至邏輯插槽,並讓 UiccSlot
(實體插槽) 對應至多個邏輯插槽。
圖 5. 支援 MEP 的 eUICC 資訊流程
實作
本節說明如何實作 MEP 功能,包括 HAL 需求、API 和使用者介面的詳細資料。裝置製造商應與 SoC 供應商和 eSIM 晶片組供應商合作,支援 MEP。
HAL 需求
如要支援 eUICC 的 MEP,請實作下列 IRadio AIDL HAL API,這些 API 位於 /platform/hardware/interfaces/radio/aidl/aidl_api
中。
搭載 Android 14 以上版本的裝置必須使用 HAL 介面的 IRadio 2.1 版,該版本會使用 MultipleEnabledProfileMode
(數據機或 eUICC 支援的 ISD-R 選取模型),並在 ICC 邏輯通道作業期間傳遞 ES10 APDU 指令資訊。
CardStatus
數據機必須支援 CardStatus
API,做為 getIccCardStatusResponse
方法的回應。回應必須包含 SimPortSlotMapping
指定的通訊埠索引和實體插槽索引。
如果是搭載 Android 14 以上版本的裝置,數據機必須通過支援的MEP 模式,並包含所有 CardStatus 事件。
SimSlotStatus
數據機必須支援 SimSlotStatus
API,做為 getSimSlotsStatus
方法的回應。SIM 卡插槽狀態包含介面陣列 SimPortInfo
,包括連接埠索引、已啟用設定檔的 ICCID,以及連接埠狀態。數據機必須傳回至少兩個 SimPortInfo
物件。
如果是搭載 Android 14 以上版本的裝置,數據機必須通過支援的MEP 模式,並包含所有 CardStatus 事件。
setSimSlotMapping
setSimSlotMapping
方法必須傳遞 SimPortSlotMapping
陣列。陣列的索引是邏輯插槽,而 SimPortSlotMapping
則指定對應的對應通訊埠和實體插槽索引。setSimSlotMapping
方法會設定通訊埠到邏輯插槽的對應。LPA 應用程式會使用這個方法選取啟用的連接埠。
支援 eUICC 的 MEP API
如果 Android 裝置支援多個已啟用的設定檔 (屬於 AOSP 電話堆疊),就必須支援下列 API。
UiccCardInfo
- (Android 13 以上版本)
isMultipleEnabledProfilesSupported
: 傳回這個 UICC 是否支援 MEP。 - (Android 13 以上版本)
getPorts
: 傳回特定 UICC 的所有可能通訊埠清單。如果 UICC 是不支援 MEP 的 pSIM 或 eSIM,則會傳回一個元素的清單。 - (已淘汰)
getIccId
: 傳回 ICCID。由於 UICC 可能有多個 ICCID,因此請改用UiccPortInfo.getIccId()
。
(Android 13 以上版本) UiccPortInfo
getIccId
: 如果這個通訊埠有已啟用的訂閱項目,則傳回 ICCID。getPortIndex
: 傳回通訊埠索引。getLogicalSlotIndex
: 傳回有效的邏輯數據機堆疊索引。
SubscriptionInfo
- (Android 13 以上版本)
getPortIndex
: 傳回啟用訂閱的連接埠索引。如果訂閱項目已停用,則會傳回INVALID_PORT_ID -1
。
EuiccManager
switchToSubscription
: 切換至指定訂閱項目。應用程式在有效訂閱項目中沒有電信業者權限時,會使用這項功能。呼叫時,平台會透過三選一的對話方塊,在內部解析通訊埠索引,以便在沒有可用通訊埠時停用所選的有效訂閱項目。如果應用程式指定 Android 13 以上版本為目標,就不得使用這個 API 傳遞無效的訂閱 ID 來停用訂閱項目,而必須使用switchToSubscription
方法 (Android 13 新增),並指定連接埠索引。- (Android 13 以上版本)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: 切換至指定方案。透過有效訂閱項目呼叫具備電信業者權限的應用程式時,可以指定要在哪個連接埠啟用訂閱項目。 - (Android 13 以上版本)
isSimPortAvailable
: 傳回傳遞的連接埠索引是否可用。如果沒有啟用任何訂閱方案,或是通話應用程式對所選連接埠上安裝的訂閱方案具有電信業者權限,則該連接埠可供使用。
EuiccService
- (Android 13 以上版本)
onSwitchToSubscriptionWithPort
: 在指定連接埠上切換至特定訂閱方案。LPA 實作項目必須支援 Android 13 以上版本。
TelephonyManager
- (Android 13 以上版本)
getSimApplicationState
: 傳回常數,指出卡片應用程式的狀態。這個 API 會傳遞實體插槽索引和連接埠索引。getSimApplicationState(int physicalSlotIndex)
方法 (已淘汰) 只會傳遞實體插槽索引,以取得simApplicationState
物件。 - (Android 13 以上版本)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: 將邏輯插槽對應至實體插槽和連接埠。 - (Android 13 以上版本)
Collection<UiccSlotMapping> getSimSlotMapping
: 取得從邏輯插槽到實體 SIM 卡插槽和連接埠索引的對應。
使用者介面
為解決 eSIM 卡埠選取的不明確問題,在支援 MEP 的裝置上,使用者必須能夠停用其中一個有效訂閱方案,才能啟用新的訂閱方案。在 Android 13 中,AOSP 包含使用者流程,其中有三種選項的對話方塊,可套用至「設定」應用程式的訂閱啟用使用者流程。圖 6 顯示這個 UX 流程的範例。
圖 6. 啟用 SIM 卡訂閱方案的使用者流程
Feature flags
如要支援 MEP,裝置必須宣告下列功能旗標:
導入 LPA
如要支援 MEP,請確保LPA實作項目符合下列規定:
- 實作 EuiccService 中的 API,支援多個連接埠。
- 使用 API 選取連接埠及啟用設定檔。
- 提供使用者體驗,讓電信業者應用程式在選取的通訊埠上啟用設定檔。
驗證
如要測試 MEP 功能的實作情形,請確認建構版本通過下列 CTS 測試案例 (適用於公開 API):
/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
。
裝置製造商也應與數據機、eUICC 晶片和 eSIM 作業系統供應商合作,確保裝置可以執行下列操作:
- 你可以啟用兩個 eSIM 設定檔,並連上兩個不同的網路。
- 你可以在任何 eSIM 卡連接埠啟用及停用 eSIM 卡設定檔。
- 電信業者應用程式會觸發使用者體驗流程,讓使用者切換設定檔。
給貨運公司的建議
為確保使用者將 eSIM 設定檔從一個連接埠移至另一個連接埠時不會失去服務,建議電信業者提供下列支援:
- IMEI 和 SIM 卡的流動對應
- 每個 eUICC 識別碼 (EID) 的多個 ICCID 或 SIM 卡