IMS 單一註冊

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 for MMTEL 和 RCS 功能,而非單次 IMS 註冊。包括佈建、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。

支援 IMS 單一註冊的 API 介面

圖 3. 支援 IMS 單一註冊的高階 API 介面

支援 AOSP 電話堆疊中 IMS 單一註冊功能的 Android 裝置,必須支援下表所述的所有 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 資料呼叫回應 允許應用程式在與特定本機通訊埠相關聯的 Socket 上,監聽 QoS 通知。
GBA 驗證 bootstrapAuthenticationRequest GbaService 允許 RCS 應用程式驗證網路和用於 RCS 功能 (例如檔案傳輸) 的存取金鑰。
RCS 使用者功能交換 ImsRcsManager RcsCapabilityExchangeImplBase 讓 Android 開放原始碼計畫能夠將其 MMTEL 和 RCS 功能傳送給供應商 ImsService,以便透過單一實體發布到網路,以便進行 RCS 使用者功能交換。同時允許其他應用程式查詢聯絡人 RCS 功能的網路。

安全性和權限

Android 12 推出下列權限,確保可安全存取電信業者的網路和使用者資料:

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 單一註冊測試案例的電信業者認證。