對於搭載 Android 12 以上版本的裝置,Android 支援 5G 網路切片功能,可使用網路虛擬化技術將單一網路連線劃分為多個不同的虛擬連線,為不同類型的流量提供不同數量的資源。5G 網路切片技術可讓網路營運商將部分網路專用於為特定客群提供特定功能。Android 12 推出下列 5G 企業網路切片功能,網路業者可提供給企業客戶:
全代管裝置的企業裝置切片
如果企業為員工提供全代管公司裝置,網路供應商可以提供一或多個有效的企業網路切片,將公司裝置上的流量導向這些切片。從 Android 12 開始,Android 允許電信業者透過 URSP 規則提供企業專用網路切片,不必透過 APN 設定網路切片。
為設有工作資料夾的裝置提供企業商務應用程式切片
如果企業採用工作資料夾解決方案,Android 12 可讓裝置將工作資料夾中所有應用程式的流量,導向企業網路切片。企業可以透過裝置政策控制器 (DPC) 啟用這項功能。
工作資料夾解決方案提供企業所需的自動驗證和存取權控管層級,確保只有來自工作資料夾中企業應用程式的流量,會路由至企業網路切片。工作資料夾中的應用程式不需要修改,即可明確要求企業網路切片。
AOSP 中的 5G 網路切片運作方式
Android 12 透過 AOSP 中電話代碼庫和網路共用模組的增補內容,導入 5G 網路切片支援功能,納入網路切片所需的現有連線 API。
Android 電話平台提供 HAL 和電話 API,可根據核心網路程式碼提出的網路要求,以及數據機中的 5G 切片功能,支援切片。圖 1 說明 5G 網路切片功能的元件。
圖 1. AOSP 中的 5G 網路切片架構。
電話和連線平台支援:
- 將切片類別的網路要求轉換為流量描述元,然後傳遞至數據機,以進行 URSP 流量比對和路徑選取
- 如果企業網路切片無法使用,則會改用預設網路
- 將工作資料夾中所有應用程式的流量,轉送至對應的連線
支援企業切片
- 偵測裝置上是否有工作資料夾
- 檢查企業 IT 管理員使用的 DPC 提供的權限或路徑指示
核心網路服務在 Android 12 中對連線共用模組進行了下列變更:
- 將大部分的
android.net.*
公開或系統 API 類別新增至 Tethering 模組 擴大無線網路連線模組的範圍,納入:
f/b/core/java/android/net/…
f/b/services/net/…
f/b/services/core/java/com/android/server/connectivity/…
f/b/services/core/java/com/android/server/ConnectivityService.java
f/b/services/core/java/com/android/server/TestNetworkService.java
將 VPN 程式碼移出 Tethering 模組
Android 12 會將具備下列功能的程式碼移至「網路共用」模組:
- 接收應用程式的網路連線要求
- 接收系統要求 (例如「將這些應用程式放在企業切片上」;Android 12 推出這項功能)
- 系統會將要求傳送至電話通訊程式碼,嘗試透過 HAL API 和數據機設定網路或切片
- 告知 netd 如何以每個應用程式為單位轉送流量 (Android 12 中導入)
- 透過
ConnectivityManager
API (例如NetworkCallback
、getActiveNetwork
、getNetworkCapabilities
) 通知應用程式網路流量的狀況。
實作
如要在裝置上支援 5G 切片,裝置必須具備支援 IRadio 1.6 HAL 的數據機,該 HAL 具有 setupDataCall_1_6
API。這個 API 會設定資料連線,並包含下列參數,以支援 5G 切片:
trafficDescriptor
:指定傳送至數據機的流量描述元sliceInfo
:指定網路切片資訊,以便在 EPDG 交接至 5G 時使用matchAllRuleAllowed
:指定是否允許使用預設的「符合所有條件」URSP 規則。電話服務會將預設網路設為 true,但不會將切片設為 true。系統會將「符合所有條件」規則套用至預設網路。如果應用程式要求的特定版面配置無法使用,系統會回報該版面配置無法使用。如果是企業應用程式,如果企業網路無法使用,電話通訊架構可以改用預設網路。
除非 getHalDeviceCapabilities
API 回報數據機不支援 getSlicingConfig
API,否則數據機也必須實作該 API。
企業版需求
以下說明企業在 Android 企業部署環境中,於裝置上使用 5G 網路切片功能時須滿足的條件。
- 確認全代管裝置或設有工作資料夾的員工裝置支援 5G SA,且搭載的數據機支援
setupDataCall_1_6
API。 - 與電信合作夥伴合作,設定切片和效能,或瞭解服務等級協議 (SLA) 特性。
在設有工作資料夾的裝置上啟用 5G 切片
如果是設有工作資料夾的裝置,AOSP 預設會關閉 5G 網路切片功能。如要啟用網路切片,企業 IT 管理員可透過 EMM DPC,使用 DevicePolicyManager
(DPM) API (Android 12 中推出) 的 setPreferentialNetworkServiceEnabled
方法,為每位員工開啟或關閉工作資料夾應用程式流量的企業網路切片轉送功能。
如果 EMM 供應商使用自訂 DPC,就必須整合 DevicePolicyManager
API,才能支援企業客戶。
URSP 規則
本節提供電信業者資訊,說明如何為不同切片類別 (包括企業、CBS、低延遲和高頻寬流量) 設定 URSP 規則。為不同類別的切片設定 URSP 規則時,電信業者必須使用下列 Android 專屬值。
ID | 值 | 說明 |
---|---|---|
OSId | 97a498e3-fc92-5c94-8986-0333d06e4e47 |
Android 的 OSId 是以命名空間 ISO OID 和名稱「Android」產生的版本 5 UUID。 |
電信業者必須為每個網路切片流量設定 URSP 規則,並將流量描述符元件設為「OS ID + OS 應用程式 ID 類型」。舉例來說,「ENTERPRISE」切片的值必須為 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345
。這個值是 OSId、OSAppId 長度 (0x0A
) 和 OSAppId 的串連。如要進一步瞭解流量描述元元件類型,請參閱 3GPP TS 24.526 表格 5.2.1。
下表說明不同配量類別的 OSAppId 值。
區塊類別 | OSAppId | 說明 |
---|---|---|
企業 | 0x454E5445525052495345 |
OSAppId 是字串「ENTERPRISE」的位元組陣列表示法 |
ENTERPRISE2 | 0x454E544552505249534532 |
OSAppId 是字串「ENTERPRISE2」的位元組陣列表示法 |
ENTERPRISE3 | 0x454E544552505249534533 |
OSAppId 是字串「ENTERPRISE3」的位元組陣列表示法 |
ENTERPRISE4 | 0x454E544552505249534534 |
OSAppId 是字串「ENTERPRISE4」的位元組陣列表示法 |
ENTERPRISE5 | 0x454E544552505249534535 |
OSAppId 是字串「ENTERPRISE5」的位元組陣列表示法 |
CBS | 0x434253 |
OSAppId 是字串「CBS」的位元組陣列表示法 |
PRIORITIZE_LATENCY | 0x5052494f524954495a455f4c4154454e4359 |
OSAppId 是字串「PRIORITIZE_LATENCY」的位元組陣列表示法 |
PRIORITIZE_BANDWIDTH | 0x5052494f524954495a455f42414e445749445448 |
OSAppId 是字串「PRIORITIZE_BANDWIDTH」的位元組陣列表示法 |
URSP 規則範例
下表顯示企業、CBS、低延遲、高頻寬和預設流量的 URSP 規則範例。
Enterprise 1
Android 12 以上版本支援 Enterprise 1。以下是 ENTERPRISE1 流量的 URSP 規則範例:
URSP 規則 #1 (enterprise1) | |
---|---|
優先順序 | 1 (0x01) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | 企業 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | 企業 |
Enterprise 2
Android 13 以上版本支援 Enterprise 2。以下是 ENTERPRISE2 流量的 URSP 規則範例:
URSP 規則 #2 (enterprise2) | |
---|---|
優先順序 | 2 (0x02) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534532 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | enterprise2 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | enterprise2 |
Enterprise 3
Android 13 以上版本支援 Enterprise 3。以下是 ENTERPRISE3 流量的 URSP 規則範例:
URSP 規則 #3 (enterprise3) | |
---|---|
優先順序 | 3 (0x03) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534533 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | enterprise3 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | enterprise3 |
Enterprise 4
Android 13 以上版本支援 Enterprise 4。以下是 ENTERPRISE4 流量的 URSP 規則範例:
URSP 規則 #4 (enterprise4) | |
---|---|
優先順序 | 4 (0x04) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534534 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | enterprise4 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | enterprise4 |
Enterprise 5
Android 13 以上版本支援 Enterprise 5。以下是 ENTERPRISE5 流量的 URSP 規則範例:
URSP 規則 #5 (enterprise5) | |
---|---|
優先順序 | 5 (0x05) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534535 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | enterprise5 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | enterprise5 |
CBS
Android 13 以上版本支援 CBS。以下是 CBS 流量的 URSP 規則範例:
URSP 規則 #6 (CBS) | |
---|---|
優先順序 | 6 (0x06) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E4703434253 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | cbs |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | cbs |
低延遲
Android 13 以上版本支援低延遲模式。以下是 LOW_LATENCY 流量的 URSP 規則範例:
URSP 規則 #7 (低延遲) | |
---|---|
優先順序 | 7 (0x07) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 0x97A498E3FC925C9489860333D06E4E47125052494f524954495a455f4c4154454e4359 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | 延遲 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | 延遲 |
高頻寬
Android 13 以上版本支援高頻寬。以下是 HIGH_BANDWIDTH 流量的 URSP 規則範例:
URSP 規則 #8 (高頻寬) | |
---|---|
優先順序 | 8 (0x08) |
流量描述元 #1 | |
作業系統 ID + 作業系統應用程式 ID 類型 | 97A498E3FC925C9489860333D06E4E47145052494f524954495a455f42414e445749445448 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
元件 2:DNN | 頻寬 |
路徑選取描述元 #2 | |
優先順序 | 2 (0x02) |
元件 1:DNN | 頻寬 |
預設
URSP 規則 #9 (預設) | |
---|---|
優先順序 | 9 (0x09) |
流量描述元 #1 | |
match-all | 無 |
路線選擇描述元 #1 | |
優先順序 | 1 (0x01) |
元件 1:S-NSSAI | SST:XX SD:YYYYYY |
測試
如要測試 5G 網路切片,請使用下列手動測試。
如要設定測試裝置,請按照下列步驟操作:
確認 URSP 政策已設定非預設規則,且該規則符合企業類別,以及對應的路由選取描述元將企業類別對應至企業網路切片;此外,預設規則會將流量導向預設網際網路切片。
確認裝置上已設定工作資料夾。
透過 DPC 選擇使用網路切片
如要測試 5G 網路切片行為,請按照下列步驟操作:
- 確認已建立企業網路切片 PDU 工作階段 (例如使用特定 IP 位址),且工作資料夾中的應用程式使用該 PDU 工作階段。
- 確認已透過預設網際網路切片建立獨立的 PDU 工作階段,且個人設定檔中的應用程式使用該 PDU 工作階段。
5G 切片加購
5G 切片升級銷售功能適用於 Android 14-QPR1,可讓電信業者透過 5G 網路切片,為使用者提供更強大的網路功能 (延遲和頻寬)。
5G 切片加購功能會使用電信業者授權伺服器的 TS.43 回應,引導使用者完成購買流程。電信業者可使用回應指定電信業者購買網頁檢視區塊的網址、將額外資料傳送至網頁檢視區塊,以及指出切片是否已佈建並可在電信業者網路上使用。
電信業者可使用電信業者設定,自訂 5G 切片加購功能的行為,包括控制是否可提出購買要求、允許應用程式要求進階功能的時間,以及電話架構等待使用者或網路回應的時間長度。
5G 切片加購功能提供名為 DataBoostWebServiceFlow
的介面,可讓 Android 與電信業者 WebView 進行通訊。
圖 2 顯示 5G 切片加購流程:
圖 2. 5G 切片加購流程。
TS.43 授權程序
當使用者要求強化網路功能時,Telephony 架構會要求所要求進階功能的服務授權設定。如果 TS.43 回應有效,Telephony 架構會使用 HTTP 回應中的欄位來驅動購買要求。
切片購買欄位
TS.43 授權設定包含下列切片購買欄位:
- 權限狀態
按鍵:
EntitlementStatus
類型:
int
支援的值:
0
(已停用)、1
(已啟用)、2
(不相容)、3
(佈建中)、4
(已納入)- 佈建狀態
按鍵:
ProvStatus
類型:
int
支援的值:
0
(未佈建)、1
(已佈建)、2
(無法使用)、3
(處理中)
電話架構會結合授權狀態和佈建狀態,判斷目前的切片購買狀態。結果可以是下列其中一項:
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS
PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR
如果授權狀態為 1
(已啟用),且佈建狀態為 0
(未佈建),電話架構會向使用者顯示加購通知,引導他們透過電信業者 WebView 購買加購內容。下表說明 Telephony 架構在不同組合的佈建和授權狀態值下的行為。
佈建狀態 | |||||
---|---|---|---|---|---|
未佈建 (0 ) |
已佈建 (1 |
不適用 (2 ) |
處理中 (3 ) |
||
授權狀態 | 已停用 (0 ) |
失敗 | 失敗 | 失敗 | 失敗 |
已啟用 (1 ) |
顯示網頁畫面 | 已購買廣告產品 | 已購買廣告產品 | 處理中 | |
不相容 (2 ) |
失敗 | 失敗 | 失敗 | 失敗 | |
佈建 (3 ) |
貨運公司錯誤 | 貨運公司錯誤 | 處理中 | 處理中 | |
已包含 (4 ) |
貨運公司錯誤 | 已購買廣告產品 | 已購買廣告產品 | 貨運公司錯誤 |
服務流程欄位
TS.43 回應會指定網址、使用者資料和內容類型,以便自訂電信業者購買網頁檢視行為。如果未指定內容類型,系統會以 GET 要求載入網址。如果使用者資料存在,系統會將其附加至網址做為查詢參數 (例如 https://www.android.com?encodedValue=Base64EncodedUserData
);如果不存在,系統會直接使用網址 (例如 https://www.android.com
)。
如果內容類型是以 JSON 或 XML 格式指定,系統會以 POST 要求載入網址,並將使用者資料 (如果以 Base 64 編碼,則會先解碼) 做為 POST 要求資料傳送。
- 網址
按鍵:
ServiceFlow_URL
類型:
String
範例:
"https://www.android.com"
- 使用者資料
按鍵:
ServiceFlow_UserData
類型:
String
範例:
"encodedValue=Base64EncodedUserData"
- 內容類型
按鍵:
ServiceFlow_ContentsType
類型:
String
支援的值:
0
(未指定)、1
(JSON)、2
(XML)
電信業者設定
以下是可用的電信業者設定,用於自訂 5G 切片加購功能的行為。
KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY
支援的進階功能清單。這是 int 陣列,其中包含
TelephonyManager.PremiumCapability
。 這些進階功能與對應的NetworkCapabilities.NetCapability
類別具有相同價值。如果要求使用這項設定未包含的進階功能,購買要求會失敗,並傳回CARRIER_DISABLED
結果。在 Android 14 中,系統僅支援
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY
。KEY_PREMIUM_CAPABILITY_MAXIMUM_DAILY_NOTIFICATION_COUNT_INT
每天向使用者顯示購買加購通知的次數上限。如果達到每日上限,系統就不會顯示加購通知,且會限制購買要求 (包括授權伺服器要求),直到隔天午夜為止。如果購買要求是在達到每日上限後提出,系統會傳回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
結果,表示要求失敗。KEY_PREMIUM_CAPABILITY_MAXIMUM_MONTHLY_NOTIFICATION_COUNT_INT
每月向使用者顯示購買加購通知的次數上限。如果達到每月上限,系統就不會顯示加購通知,且會限制購買要求 (包括授權伺服器要求),直到下個月的第一天為止。達到每月上限後提出的購買要求會失敗,並傳回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
結果。KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING
使用者點選加購通知時顯示的備用電信業者購買網址。如果授權伺服器的 TS.43 回應中沒有購買網址,系統會改用這個值。如果 TS.43 回應中的網址或電信業者設定無效,購買要求就會失敗,並傳回
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED
結果。KEY_PREMIUM_CAPABILITY_SUPPORTED_ON_LTE_BOOL
是否允許裝置連上長期演進技術 (LTE) 時購買進階功能。如果
true
,則可在 LTE 和新無線電 (NR) 上提出購買要求。如果false
,只能在 NR 上提出購買要求,在 LTE 上提出的要求會失敗,並傳回PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE
結果。KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG
在系統自動取消前,向使用者顯示購買加購通知的時間長度。取消通知後,後續要求會受到節流,並因
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
結果而失敗。KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG
因逾時或使用者取消而失敗後,後續購買要求應受到節流的時間長度。如果使用者未在
KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG
指定的逾時時間內點選購買加購通知,或是取消或關閉通知,系統就會啟動這個退避計時器。計時器運作時,購買要求會失敗,並傳回PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
結果。KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG
因電信業者或網路問題導致交易失敗後,後續購買要求應受到節流的時間長度。如果授權檢查失敗、網址無法使用,或電信業者購買網址指出失敗,就會啟動這個退避計時器。計時器運作時,購買要求會失敗,並傳回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
結果。KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG
網路必須在多長時間內設定切片設定,才能購買進階功能。在這段期間,系統會封鎖後續的購買要求,並傳回
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
結果。如果網路無法及時設定切片設定,應用程式可以再次要求購買進階功能。無論使用者是否已向電信業者付款,電話服務都會等到傳送相應的切片設定後,才將交易視為完成。
JavaScript 介面
使用者點選網路加速通知時,系統會向使用者顯示含有電信業者購買網址的 WebView
物件。電信業者可以在購買網站中使用 DataBoostWebServiceFlow
JavaScript 介面提供的 API,與切片購買應用程式通訊。
電信業者網站可透過 getRequestedCapability()
方法取得要求的高階功能。
如果交易成功,電信業者網站必須透過 notifyPurchaseSuccessful()
或 notifyPurchaseSuccessful(duration)
通知切片購買應用程式,其中 duration
是選用參數,表示切片的預期時間長度。
如果購買交易未成功,電信業者網站必須透過 notifyPurchaseFailed(code, reason)
方法通知切片購買應用程式,其中 code
是指出失敗原因的失敗代碼,而 reason
則是失敗原因 (如果失敗代碼不明)。
如果未呼叫任一回應方法,系統不會將購買交易視為完成,且購買要求最終會逾時。
以下是貨運公司網站可能會傳回的有效失敗代碼,表示購買失敗:
FAILURE_CODE_UNKNOWN
FAILURE_CODE_CARRIER_URL_UNAVAILABLE
FAILURE_CODE_AUTHENTICATION_FAILED
FAILURE_CODE_PAYMENT_FAILED
FAILURE_CODE_NO_USER_DATA
購買完成後,電信業者必須將 PRIORITIZE_LATENCY
切片更新至使用者裝置的 URSP 規則。