Đối với các thiết bị chạy Android 13 trở lên, Android hỗ trợ nhiều hồ sơ đã bật (MEP) cho eUICC. Tính năng này cho phép các thiết bị hỗ trợ SIM kép bằng một khối eSIM duy nhất. Khối này có thể có nhiều hồ sơ SIM và có thể kết nối với hai nhà mạng khác nhau cùng một lúc. Nhà sản xuất thiết bị phải làm việc với các nhà cung cấp SoC và nhà cung cấp chipset eSIM để tích hợp tính năng này trên thiết bị của họ.
Thông tin khái quát
Trên các thiết bị chạy Android 12 trở xuống, AOSP chỉ hỗ trợ một phần trong việc cho phép một eSIM hỗ trợ nhiều hồ sơ cùng một lúc. Mặc dù eSIM giúp tiết kiệm đáng kể không gian và chi phí, nhưng việc không hỗ trợ SIM kép khiến các nhà sản xuất thiết bị không thể sử dụng các thiết bị chỉ có eSIM. Để hỗ trợ SIM kép trên thiết bị chỉ có eSIM, nhà sản xuất thiết bị phải đóng gói hai phần tử eSIM vào thiết bị, điều này làm tăng chi phí bảng kê khai thành phần (BOM) và dẫn đến trải nghiệm người dùng kém khi quản lý gói thuê bao. Tính năng MEP có trong AOSP từ Android 13 sẽ giải quyết vấn đề này.
Cấu trúc eUICC
Phần này mô tả cấu trúc của khối eSIM cho các thiết bị có MEP cho nhiều phiên bản Android và cấu trúc của khối eSIM cho các thiết bị không có MEP.
Android 14
Đối với các thiết bị chạy Android 14 trở lên, Android hỗ trợ các tuỳ chọn MEP-A1 và MEP-B để chọn thư mục gốc của miền bảo mật của tổ chức phát hành (ISD-R) và chọn cổng eSIM như được chỉ định trong GSMA SGP V22 3.0. Phần sau đây mô tả các mô hình lựa chọn ISD-R MEP-A1 và MEP-B.
MEP-A1: ISD-R được chọn trên cổng 0 (cổng lệnh là 0) và các hồ sơ được chọn trên cổng eSIM 1 trở lên. Các lệnh ES10 luôn được gửi đến cổng 0, đồng thời cổng lệnh và cổng mục tiêu luôn khác nhau. LPA sẽ chọn cổng.
Hình 1. Mô hình lựa chọn MEP-A1 ISD-R
MEP-B: ISD-R được chọn trên bất kỳ cổng nào và bạn có thể chỉ định một hồ sơ cho bất kỳ cổng nào. Các lệnh bật và tắt được gửi đến cổng cần bật hoặc tắt hồ sơ (trong đó quá trình làm mới đang chờ xử lý). Cổng lệnh và cổng mục tiêu luôn giống nhau.
Hình 2. Mô hình lựa chọn MEP-B ISD-R
Android 13
Trong Android 13 trở lên, trên các thiết bị hỗ trợ MEP, khe eSIM chứa nhiều cổng eUICC, trong đó cổng có thể có hồ sơ đã bật. Như minh hoạ trong Hình 3, với cấu trúc này, một eUICC (một khe cắm thực) hỗ trợ chế độ hai SIM hai chế độ chờ (DSDS) bằng cách liên kết từng cổng eUICC với một băng tần cơ sở của modem. HAL và API của Android 13 độc lập với biến thể MEP.
Hình 3. Kiến trúc chip eSIM có hỗ trợ MEP (Android 13 trở lên)
Android 12 trở xuống
Đối với các thiết bị chạy Android 12 trở xuống không có MEP như trong Hình 4, khe eSIM chỉ hỗ trợ một hồ sơ đã bật tại một thời điểm và thiết bị không thể hỗ trợ DSDS.
Hình 4. Cấu trúc chip eSIM không hỗ trợ MEP (Android 12 trở xuống)
Luồng thông tin API cho nhiều hồ sơ đã bật
Hình 5 mô tả luồng thông tin cho MEP cho eUICC trong Android 13. Khung điện thoại bao gồm lớp UiccPort
, đại diện cho cấu trúc thực tế trên eUICC. Lớp UiccPort
được dùng cho tất cả các loại thẻ SIM: thẻ SIM thực (pSIM), thẻ SIM tích hợp (iSIM) và thẻ SIM gắn sẵn (eSIM). Đối với eUICC có nhiều cổng, một đối tượng UiccSlot
và đối tượng UiccCard
sẽ liên kết với nhiều thực thể UiccPort
. Mỗi thực thể UiccPort
có thể liên kết với tối đa một thực thể UiccProfile
. Quy trình này cho phép UiccPort
liên kết với một khe logic và UiccSlot
(khe vật lý) để liên kết với nhiều khe logic.
Hình 5. Luồng thông tin cho eUICC có hỗ trợ MEP
Triển khai
Phần này mô tả cách triển khai tính năng MEP, bao gồm cả thông tin chi tiết về các yêu cầu của HAL, API và giao diện người dùng. Nhà sản xuất thiết bị nên làm việc với các nhà cung cấp SoC và nhà cung cấp bộ vi mạch eSIM để hỗ trợ MEP.
Yêu cầu về HAL
Để hỗ trợ MEP cho eUICC, hãy triển khai các API HAL IRadio AIDL sau đây, nằm trong /platform/hardware/interfaces/radio/aidl/aidl_api
.
Các thiết bị chạy Android 14 trở lên phải sử dụng phiên bản IRadio 2.1 của giao diện HAL. Giao diện này sử dụng MultipleEnabledProfileMode
(mô hình lựa chọn ISD-R do modem hoặc eUICC hỗ trợ) và truyền thông tin lệnh APDU ES10 trong quá trình hoạt động của kênh logic ICC.
CardStatus
Modem phải hỗ trợ API CardStatus
để phản hồi phương thức getIccCardStatusResponse
. Phản hồi phải bao gồm chỉ mục cổng và chỉ mục khe cắm thực tế do SimPortSlotMapping
chỉ định.
Đối với các thiết bị chạy Android 14 trở lên, modem phải truyền chế độ MEP được hỗ trợ với tất cả sự kiện CardStatus.
SimSlotStatus
Modem phải hỗ trợ API SimSlotStatus
để phản hồi phương thức getSimSlotsStatus
. Trạng thái của khe SIM bao gồm một mảng giao diện SimPortInfo
, bao gồm chỉ mục cổng, ICCID cho hồ sơ đã bật và trạng thái cổng. Modem phải trả về ít nhất hai đối tượng SimPortInfo
.
Đối với các thiết bị chạy Android 14 trở lên, modem phải truyền chế độ MEP được hỗ trợ với tất cả sự kiện CardStatus.
setSimSlotMapping
Phương thức setSimSlotMapping
phải truyền một mảng SimPortSlotMapping
.
Chỉ mục của mảng là khe logic và SimPortSlotMapping
chỉ định cổng được liên kết tương ứng và chỉ mục khe thực. Phương thức setSimSlotMapping
thiết lập mối liên kết từ cổng đến khe logic. Ứng dụng LPA sử dụng phương thức này để chọn cổng đang hoạt động.
API hỗ trợ MEP cho eUICC
Các thiết bị Android hỗ trợ nhiều hồ sơ đã bật trong ngăn xếp điện thoại AOSP phải hỗ trợ các API sau.
UiccCardInfo
- (Android 13 trở lên)
isMultipleEnabledProfilesSupported
: Trả về kết quả cho biết UICC này có hỗ trợ MEP hay không. - (Android 13 trở lên)
getPorts
: Trả về danh sách tất cả cổng có thể có cho một UICC cụ thể. Nếu UICC là pSIM hoặc eSIM không hỗ trợ MEP, hãy trả về danh sách gồm một phần tử. - (Không dùng nữa)
getIccId
: Trả về một ICCID. Vì một UICC có thể có nhiều ICCID cho các thiết bị có MEP, nên hãy sử dụngUiccPortInfo.getIccId()
.
(Android 13 trở lên) UiccPortInfo
getIccId
: Trả về ICCID nếu có gói thuê bao được bật trên cổng này.getPortIndex
: Trả về chỉ mục cổng.getLogicalSlotIndex
: Trả về chỉ mục ngăn xếp modem logic đang hoạt động.
SubscriptionInfo
- (Android 13 trở lên)
getPortIndex
: Trả về chỉ mục cổng mà gói thuê bao được bật. Nếu gói thuê bao bị tắt, hãy trả vềINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
: Chuyển sang một gói thuê bao nhất định. Được các ứng dụng không có đặc quyền của nhà mạng đối với gói thuê bao đang hoạt động sử dụng. Khi được gọi, nền tảng sẽ phân giải chỉ mục cổng trong nội bộ thông qua một hộp thoại lựa chọn gồm 3 lựa chọn để tắt gói thuê bao đang hoạt động đã chọn nếu không có cổng nào. Các ứng dụng nhắm đến Android 13 trở lên không được sử dụng API này để tắt gói thuê bao bằng cách truyền mã gói thuê bao không hợp lệ; thay vào đó, các ứng dụng phải sử dụng phương thứcswitchToSubscription
(được thêm vào Android 13) với chỉ mục cổng được chỉ định.- (Android 13 trở lên)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback)
: Chuyển sang một gói thuê bao nhất định. Việc gọi các ứng dụng có đặc quyền của nhà mạng đối với các gói thuê bao đang hoạt động có thể chỉ định cổng để bật gói thuê bao. - (Android 13 trở lên)
isSimPortAvailable
: Trả về liệu có chỉ mục cổng truyền hay không. Cổng có sẵn nếu không có gói thuê bao nào được bật hoặc ứng dụng gọi có đặc quyền của nhà mạng đối với gói thuê bao được cài đặt trên cổng đã chọn.
EuiccService
- (Android 13 trở lên)
onSwitchToSubscriptionWithPort
: Chuyển sang một gói thuê bao nhất định trên một cổng đã chỉ định. Việc triển khai LPA phải hỗ trợ tính năng này trên Android 13 trở lên.
TelephonyManager
- (Android 13 trở lên)
getSimApplicationState
: Trả về một hằng số cho biết trạng thái của ứng dụng thẻ. API này truyền cả chỉ mục khe cắm vật lý và chỉ mục cổng. Phương thứcgetSimApplicationState(int physicalSlotIndex)
(không dùng nữa) chỉ truyền chỉ mục khe cắm thực để lấy đối tượngsimApplicationState
. - (Android 13 trở lên)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Liên kết các khe logic với các khe và cổng vật lý. - (Android 13 trở lên)
Collection<UiccSlotMapping> getSimSlotMapping
: Lấy mối liên kết từ khe logic đến khe sim thực và chỉ mục cổng.
Giao diện người dùng
Để giải quyết sự mơ hồ khi chọn cổng eSIM, trên các thiết bị hỗ trợ MEP, người dùng phải có thể tắt một trong các gói thuê bao đang hoạt động để bật một gói thuê bao mới. Trong Android 13, AOSP bao gồm một luồng người dùng với hộp thoại có 3 lựa chọn có thể được áp dụng cho luồng người dùng bật gói thuê bao từ ứng dụng Cài đặt. Hình 6 cho thấy ví dụ về luồng trải nghiệm người dùng này.
Hình 6. Quy trình người dùng để bật gói thuê bao SIM
Cờ tính năng
Để hỗ trợ MEP, thiết bị phải khai báo các cờ tính năng sau:
Triển khai LPA
Để hỗ trợ MEP, hãy đảm bảo rằng việc triển khai LPA của bạn đáp ứng các yêu cầu sau:
- Triển khai các API từ EuiccService để hỗ trợ nhiều cổng.
- Sử dụng API để chọn cổng và bật hồ sơ.
- Cung cấp trải nghiệm người dùng cho phép ứng dụng của nhà mạng bật hồ sơ trên các cổng đã chọn.
Xác nhận kết quả
Để kiểm thử việc triển khai tính năng MEP, hãy đảm bảo các bản dựng vượt qua các trường hợp kiểm thử CTS sau (đối với API công khai): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
.
Nhà sản xuất thiết bị cũng nên làm việc với các nhà cung cấp modem, chip eUICC và hệ điều hành eSIM để đảm bảo thiết bị có thể thực hiện những việc sau:
- Bạn có thể bật và đính kèm hai hồ sơ eSIM vào hai mạng khác nhau.
- Bạn có thể kích hoạt và huỷ kích hoạt hồ sơ eSIM trên bất kỳ cổng eSIM nào.
- Có một luồng trải nghiệm người dùng do ứng dụng của nhà mạng kích hoạt, cho phép người dùng chuyển đổi hồ sơ.
Đề xuất dành cho nhà mạng
Để đảm bảo người dùng không mất dịch vụ khi di chuyển hồ sơ eSIM từ một cổng sang cổng khác, nhà mạng nên hỗ trợ những việc sau:
- Liên kết linh hoạt của IMEI và SIM
- Nhiều ICCID hoặc SIM cho mỗi giá trị nhận dạng eUICC (EID)