Đố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. Cá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 bộ vi mạch 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 có thể giúp tiết kiệm đáng kể dung lượng và chi phí, nhưng việc thiếu tính năng hỗ trợ 2 SIM khiến nhà sản xuất thiết bị không thể sử dụng các thiết bị chỉ dùng 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 không tốt 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.
Kiến 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 MEP-A1 và MEP-B ISD-R.
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à mọi cổng đều có thể được chỉ định một hồ sơ. 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ư trong Hình 3, với cấu trúc này, một eUICC duy nhất (một khe thực tế duy nhất) hỗ trợ chế độ chờ kép hai SIM (DSDS) bằng cách có mỗi cổng eUICC liên kết với băng tần cơ sở của modem. HAL và API của Android 13 là biến thể MEP độc lập.
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. Kiến 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
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
. Luồng này cho phép UiccPort
ánh xạ tới một khe logic và UiccSlot
(khe thực tế) để ánh xạ đến 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 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 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 AIDL IRadio 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.
Trạng thái thẻ
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 vị trí 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 chuyển chế độ MEP được hỗ trợ 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 của 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 chuyển chế độ MEP được hỗ trợ 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 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ụngLPA 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 mọi 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ị vô hiệu hoá, thì hệ thống sẽ 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. Ứ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 đó, ứ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. Bạn có thể sử dụng một cổng nếu cổng đó chưa 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.
Dịch vụ Euicc
- (Android 13 trở lên)
onSwitchToSubscriptionWithPort
: Chuyển sang một gói thuê bao cụ thể trên một cổng được 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 vị trí thực tế và chỉ mục cổng. Phương thứcgetSimApplicationState(int physicalSlotIndex)
(không dùng nữa) chỉ truyền chỉ mục vị trí thực tế để nhận đố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ể á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ử cách 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à kết nối hai hồ sơ eSIM với 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 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)