Android 12 推出單一註冊模型,可提供 MMTEL 和 RCS 功能。這個模型可讓裝置透過裝置 ImsService 提供的單一 IMS 註冊,管理所有 IMS 功能,並遵守部分電信業者提出的要求。相較於雙重註冊模式 (在單一裝置上管理多個 IMS 註冊),單一註冊模式可減少電信業者網路的流量,並提高可靠性。
Android 12 支援這項單一註冊模型,透過一組 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 介面
如果 Android 裝置支援 IMS 單一註冊 (屬於 AOSP 電話堆疊的一部分),就必須支援下表所述的所有 AOSP API。
| API 表面積 | 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_REGISTRATIONandroid.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE
訊息應用程式必須定義具有 RCS 功能的
android.permission.PERFORM_IMS_SINGLE_REGISTRATION
權限。如要授予這項權限,必須符合下列條件:
- 應用程式必須以具備特殊權限的應用程式身分安裝,也就是預先安裝在裝置上,且允許存取具備特殊權限的權限
- 應用程式必須使用
RoleManager設為使用者的預設簡訊角色
如未符合上述任一條件,應用程式將無法取得 android.permission.PERFORM_IMS_SINGLE_REGISTRATION 權限。也就是說,第三方應用程式無法存取 RCS 單一註冊 API,因為這類 API 需要裝置上的電信業者認證。
如果應用程式同時具有 READ_CONTACTS 權限,取得 android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE 權限後,就能使用 RcsUceAdapter 要求電話號碼的 RCS 功能。如要授予這項權限,必須符合下列條件:
- 應用程式必須以具備特殊權限的應用程式身分安裝,也就是預先安裝在裝置上,且允許存取具備特殊權限的權限。
應用程式必須定義為下列其中一個
RoleManager角色:- 預設訊息應用程式:由使用者設定。
- 預設撥號應用程式:由使用者設定。
- 預設聯絡人應用程式:Android 12 中導入的角色,可讓原始設備製造商透過裝置疊加值
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 單一註冊測試案例的電信業者認證。