Android 12 引入了對單一註冊模型的支持,以提供 MMTEL 和 RCS 功能。此模型允許設備通過設備的 ImsService 提供的單個 IMS 註冊來管理所有 IMS 功能,並符合某些電信運營商引入的要求。與雙註冊模式在一台設備上管理多個IMS註冊相比,單註冊減少了運營商網絡的流量並提高了可靠性。
Android 12 通過具有一組 API 的架構支持這種單一註冊模型,這些 API 允許 AOSP 電話堆棧管理 ImsService 提供的ImsService
功能和用戶選擇的 RCS 消息傳遞應用程序提供的 RCS 功能。為了支持 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 說明了雙重註冊模型的架構。在此模型中,每個應用程序負責連接到運營商的網絡並為 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 表面
支持 IMS 單一註冊作為 AOSP 電話堆棧的一部分的 Android 設備需要支持下表中描述的所有 AOSP API。
API表面積 | RCS 應用程序 API | 供應商 IMS API | 描述 |
---|---|---|---|
RCS 配置 | 供應管理器 | ImsConfigImplBase | 如果運營商使用專有運營商授權機制,則允許 OEM 或運營商提供應用程序來更新 RCS 配置狀態。 ImsService 還必須支持標準 AutoConfigurationServer (ACS),以便為不使用專有機制的運營商進行配置。 |
SIP消息轉發 | SIPDelegateManager | SipTransportImplBase | 允許 RCS 應用程序首先將特定的 RCS 功能標籤與設備ImsService ,然後發送和接收與這些 RCS 功能標籤關聯的 SIP 消息和 IMS 註冊更新。 |
專用承載通知 | 連接管理器 | 數據呼叫響應 | 允許應用在與特定本地端口關聯的套接字上偵聽 QoS 通知。 |
GBA認證 | 引導認證請求 | Gb服務 | 允許 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
將應用設置為用戶的默認 SMS 角色
如果不滿足這兩個條件,應用程序將被拒絕訪問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 Single Registration 。
驗證
要驗證 IMS 單一註冊的實施,請執行以下操作:
- 確保CtsTelephonyTestCases CTS 測試套件通過。
- 安裝並運行TestRcsApp以在集成期間運行基本的單一註冊測試用例。
- IMS單一註冊測試用例通過運營商認證。