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,透過單一 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。

支援 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 導入下列權限,確保安全存取電信業者的網路和使用者資料:

訊息應用程式必須定義具有 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 單一註冊測試案例的電信業者認證。