Từ Android 12, Android có hỗ trợ Cấu hình quyền sử dụng dịch vụ TS.43, một quy cách của GSMA xác định bước xác minh quyền sử dụng để kích hoạt các dịch vụ, bao gồm cả cuộc gọi thoại qua Wi-Fi (VoWiFi), cuộc gọi thoại qua LTE (VoLTE), SMS qua IP (SMSoIP), Kích hoạt dịch vụ trên thiết bị (ODSA) của các thiết bị đồng hành eSIM (được liên kết với thiết bị yêu cầu) và thông tin về gói dữ liệu.
Để hỗ trợ quy cách này, Android cung cấp một tính năng quyền sử dụng dịch vụ IMS cho phép nhà cung cấp dịch vụ thông báo cho thiết bị di động về trạng thái của các dịch vụ mạng Hệ thống đa phương tiện dựa trên IP (IMS). Tính năng này cho phép thiết bị truy vấn máy chủ quyền của nhà mạng theo quy cách GSMA TS.43 để biết trạng thái quyền IMS bằng cách sử dụng phương thức xác thực EAP-AKA mà không yêu cầu người dùng nhập thông tin đăng nhập theo cách thủ công.
Những nhà mạng có máy chủ cấp quyền IMS có thể sử dụng tính năng cấp quyền dịch vụ IMS để cung cấp dịch vụ. Việc áp dụng tính năng này mang lại những lợi ích sau:
- Giảm chi phí kiểm thử và chứng nhận cho các nhà mạng vì bạn có thể sử dụng tính năng uỷ quyền này trên nhiều sản phẩm và OEM.
- Giảm chi phí phát triển cho các nhà sản xuất thiết bị thông qua một ứng dụng Android tiêu chuẩn.
- Cho phép các nhà sản xuất thiết bị và nhà mạng đóng góp mã cho tính năng này vì đây là tính năng nguồn mở.
- Cung cấp dịch vụ quản lý địa chỉ khẩn cấp cho các nhà mạng ở Bắc Mỹ.
Kiến trúc
Hình sau đây mô tả cấu trúc và hành vi của tính năng quyền sử dụng dịch vụ IMS.
Hình 1. Kiến trúc tính năng về quyền TS.43
Như minh hoạ trong Hình 1, cấu trúc của tính năng xác định quyền sử dụng dịch vụ IMS bao gồm các thành phần sau:
service_entitlement
TS.43 Thư viện tĩnh API dịch vụ: Thư viện này triển khai quy cách TS.43, tương tác với máy chủ cấp quyền của nhà mạng và hiển thị các API hướng đến ứng dụng cho từng trường hợp sử dụng TS.43.ImsServiceEntitlement
ứng dụng khách: Ứng dụng này sử dụng TS.43 Service API. Ứng dụng này triển khai các phần tử giao diện người dùng, bao gồm cả webview để kết xuất cổng dịch vụ của nhà mạng cho người dùng kích hoạt dịch vụ và tương tác với các thành phần Android khác để quản lý trải nghiệm người dùng từ đầu đến cuối.Để biết thêm thông tin về cách định cấu hình Android để hoạt động với máy chủ cấp quyền dựa trên TS.43 của nhà mạng, hãy xem ứng dụng ImsServiceEntitlement.
Các dòng được đánh số trong Hình 1 cho thấy cách các thành phần của tính năng quyền IMS giao tiếp với nhau. Sau đây là nội dung mô tả từng bước như được gắn nhãn:
(1) Ứng dụng khách gọi API dịch vụ TS.43 để bắt đầu yêu cầu về quyền sử dụng dịch vụ.
(2) API dịch vụ TS.43 gửi một yêu cầu HTTP đến máy chủ cấp quyền của nhà mạng để bắt đầu một thử thách EAP-AKA.
(3) API dịch vụ TS.43 gọi các API điện thoại (ví dụ: getIccAuthentication
) để hoàn tất phản hồi thử thách EAP-AKA.
(4) Dịch vụ TS.43 nhận được dữ liệu cấu hình hoặc quyền sử dụng dịch vụ từ máy chủ quyền của nhà mạng sau khi phản hồi EAP-AKA được xác minh.
(5) Dịch vụ TS.43 trả về dữ liệu cấu hình hoặc quyền sử dụng dịch vụ cho ứng dụng khách.
(6) Ứng dụng khách xử lý dữ liệu và tuỳ ý hiển thị cổng dịch vụ của hãng vận chuyển để người dùng hoàn tất việc kích hoạt dịch vụ.
Tích hợp
Phần này mô tả quy trình tích hợp thư viện service_entitlement
và ứng dụng ImsServiceEntitlement
.
Vì không có phần phụ thuộc API Android 12, nên thư viện service_entitlement
và ứng dụng ImsServiceEntitlement
có thể được chuyển ngược về các nền tảng Android cũ hơn.
thư viện service_entitlement
Vì thư viện service_entitlement
được liên kết tĩnh vào ImsServiceEntitlement app
, nên bạn không cần thực hiện thêm bước nào để tích hợp thư viện vào ứng dụng ImsServiceEntitlement
.
Bạn có thể tích hợp thư viện service_entitlement
với các ứng dụng của riêng mình cho các trường hợp sử dụng TS.43, chẳng hạn như gói dữ liệu và ODSA. Thư viện này cũng có thể được tích hợp vào một ứng dụng cho các trường hợp sử dụng quyền không phải TS.43 dựa trên giao thức EAP-AKA.
Sau đây là nội dung mô tả về các API cần dùng cho những trường hợp sử dụng như vậy:
- Ứng dụng TS.43 sử dụng giao thức TS.43 HTTP được triển khai trong thư viện: Sử dụng các API trong lớp
ServiceEntitlement
- Ứng dụng không phải TS.43 sử dụng giao thức EAP-AKA được triển khai trong thư viện: Sử dụng các API được hiển thị trong lớp
EapAkaHelper
Ứng dụng ImsServiceEntitlement
Theo mặc định, Android sẽ đưa ứng dụng ImsServiceEntitlement
được cài đặt trong phân vùng sản phẩm vào danh sách ứng dụng đặc quyền. Để định cấu hình ứng dụng, hãy dùng các khoá CarrierConfig sau:
Khoá | Giá trị |
---|---|
KEY_ENTITLEMENT_SERVER_URL_STRING |
URL máy chủ xác minh quyền của nhà mạng. Bạn phải thêm tiền tố https:// . |
KEY_FCM_SENDER_ID_STRING |
Mã nhận dạng người gửi FCM của nhà mạng. Đừng đặt giá trị này nếu hãng vận chuyển không yêu cầu FCM. |
KEY_SHOW_VOWIFI_WEBVIEW_BOOL |
Đặt thành true nếu nhà mạng yêu cầu người dùng đăng ký dịch vụ VoWiFi thông qua giao diện người dùng của một cổng thông tin trên web. Ví dụ: đồng ý với các điều khoản và điều kiện hoặc nhập địa chỉ khẩn cấp.Đây là yêu cầu thường thấy của các hãng vận chuyển ở Bắc Mỹ. |
KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING |
Đặt thành com.android.imsserviceentitlement/.WfcActivationActivity nếu KEY_SHOW_VOWIFI_WEBVIEW_BOOL là true . |
KEY_IMS_PROVISIONING_BOOL |
Đặt thành true nếu nhà mạng yêu cầu cung cấp dịch vụ IMS (VoLTE/VoWiFi/SMSoIP) trên mạng ở chế độ nền.Một số nhà mạng ở Châu Âu yêu cầu bạn phải cung cấp thông tin này. |
KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL |
Đặt thành true nếu KEY_IMS_PROVISIONING_BOOL là true . |
Lưu lượng truy cập HTTP đến máy chủ cấp quyền và cổng thông tin web của nhà mạng sẽ đi qua mạng mặc định, ví dụ: dữ liệu di động mặc định hoặc Wi-Fi.
Đối tác GMS: Các nhà mạng sau đây được ứng dụng TS.43 về quyền hỗ trợ trong Android 12, theo quy cách TS.43 phiên bản 5.0:
- Hoa Kỳ: CSpire, US Cellular, Cellcom
- Pháp: Orange
Giao diện người dùng hệ thống bổ sung để cung cấp IMS
Phần này mô tả cách OEM có thể hỗ trợ các phần tử bổ sung trên giao diện người dùng hệ thống liên quan đến việc cung cấp dịch vụ IMS (ví dụ: khi hiển thị thông báo khi VoWiFi được cung cấp).
Ứng dụng ImsServiceEntitlement
đặt trạng thái cung cấp VoWiFi vào nền tảng bằng cách sử dụng API hệ thống ProvisioningManager.setProvisioningIntValue(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
value)
. API này cũng được dùng cho VoLTE (với KEY_VOLTE_PROVISIONING_STATUS
) và SMSoIP (với KEY_SMS_OVER_IP_ENABLED
).
Sau đó, giao diện người dùng hệ thống có thể đọc trạng thái cấp phép bằng cách sử dụng getProvisioningIntValue
hoặc bằng cách đăng ký một lệnh gọi lại để theo dõi thay đổi về trạng thái cấp phép thông qua registerProvisioningChangedCallback
.
Ghi đè cấu hình để kiểm thử
Hãy sử dụng các quy trình sau để tạm thời thay đổi hành vi của ứng dụng ImsServiceEntitlement
cho mục đích kiểm thử. Để biết thông tin chi tiết về cách ghi đè cấu hình của nhà mạng, hãy xem phần Ghi đè cấu hình của nhà mạng.
Bỏ qua quy trình đăng ký VoWiFi
Để bỏ qua quy trình đăng ký VoWiFi, cho phép bật VoWiFi trực tiếp, hãy ghi đè cấu hình nhà mạng KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING
và đặt giá trị của cấu hình này thành một chuỗi trống.
Bỏ qua bước cấp phép IMS
Để bỏ qua quy trình cấp phép IMS, cung cấp các dịch vụ IMS và cho phép người dùng bật các dịch vụ đó mà không cần cấp phép mạng, hãy ghi đè cấu hình nhà mạng KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL
và đặt giá trị của cấu hình này thành false
.
Thay đổi URL máy chủ cấp quyền
Để thay đổi URL máy chủ cấp quyền, hãy ghi đè cấu hình của nhà mạng KEY_ENTITLEMENT_SERVER_URL_STRING
và đặt giá trị của cấu hình này thành chuỗi URL dự kiến. Bạn phải thêm tiền tố https://
.
Ghi đè cấu hình nhà mạng
Kể từ Android 11, các lệnh ghi đè cấu hình của nhà mạng được tích hợp sẵn và có sẵn với đặc quyền root.
Lệnh sau đây là một ví dụ về cách ghi đè khoá cấu hình của nhà mạng carrier_volte_provisioning_required_bool
và đặt giá trị của khoá này thành false
. Bạn có thể chạy lệnh nhiều lần để ghi đè nhiều cấu hình.
adb root
adb shell cmd phone cc set-value -p carrier_volte_provisioning_required_bool false
Để xoá tất cả các chế độ ghi đè, hãy dùng lệnh sau:
adb shell cmd phone cc clear-values
Để biết thêm thông tin, hãy chạy lệnh sau:
adb shell cmd phone cc