IMS 服務授權

自 Android 12 起,Android 支援TS.43 服務授權設定。GSMA 規格定義了啟用服務的授權驗證步驟,包括 Voice-over-Wi-Fi (VoWiFi)、語音過 LTE (VoLTE)、支援隨附裝置的 IP (SMSoIP)、裝置端服務 (ODSA) 和裝置端資料啟用方案。

為了支援這項規格,Android 提供了 IMS 服務授權功能,可讓服務供應商告知行動裝置 IP 多媒體子系統 (IMS) 網路服務的狀態。這項授權功能可讓裝置使用 EAP-AKA 驗證,查詢 GSMA TS.43 規格中的 IMS 授權狀態定義的電信業者授權伺服器,而不必要求使用者手動輸入任何憑證。

擁有 IMS 授權伺服器的電信業者可以使用 IMS 服務授權功能佈建服務。採用這項功能有以下優點:

  • 這項授權功能可用於多項產品和原始設備製造商 (OEM),因此可以減少電信業者的測試和認證費用。
  • 透過標準 Android 應用程式降低裝置製造商的開發負擔。
  • 允許裝置製造商和電信業者為這項功能提供程式碼,因為這項功能採用開放原始碼。
  • 可為北美電信業者提供緊急地址管理功能。

架構

下圖說明 IMS 服務授權功能的架構和行為。

TS.43 授權功能

圖 1 TS.43 授權功能架構

如圖 1 所示,IMS 服務授權功能的架構包含下列元件:

  • service_entitlement TS.43 Service API 靜態程式庫這個程式庫會實作 TS.43 規格、與電信業者的授權伺服器互動,並針對各種 TS.43 用途公開應用程式導向的 API。
  • ImsServiceEntitlement 用戶端應用程式:這個應用程式使用 TS.43 Service API。應用程式會實作 UI 元素,包括用於轉譯電信業者服務入口網站的 WebView,讓使用者啟動服務並與其他 Android 元件互動,進而管理端對端使用者體驗。

    如要進一步瞭解如何設定 Android 與電信業者的 TS.43 型授權伺服器搭配運作,請參閱 ImsServiceEntitlement 應用程式

圖 1 中的編號行顯示 IMS 服務授權功能的元件如何互相通訊。以下說明每個標示的步驟:

(1) 用戶端應用程式叫用 TS.43 服務 API 來啟動服務授權要求。

(2) TS.43 服務 API 傳送 HTTP 要求至電信業者的授權伺服器,以啟動 EAP-AKA 驗證。

(3) TS.43 服務 API 會叫用電話 API (例如 getIccAuthentication),以完成 EAP-AKA 驗證回應。

(4) 在 EAP-AKA 回應通過驗證後,TS.43 服務會從電信業者的授權伺服器收到服務授權或設定資料。

(5) TS.43 服務將服務授權或設定資料傳回用戶端應用程式。

(6) 用戶端應用程式會處理資料,並視需要顯示電信業者的服務入口網站,以便使用者完成服務啟用程序。

整合

本節說明整合 service_entitlement 程式庫和 ImsServiceEntitlement 應用程式的程序。

由於沒有 Android 12 API 依附元件,因此 service_entitlement 程式庫和 ImsServiceEntitlement 應用程式可以向後移植至舊版 Android 平台。

service_entitlement 程式庫

由於 service_entitlement 程式庫是以靜態方式連結至 ImsServiceEntitlement app,因此不需要額外執行任何步驟,就能將程式庫整合至 ImsServiceEntitlement 應用程式。

service_entitlement 程式庫可與您的應用程式整合,以用於數據方案和 ODSA 等用途。程式庫也可以整合到應用程式中,根據 EAP-AKA 通訊協定來處理非 TS.43 授權用途。

以下說明用於這類用途的 API:

  • TS.43 應用程式使用程式庫中實作的 TS.43 HTTP 通訊協定:使用 ServiceEntitlement 類別內的 API
  • 使用程式庫中實作的 EAP-AKA 通訊協定的非 TS.43 應用程式:使用在 EapAkaHelper 類別中公開的 API

ImsServiceEntitlement 應用程式

根據預設,Android 會將安裝在產品分區中的 ImsServiceEntitlement 應用程式,當做具有特殊權限的應用程式。如要設定應用程式,請使用以下 CarrierConfig 金鑰:

KEY_ENTITLEMENT_SERVER_URL_STRING 電信業者授權伺服器網址。必須加上 https:// 前置字串。
KEY_FCM_SENDER_ID_STRING 電信業者的 FCM 寄件者 ID。

如果電信業者不需要 FCM,請勿設定這個值。
KEY_SHOW_VOWIFI_WEBVIEW_BOOL 如果電信業者需要使用者入口網站 UI 才能註冊 VoWiFi 服務,請設為 true。例如同意條款及細則,或輸入緊急地址。

北美的電信業者通常要求提供此網址。
KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING
如果 KEY_SHOW_VOWIFI_WEBVIEW_BOOLtrue,請設為 com.android.imsserviceentitlement/.WfcActivationActivity
KEY_IMS_PROVISIONING_BOOL 如果電信業者要求在背景佈建 IMS (VoLTE/VoWiFi/SMSoIP) 服務,請設為 true

部分歐洲電信業者要求提供此憑證。
KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL 如果 KEY_IMS_PROVISIONING_BOOLtrue,請設為 true

傳送至電信業者授權伺服器和入口網站的 HTTP 流量會通過預設網路,例如預設行動數據或 Wi-Fi。

GMS 合作夥伴:根據 TS.43 v5.0 規格,Android 12 的 TS.43 授權應用程式支援下列電信業者:

  • 美國:CSpire、US Cellular、Cellcom
  • 法國:Orange

IMS 佈建的其他系統 UI

本節說明原始設備製造商 (OEM) 如何支援與 IMS 服務佈建相關的其他系統 UI 元素 (例如在 VoWiFi 啟用時顯示通知時)。

ImsServiceEntitlement 應用程式使用 ProvisioningManager.setProvisioningIntValue(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, value) 系統 API,將 VoWiFi 佈建狀態設為平台。這個 API 也適用於 VoLTE (含 KEY_VOLTE_PROVISIONING_STATUS) 和 SMSoIP (含 KEY_SMS_OVER_IP_ENABLED)。

接著,系統 UI 即可使用 getProvisioningIntValue 讀取佈建狀態,或透過註冊回呼的方式透過 registerProvisioningChangedCallback 監控佈建狀態異動。

覆寫測試設定

請按照下列程序暫時變更 ImsServiceEntitlement 應用程式行為,以便進行測試。如要進一步瞭解如何覆寫電信業者設定,請參閱覆寫電信業者設定

略過 VoWiFi 註冊程序

如要略過 VoWiFi 註冊程序 (允許直接開啟 VoWiFi),請覆寫電信業者設定 KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING,並將值設為空白字串。

略過 IMS 佈建

如要略過 IMS 佈建,使其能夠使用 IMS 服務,並允許使用者在不使用網路佈建的情況下開啟此類服務,請覆寫電信業者設定 KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL,並將值設為 false

變更授權伺服器網址

如要變更授權伺服器網址,請覆寫電信業者設定 KEY_ENTITLEMENT_SERVER_URL_STRING,並將其值設為預期網址字串。您必須加入 https:// 前置字串。

覆寫電信業者設定

在 Android 11 中,系統內建電信業者設定覆寫指令,您可以透過 Root 權限使用這類指令。

以下範例說明如何覆寫電信業者設定索引鍵 carrier_volte_provisioning_required_bool,並將其值設為 false。您可以多次執行這個指令來覆寫多項設定。

adb root
adb shell cmd phone cc set-value -p carrier_volte_provisioning_required_bool false

如要清除所有覆寫設定,請使用下列指令:

adb shell cmd phone cc clear-values

如要取得更多資訊,請執行下列指令:

adb shell cmd phone cc