从 Android 12 开始,Android 支持 TS.43 服务授权配置,这是一项 GSMA 规范,用于定义激活服务的授权验证步骤,这些服务包括 Wi-Fi 语音通话 (VoWiFi)、LTE 语音通话 (VoLTE)、IP 短信 (SMSoIP)、eSIM 配套设备(与请求服务的设备相关联)的设备端服务激活 (ODSA) 和流量套餐信息。
为了支持这种规范,Android 提供了一项 IMS 服务授权功能,通过这项功能,服务提供商能够向移动设备通知 IP 多媒体子系统 (IMS) 网络服务的状态。借助此授权功能,设备可以使用 EAP-AKA 身份验证查询运营商授权服务器(如 GSMA TS.43 规范所定义),而无需用户手动输入任何凭据。
具有 IMS 授权服务器的运营商可以使用 IMS 服务授权功能进行服务配置。此功能提供以下优势:
- 降低运营商的测试和认证费用,因为此授权功能可用于多个产品和原始设备制造商 (OEM)。
- 通过标准 Android 应用降低设备制造商的开发开销。
- 允许设备制造商和运营商为此功能贡献代码,因为它是开源的。
- 面向北美运营商提供紧急地址管理。
架构
下图介绍了 IMS 服务授权功能的架构和行为。
图 1. TS.43 授权功能架构
如图 1 所示,IMS 服务授权功能的架构包括以下组件:
service_entitlement
TS.43 Service API 静态库:此库会实现 TS.43 规范,与运营商的授权服务器交互,并针对每个 TS.43 用例公开面向应用的 API。ImsServiceEntitlement
客户端应用:此应用使用 TS.43 Service API。此应用会实现各种界面元素,包括 WebView,用于呈现运营商的服务门户,以便用户启用服务;并且此应用会与其他 Android 组件交互,以端到端管理用户体验。如需详细了解如何配置 Android 以使用运营商的基于 TS.43 的授权服务器,请参阅 ImsServiceEntitlement 应用。
图 1 中带编号的线展示了 IMS 服务授权功能的组件如何相互通信。下面的部分按标示对各个步骤进行了说明:
(1) 客户端应用调用 TS.43 Service API 以发起服务授权请求。
(2) TS.43 Service API 向运营商的授权服务器发送 HTTP 请求以发起 EAP-AKA 质询。
(3) TS.43 Service API 调用电话 API(例如 getIccAuthentication
),以完成 EAP-AKA 质询-响应。
(4) TS.43 服务在 EAP-AKA 响应通过验证后从运营商的授权服务器接收服务授权或配置数据。
(5) TS.43 服务将服务授权或配置数据返回给客户端应用。
(6) 客户端应用处理数据,并根据需要呈现运营商的服务门户,以便用户完成服务启用。
集成
本部分介绍了集成 service_entitlement
库和 ImsServiceEntitlement
应用的流程。
由于没有 Android 12 API 依赖项,因此 service_entitlement
库和 ImsServiceEntitlement
应用可以向后移植到旧版 Android 平台。
service_entitlement 库
由于 service_entitlement
库静态关联到 ImsServiceEntitlement app
,因此无需执行任何额外步骤,即可将该库集成到 ImsServiceEntitlement
应用中。
service_entitlement
库可以与您自己的应用集成,以用于 TS.43 用例,例如流量套餐和 ODSA。此库还可以集成到某个应用中,以基于 EAP-AKA 协议用于非 TS.43 授权用例。
下面介绍了可在此类用例中使用的 API:
- 使用库中实现的 TS.43 HTTP 协议的 TS.43 应用:使用
ServiceEntitlement
类中的 API - 使用库中实现的 EAP-AKA 协议的非 TS.43 应用:使用
EapAkaHelper
类中公开的 API
ImsServiceEntitlement 应用
默认情况下,Android 会将安装在 product 分区中的 ImsServiceEntitlement
应用添加为特权应用。如需配置该应用,请使用以下 CarrierConfig 键:
键 | 值 |
---|---|
KEY_ENTITLEMENT_SERVER_URL_STRING |
运营商的授权服务器网址。必须包含 https:// 前缀。 |
KEY_FCM_SENDER_ID_STRING |
运营商的 FCM 发送者 ID。 如果运营商不需要 FCM,请勿设置此值。 |
KEY_SHOW_VOWIFI_WEBVIEW_BOOL |
如果运营商要求呈现门户网站界面,以便用户注册 VoWiFi 服务,则设置为 true 。例如,同意接受条款及条件,或输入紧急地址。北美的运营商通常要求呈现此类界面。 |
KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING |
如果 KEY_SHOW_VOWIFI_WEBVIEW_BOOL 为 true ,则设置为 com.android.imsserviceentitlement/.WfcActivationActivity 。 |
KEY_IMS_PROVISIONING_BOOL |
如果运营商要求在后台进行 IMS (VoLTE/VoWiFi/SMSoIP) 服务的网络配置,则设置为 true 。某些欧洲运营商有这样的要求。 |
KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL |
如果 KEY_IMS_PROVISIONING_BOOL 为 true ,则设置为 true 。 |
流向运营商授权服务器和门户网站的 HTTP 流量通过默认网络(例如默认移动数据网络或 Wi-Fi 网络)传输。
GMS 合作伙伴:根据 TS.43 v5.0 规范,Android 12 中的 TS.43 授权应用支持以下运营商:
- 美国:CSpire、US Cellular、Cellcom
- 法国:Orange
与 IMS 配置相关的其他系统界面
本部分介绍了 OEM 如何支持与 IMS 服务配置相关的其他系统界面元素(例如,在配置 VoWiFi 时显示通知)。
ImsServiceEntitlement
应用使用 ProvisioningManager.setProvisioningIntValue(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
value)
系统 API 将 VoWiFi 配置状态设置到平台。此 API 还可用于 VoLTE(通过 KEY_VOLTE_PROVISIONING_STATUS
)和 SMSoIP(通过 KEY_SMS_OVER_IP_ENABLED
)。
然后,系统界面便可以读取配置状态,具体方法为:使用 getProvisioningIntValue
,或注册回调来通过 registerProvisioningChangedCallback
监控配置状态更改。
覆盖配置以进行测试
请按照以下流程暂时更改 ImsServiceEntitlement
应用行为,以进行测试。如需详细了解如何覆盖运营商配置,请参阅覆盖运营商配置。
跳过 VoWiFi 注册流程
如需跳过 VoWiFi 注册流程,从而允许直接启用 VoWiFi,请覆盖运营商配置 KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING
并将其值设置为空字符串。
跳过 IMS 配置
如需跳过 IMS 配置,从而提供 IMS 服务并允许用户在不进行网络配置的情况下启用此类服务,请覆盖运营商配置 KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL
并将其值设置为 false
。
更改授权服务器网址
如需更改授权服务器网址,请覆盖运营商配置 KEY_ENTITLEMENT_SERVER_URL_STRING
并将其值设置为所需的网址字符串。您必须添加 https://
前缀。
覆盖运营商配置
从 Android 11 开始,运营商配置覆盖命令已内置,可以通过 root 权限使用。
以下命令示例展示了如何覆盖运营商配置键 carrier_volte_provisioning_required_bool
并将其值设置为 false
。您可以多次运行该命令,以覆盖多个配置。
adb root
adb shell cmd phone cc set-value -p carrier_volte_provisioning_required_bool false
如要清除所有覆盖,请使用以下命令:
adb shell cmd phone cc clear-values
如需了解详情,请运行以下命令:
adb shell cmd phone cc