Đố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ợ 2 SIM bằng một chip eSIM duy nhất. Chip này có thể có nhiều hồ sơ SIM và có thể kết nối với 2 nhà mạng khác nhau cùng một lúc. Nhà sản xuất thiết bị phải hợp tác với 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 cung cấp khả năng hỗ trợ hạn chế 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 thiếu hỗ trợ 2 SIM khiến các nhà sản xuất thiết bị không thể áp dụng các thiết bị chỉ dùng eSIM. Để hỗ trợ chế độ hai SIM trên thiết bị chỉ có eSIM, nhà sản xuất thiết bị phải đóng gói 2 phần tử eSIM vào thiết bị. Điều này làm tăng chi phí danh mục vật liệu (BOM) và dẫn đến trải nghiệm kém cho người dùng trong việc quản lý gói thuê bao. Tính năng MEP có trong AOSP từ Android 13 giải quyết vấn đề này.
Cấu trúc eUICC
Phần này mô tả cấu trúc chip eSIM cho các thiết bị có MEP cho nhiều phiên bản Android và cấu trúc chip 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 lựa chọn MEP-A1 và MEP-B để chọn gốc miền bảo mật của nhà phát hành (ISD-R) và chọn các cổng eSIM như được chỉ định trong GSMA SGP V22 3.0. Sau đây là nội dung 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ác cổng eSIM từ 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 đích 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 mọi cổng và mọi cổng đều có thể được chỉ định một hồ sơ. Lệnh bật và tắt được gửi đến cổng mà hồ sơ cần được bật hoặc tắt (nơi đang chờ làm mới). Cổng lệnh và cổng đích 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 cắm eSIM chứa nhiều cổng eUICC, trong đó mỗi cổng có thể có một hồ sơ đã bật. Như minh hoạ trong Hình 3, với cấu trúc này, một eUICC duy nhất (một khe cắm vật lý duy nhất) hỗ trợ chế độ 2 SIM 2 sóng 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 không phụ thuộc vào biến thể MEP.
Hình 3. Cấu 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 mà không có MEP như minh hoạ trong Hình 4, khe cắm eSIM chỉ hỗ trợ một hồ sơ được 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 phần mềm điện thoại bao gồm lớp UiccPort
, biểu thị cấu trúc thực trên eUICC. Lớp UiccPort
được dùng cho tất cả các loại thẻ SIM: SIM vật lý (pSIM), SIM tích hợp (iSIM) và SIM nhúng (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 vùng quảng cáo logic và UiccSlot
(vùng quảng cáo thực) liên kết với nhiều vùng quảng cáo 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 HAL, API và giao diện người dùng. Nhà sản xuất thiết bị nên hợp tác với 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 các giao diện HAL. Các 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 các thao tác 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 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ợ cùng với tất cả cá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 khe cắm SIM bao gồm một mảng của giao diện SimPortInfo
, trong đó có 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 2 đố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ợ cùng với tất cả cá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 cắm logic và SimPortSlotMapping
chỉ định cổng được liên kết tương ứng và chỉ mục khe cắm thực. Phương thức setSimSlotMapping
thiết lập mối liên kết từ các cổng đến các khe cắm logic. Ứng dụng LPA sử dụng phương thức này để chọn cổng đang hoạt động.
Các 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ề xem 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á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, thì sẽ 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ì UICC có thể có nhiều ICCID cho các thiết bị có MEP, hãy sử dụngUiccPortInfo.getIccId()
.
(Android 13 trở lên) UiccPortInfo
getIccId
: Trả về ICCID nếu có gói thuê bao đang 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à trên đó gói thuê bao được bật. Nếu gói thuê bao bị vô hiệu hoá, thì sẽ trả vềINVALID_PORT_ID -1
.
EuiccManager
switchToSubscription
: Chuyển sang một gói thuê bao cụ thể. Được dùng bởi những ứ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. Khi được gọi, nền tảng này sẽ giải quyết chỉ mục cổng nội bộ thông qua một hộp thoại 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 dùng API này để tắt một thuê bao bằng cách truyền mã nhận dạng thuê bao không hợp lệ; thay vào đó, các ứng dụng phải 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. Các ứng dụng gọi 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 nào để bật gói thuê bao. - (Android 13 trở lên)
isSimPortAvailable
: Trả về việc chỉ mục cổng truyền có sẵn hay không. Một cổng có sẵn nếu cổng đó không bật gói thuê bao 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 thuê bao nhất định trên một cổng cụ thể. 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 được dùng nữa) chỉ truyền chỉ mục khe cắm thực để nhận đối tượngsimApplicationState
. - (Android 13 trở lên)
setSimSlotMapping(Collection<UiccSlotMapping> slots)
: Ánh xạ các khe cắm logic với các khe cắm và cổng vật lý. - (Android 13 trở lên)
Collection<UiccSlotMapping> getSimSlotMapping
: Nhận thông tin ánh xạ từ các khe cắm ảo đến các khe cắm SIM vật lý 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 có một quy trình người dùng với hộp thoại gồm 3 lựa chọn có thể áp dụng cho các quy trình người dùng cho phép đăng ký trong ứng dụng Cài đặt. Hình 6 minh hoạ một ví dụ về quy trình trải nghiệm người dùng này.
Hình 6. Luồng người dùng để bật gói thuê bao SIM
Cờ tính năng
Để hỗ trợ MEP, các 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 các ứng dụng của hãng vận chuyển 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 đây (đố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 hợp tá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ể làm những việc sau:
- Bạn có thể bật và gắn 2 hồ sơ eSIM vào 2 mạng khác nhau.
- Bạn có thể kích hoạt và vô hiệu hoá 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 cho hãng vận chuyển
Để đả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, các nhà mạng nên hỗ trợ những việc sau:
- Liên kết linh hoạt giữa IMEI và SIM
- Nhiều ICCID hoặc SIM cho mỗi giá trị nhận dạng eUICC (EID)