Android 12 引入了对单一注册模型的支持,用于提供 MMTEL 和 RCS 功能。此模型允许设备通过设备 ImsService 提供的单一 IMS 注册来管理所有 IMS 功能,并符合某些电信运营商提出的要求。与在一个设备上管理多个 IMS 注册的双重注册模型相比,单一注册减少了运营商网络上的流量并提高了可靠性。
Android 12 通过一套 API 架构支持此单一注册模型,这些 API 允许 AOSP 电话堆栈管理由 ImsService
提供的 MMTEL 功能和由用户选择的 RCS 消息应用提供的 RCS 功能。为了支持 IMS 单一注册,设备制造商和 SoC 供应商必须实现这些 API,以在用户选择的 RCS 消息应用中启用 RCS 功能。
图 1 说明了使用 IMS 单一注册模型时设备的 IMS 堆栈。所有 IMS 应用都使用设备的默认 ImsService 通过单一 IMS 注册来实现 MMTEL 和 RCS 功能。这包括配置、SIP 消息转发和 RCS 用户功能交换。
图 1. 单一注册模型架构
Android 11 及更低版本仅支持双重注册模型来提供 MMTEL 和 RCS 功能,其中 MMTEL 由设备 ImsService 提供,而 RCS 功能在顶层实现,并独立管理其自身的 IMS 堆栈和到运营商网络的连接。
图 2 说明了双重注册模型的架构。在此模型中,每个应用都负责连接到运营商网络并为 MMTEL 和 RCS 功能建立 IMS 注册。设备的 ImsService 实现 MMTEL,使用设备的 IMS 数据连接到运营商网络,并独立于其他 RCS 应用运行。
图 2. 双重注册模型架构
IMS 单一注册 API
在需要 IMS 单一注册的运营商网络上漫游的设备必须支持 IMS 单一注册 API,并定义 Android 功能 PackageManager#FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION
。图 3 显示了支持 IMS 单一注册的 API。
图 3. 支持 IMS 单一注册的高级 API 表面
作为 AOSP 电话堆栈一部分支持 IMS 单一注册的 Android 设备,需要支持下表描述的所有 AOSP API。
API 表面区域 | RCS 应用 API | 供应商 IMS API | 说明 |
---|---|---|---|
RCS 配置 | ProvisioningManager | ImsConfigImplBase | 允许 OEM 或运营商提供一个应用来更新 RCS 配置状态(如果运营商使用专有的运营商授权机制)。对于不使用专有机制的运营商,ImsService 还必须支持标准自动配置服务器 (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
具有 RCS 功能的消息应用必须定义 android.permission.PERFORM_IMS_SINGLE_REGISTRATION
权限。要授予此权限,必须满足以下条件
- 该应用必须作为特权应用安装,这意味着它预装在设备上,并且允许访问特权权限
- 必须使用
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 单一注册测试用例的运营商认证。