Nhiều hồ sơ được bật

Đố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.

    Mô hình lựa chọn MEP-A1 ISD-R

    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.

    Mô hình lựa chọn MEP-B ISD-R

    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.

Cấu trúc chip eSIM có hỗ trợ 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.

Cấu trúc chip eSIM không hỗ trợ MEP

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.

Quy trình thông tin về MEP

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ụng UiccPortInfo.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ức switchToSubscription (đượ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

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.

Quy trình của người dùng khi đăng ký gói thuê bao SIM MEP

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)