IMS 单注册模式

Android 12 开始支持使用单注册模式来提供 MMTEL 和 RCS 功能。此模式可让设备通过其 ImsService 提供的 IMS 单注册模式来管理所有 IMS 功能,并符合某些电信运营商引入的要求。在与一台设备上管理多个 IMS 注册的双注册模式相比,单注册模式可以减少对运营商网络流量的耗用并提高可靠性。

Android 12 采用的架构包含这样一组 API:可让 AOSP 电话堆栈管理由 ImsService 提供的 MMTEL 功能和由用户选择的 RCS 即时通讯应用提供的 RCS 功能。Android 12 正是通过这种架构来支持此单注册模式。如需支持 IMS 单注册模式,设备制造商和 SoC 供应商必须实现这些 API,以便在用户选择的 RCS 即时通讯应用中启用 RCS 功能。

图 1 展示了使用 IMS 单注册模式时设备的 IMS 堆栈。所有 IMS 应用都会通过 IMS 单注册模式将设备的默认 ImsService 用于实现 MMTEL 和 RCS 功能。这包括配置、SIP 消息转发和 RCS 用户功能交换。

单注册模式架构

图 1. 单注册模式架构

Android 11 及更低版本仅支持使用双注册模式来提供 MMTEL 和 RCS 功能。在这种模式下,MMTEL 由设备的 ImsService 提供,RCS 功能在上游实现并独立管理其自己的 IMS 堆栈及与运营商网络的连接。

图 2 说明了双注册模式的架构。在此模式下,每个应用负责连接到运营商网络并建立一个 IMS 注册来提供 MMTEL 和 RCS 功能。设备的 ImsService 可实现 MMTEL,使用设备的 IMS 数据连接与运营商网络相连,并独立于其他 RCS 应用运行。

双注册模式架构

图 2. 双注册模式架构

IMS 单注册模式 API

如果设备的运营商需要支持 IMS 单注册模式,则这些设备必须支持 IMS 单注册模式 API 并定义 Android 功能 PackageManager#FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION。 图 3 显示了支持 IMS 单注册模式的 API。

支持 IMS 单注册模式的 API Surface

图 3. 支持 IMS 单注册模式的高级 API Surface

支持 IMS 单注册模式(作为 AOSP 电话堆栈的一部分)的 Android 设备需要支持下表中所述的所有 AOSP API。

API Surface 区域 RCS 应用 API 供应商 IMS API 说明
RCS 配置 ProvisioningManager ImsConfigImplBase 如果运营商使用专有运营商授权机制,可让 OEM 或运营商提供应用来更新 RCS 配置状态。ImsService 还必须支持标准 AutoConfigurationServer (ACS),用于为不使用专有机制的运营商进行配置。
SIP 消息转发 SipDelegateManager SipTransportImplBase 可使 RCS 应用先将特定的 RCS 功能标记与设备 ImsService 相关联,然后发送和接收与这些 RCS 功能标记关联的 SIP 消息和 IMS 注册更新。
专用承载通知 ConnectivityManager DataCallResponse 可使应用监听与特定本地端口关联的套接字上的 QoS 通知。
GBA 身份验证 bootstrapAuthenticationRequest GbaService 可使 RCS 应用通过用于 RCS 功能(如文件传输)的网络以及访问密钥进行身份验证。
RCS 用户功能交换 ImsRcsManager RcsCapabilityExchangeImplBase 提供 AOSP 将其 MMTEL 和 RCS 功能发送至供应商 ImsService 的功能,以便将它们作为实体发布到网络中,进行 RCS 用户功能交换。还可使其他应用对一个或多个联系人的 RCS 功能感兴趣,以查询网络的联系人 RCS 功能。

安全与权限

Android 12 引入了以下权限,以确保安全地访问运营商网络和用户数据:

android.permission.PERFORM_IMS_SINGLE_REGISTRATION 权限必须由具有 RCS 功能的即时通讯应用定义。如需获得此权限,必须满足以下条件:

  • 该应用必须作为特权应用安装,这意味着它已预安装在设备上,并且可以使用特许权限
  • 必须使用 RoleManager 将应用设置为用户的默认短信收发应用

如果这两个条件均不满足,应用就无法获得 android.permission.PERFORM_IMS_SINGLE_REGISTRATION 权限。这意味着,第三方应用无法访问设备上的 RCS 单注册模式 API,因为它们需要运营商对设备进行认证。

如果将 android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE 权限授予具有 READ_CONTACTS 权限的应用,则应用可以使用 RcsUceAdapter 请求手机号码的 RCS 功能。如需获得此权限,必须满足以下条件:

  • 该应用必须作为特权应用安装,这意味着它已预安装在设备上,并且可以使用特许权限。
  • 该应用必须定义为以下 RoleManager 角色之一:

    • 默认即时通讯应用:由用户设置。
    • 默认拨号器应用:由用户设置。
    • 默认“通讯录”应用:Android 12 中引入的角色,可使 OEM 通过设备叠加层的值 config_systemContacts 定义软件包名称,该名称必须与设备的“通讯录”应用相对应。然后,该应用将被赋予“通讯录”角色。

如需使用 ConnectivityManager 访问 IMS APN 来设置和管理数据流量,应用还必须请求 android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS 权限。

示例和来源

为了便于进行测试和开发,Android 在 AOSP 中提供了一个应用,它可以实现具有基本 RCS 消息传递支持的测试即时通讯应用。您可以在 testapps/TestRcsApp 找到该应用。应用安装在设备上后,可被设置为用户的默认即时通讯应用,并会获得访问 IMS 单注册模式 API 所需的权限。

Android 还提供了适用于 RCS 的 ImsService 实现示例。源代码位于 /testapps/ImsTestService

实现

如需了解更多实现详情,请下载 Android 中的 IMS 单注册模式

验证

如需验证 IMS 单注册模式的实现情况,请执行以下操作:

  • 确保 CtsTelephonyTestCases CTS 测试套件通过。
  • 安装并运行 TestRcsApp,以在集成期间运行基本的单注册模式测试用例。
  • 通过针对 IMS 单注册模式测试用例的运营商认证测试。