IMS 服务授权

从 Android 12 开始,Android 支持 TS.43 Service Entitlement Configuration,这是一项 GSMA 规范,定义了激活服务的权利验证步骤,包括 Wi-Fi 通话 (VoWiFi)、LTE 通话 (VoLTE)、IP 短信 (SMSoIP)、eSIM 伴侣设备的设备端服务激活 (ODSA)(与请求设备关联)和数据套餐信息。

为了支持此规范,Android 提供了一项 IMS 服务权利功能,该功能允许服务提供商告知移动设备 IP 多媒体子系统 (IMS) 网络服务的状态。此权利功能允许设备按照 GSMA TS.43 规范的定义,使用 EAP-AKA 身份验证查询运营商权利服务器以获取 IMS 权利状态,而无需用户手动输入任何凭据。

拥有 IMS 权利服务器的运营商可以使用 IMS 服务权利功能进行服务配置。采用此功能可带来以下优势

  • 降低运营商的测试和认证成本,因为此权利功能可用于多种产品和 OEM。
  • 通过标准 Android 应用减少设备制造商的开发开销。
  • 允许设备制造商和运营商为该功能贡献代码,因为该功能是开源的。
  • 为北美运营商提供紧急地址管理。

架构

下图描述了 IMS 服务权利功能的架构和行为。

TS.43 entitlement feature

图 1. TS.43 权利功能架构

如图 1 所示,IMS 服务权利功能的架构包括以下组件

  • service_entitlement TS.43 Service API 静态库: 此库实现了 TS.43 规范,与运营商的权利服务器交互,并为每个 TS.43 用例公开面向应用的 API。
  • ImsServiceEntitlement 客户端应用: 此应用使用 TS.43 Service API。该应用实现了 UI 元素,包括用于呈现运营商服务门户的 Webview,供用户激活服务,并与其他 Android 组件交互以端到端管理用户体验。

    有关如何配置 Android 以与运营商基于 TS.43 的权利服务器配合使用的更多信息,请参阅ImsServiceEntitlement 应用

图 1 中的编号行显示了 IMS 服务权利功能的组件如何相互通信。以下描述了标记的每个步骤

(1) 客户端应用调用 TS.43 服务 API 以启动服务权利请求。

(2) TS.43 服务 API 向运营商的权利服务器发送 HTTP 请求,以启动 EAP-AKA 质询。

(3) TS.43 服务 API 调用电话 API(例如,getIccAuthentication)以完成 EAP-AKA 质询-响应。

(4) 在 EAP-AKA 响应得到验证后,TS.43 服务从运营商的权利服务器接收服务权利或配置数据。

(5) TS.43 服务将服务权利或配置数据返回给客户端应用。

(6) 客户端应用处理数据,并可选择呈现运营商的服务门户,供用户完成服务激活。

集成

本节介绍集成 service_entitlement 库和 ImsServiceEntitlement 应用的过程。

因为没有 Android 12 API 依赖项,所以 service_entitlement 库和 ImsServiceEntitlement 应用可以向后移植到较旧的 Android 平台。

service_entitlement

因为 service_entitlement 库是静态链接到 ImsServiceEntitlement 应用中的,所以将该库集成到 ImsServiceEntitlement 应用中不需要额外的步骤。

service_entitlement 库可以与您自己的应用集成,用于 TS.43 用例,例如数据套餐和 ODSA。该库还可以集成到基于 EAP-AKA 协议的非 TS.43 权利用例的应用中。

以下描述了用于此类用例的 API

  • TS.43 应用(使用库中实现的 TS.43 HTTP 协议):使用 ServiceEntitlement 类中的 API
  • 非 TS.43 应用(使用库中实现的 EAP-AKA 协议):使用 EapAkaHelper 类中公开的 API

ImsServiceEntitlement 应用

默认情况下,Android 包括安装在产品分区中的 ImsServiceEntitlement 应用,作为特权应用。要配置该应用,请使用以下 CarrierConfig 密钥

密钥
KEY_ENTITLEMENT_SERVER_URL_STRING 运营商的权利服务器 URL。必须包含 https:// 前缀。
KEY_FCM_SENDER_ID_STRING 运营商的 FCM 发送方 ID。

如果运营商不需要 FCM,请勿设置此值。
KEY_SHOW_VOWIFI_WEBVIEW_BOOL 如果运营商需要 Web 门户 UI 供用户注册 VoWiFi 服务,则设置为 true。例如,同意条款和条件或输入紧急地址。

这通常是北美运营商的要求。
KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING
如果 KEY_SHOW_VOWIFI_WEBVIEW_BOOLtrue,则设置为 com.android.imsserviceentitlement/.WfcActivationActivity
KEY_IMS_PROVISIONING_BOOL 如果运营商需要在后台配置 IMS(VoLTE/VoWiFi/SMSoIP)服务的网络,则设置为 true

这是某些欧洲运营商的要求。
KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL 如果 KEY_IMS_PROVISIONING_BOOLtrue,则设置为 true

与运营商权利服务器和 Web 门户的 HTTP 流量通过默认网络传输,例如,默认移动数据或 Wi-Fi。

GMS 合作伙伴:Android 12 中的 TS.43 权利应用支持以下运营商,遵循 TS.43 v5.0 规范

  • 美国:CSpire、US Cellular、Cellcom
  • 法国:Orange

用于 IMS 配置的其他系统 UI

本节介绍 OEM 如何支持与 IMS 服务配置相关的其他系统 UI 元素(例如,在配置 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)。

然后,系统 UI 可以通过使用 getProvisioningIntValue 或通过注册回调以通过 registerProvisioningChangedCallback 监控配置状态更改来读取配置状态。

覆盖配置以进行测试

使用以下步骤可以临时更改 ImsServiceEntitlement 应用的行为以进行测试。有关如何覆盖运营商配置的详细信息,请参阅覆盖运营商配置

跳过 VoWiFi 注册过程

要跳过 VoWiFi 注册过程,允许直接打开 VoWiFi,请覆盖运营商配置 KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING 并将其值设置为空字符串。

跳过 IMS 配置

要跳过 IMS 配置,使 IMS 服务可用并允许用户在没有网络配置的情况下打开此类服务,请覆盖运营商配置 KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL 并将其值设置为 false

更改权利服务器 URL

要更改权利服务器 URL,请覆盖运营商配置 KEY_ENTITLEMENT_SERVER_URL_STRING 并将其值设置为预期的 URL 字符串。您必须包含 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