IMS 服务授权

从 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 服务授权功能的架构和行为。

TS.43 授权功能

图 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_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

流向运营商授权服务器和门户网站的 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