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。
图 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
android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE
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 单注册模式测试用例的运营商认证测试。