個別應用程式網路選取 (PANS)

車輛越來越仰賴連線功能,才能管理原始設備製造商和車輛車主要求的用途,導致資料足跡和相關成本增加。使用個別應用程式網路選取 (PANS) 功能,將指定應用程式的流量路由至 OEM 付費的網路。

有了 PANS,您就能管理資料用量量和費用,同時提供穩健、安全的車輛連網體驗。PANS:

  • 包含新增至 ConnectivityManager 的新 API,僅適用於汽車裝置。
  • 提供更新版的 Wi-Fi 建議 API (請參閱「用於網際網路連線的 Wi-Fi 建議 API」),以便支援動態變更 PANS 網路功能。
  • 收集相關指標。
  • 提供參考應用程式。

為什麼要使用 PANS?

PANS 可執行以下操作:

  • 動態更新應用程式與網路的對應項目。
  • 不必變更應用程式,即可管理應用程式層級的路由。
  • 只有原始設備製造商 (OEM) 允許的應用程式才能存取對應的 OEM 網路。
  • 應用程式開發人員無須進行任何變更即可實作這項功能。
  • 使用者面指標會追蹤 OEM 管理網路的應用程式到網路資料用量。
  • 網路存取權是安全的,不會因意外用途或未經授權的應用程式而遭到濫用。
  • 向使用者說明 PANS 應用程式至網路對應項目的異動。
  • 所有使用者都會套用相同的網路設定。

核心優勢

PANS 為原始設備製造商 (OEM) 提供以下核心優勢:

  1. OEM 可以為網路流量付費,而非使用者:
    • 可免費為使用者提供系統更新。
    • 可免費為使用者提供指定應用程式的網路用量。
    • 使用者可以免費管理遙測資料和其他分析資料。
  2. 即使沒有使用者付費資料方案,原始設備製造商 (OEM) 也能確保重要應用程式保持連線。舉例來說,即使使用者沒有數據方案,安全性至關重要的功能 (例如地圖、Google 助理 (免手持駕駛) 和系統更新) 仍會繼續運作。
  3. PANS 提供精細的控管功能,可針對 Android 中的網路流量路由進行控管。舉例來說,原始設備製造商可以為應用程式層級流量路由最佳化定義邏輯網路拓撲。

圖 1. PANS 架構

實作 PANS

為了實作 PANS,我們提供新的 ConnectivityManager API setOemNetworkPreference。這個新 API 會將應用程式對應至 OemNetworkPreference。這個 API 僅適用於汽車裝置,並會標註為具有新 signature 權限的 @SystemApi

圖 2. 實作 PANS

OemNetworkPreference

OemNetworkPreferenceOEM_PAIDOEM_PRIVATE NetworkCapabilities 的抽象概念,可將應用程式依套件名稱對應至網路偏好設定。網路偏好設定可讓網路建立階層。舉例來說,將應用程式對應至 OEM_NETWORK_PREFERENCE_OEM_PAID 偏好設定,會導致系統為應用程式指派的預設網路,依下列優先順序:首先使用 UNMETERED 網路,如果 UNMETERED 無法使用,則使用 OEM_PAID 網路,如果 OEM_PAID 無法使用,則使用系統預設網路。

  • OEM_PAID 主要用於可在 OEM 和非 OEM 網路上進行路由的應用程式。
  • OEM_PRIVATE 主要用於 OEM 應用程式,讓應用程式存取專屬網路。
/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, use the general default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1;

/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, the app doesn't get a default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2;

/**
* Use only NET_CAPABILITY_OEM_PAID networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3;

/**
* Use only NET_CAPABILITY_OEM_PRIVATE networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4;

呼叫 PANS API

如何使用 PANS API:

  1. 使用 OemNetworkPreferences 將應用程式對應至網路偏好設定。
  2. 使用 OemNetworkPreferences 物件呼叫 setOemNetworkPreference
  3. 使用 Runnable 介面監聽 API 完成情形。

例如:

// Mapping three packages to two network preferences
// Packages have a 1:1 mapping to network preferences
OemNetworkPreferences pref = new OemNetworkPreferences.Builder()
   .addNetworkPreference("first.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
   .addNetworkPreference("second.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
   .addNetworkPreference("third.package.name", OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY)
   .build();

myConnectivityManager.setOemNetworkPreference(pref, myExecutor, myListener);

注意事項

實作 PANS 時,請注意下列事項:

  • 網路偏好設定不會在開機後保留,每次開機時都需要重新套用。
  • 如要為應用程式建立偏好設定,應用程式不必安裝。因此,您可以主動設定已解除安裝的應用程式的網路偏好設定。
  • 應用程式只能對應至單一網路偏好設定。
  • 網路偏好設定可用於設定應用程式的預設網路。如果應用程式未透過某個專用 API 指定要使用的網路,系統就會使用這項網路。這不僅涵蓋絕大多數的連線需求,還可讓您繼續使用專用 API (例如 NetworkRequest API),以免中斷現有應用程式用途。舉例來說,如果應用程式只想透過無限量網路執行作業,PANS 就不會強制使用其他網路。

設定網路

使用對應的網路偏好設定時,必須有具備 OEM_PAIDOEM_PRIVATE 功能的網路。Android 支援乙太網路和 Wi-Fi 網路的功能設定。針對乙太網路,您可以使用資源疊加層 config_ethernet_interfaces。這會在編譯期間設定。

針對 Wi-Fi,WifiNetworkSuggestion API 可搭配新的 Android 12 API setOemPaid(Boolean)setOemPrivate(Boolean) 使用。您可以在執行階段變更這項設定。

請參考以下範例:

  1. 名為 config_ethernet_interfaces 的資源疊加層指定:
    • 要設定的介面名稱。
    • 所需的 NetworkCapabilities 值。
      <!-- 11 NET_CAPABILITY_NOT_METERED
           12 NET_CAPABILITY_INTERNET
           14 NET_CAPABILITY_TRUSTED
           15 NET_CAPABILITY_NOT_VPN
           22 NET_CAPABILITY_OEM_PAID || 26 NET_CAPABILITY_OEM_PRIVATE -->
      <string-array translatable="false" name="config_ethernet_interfaces">
         <item>eth0;11,12,14,15,22;;</item></string-array>
  2. 這個 WiFiNetworkSuggestion 可以動態變更:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);

限制 PANS 網路的存取權

使用 OEM_PAIDOEM_PRIVATE 功能標記網路,即可將該網路標示為受管制網路。受限網路只能由具備 CONNECTIVITY_USE_RESTRICTED_NETWORKS 權限的應用程式使用,這項權限由 OEM 廠商控管。

具備這項權限的應用程式可以使用受限制的網路,前提是應用程式明確要求。不過,這些應用程式不會預設為受限制的網路。透過 PANS 對應的應用程式可以將受限制的 OEM 網路設為預設值,且不需要受限制的網路權限即可使用。如果這類應用程式有由 PANS 指派的受限制 OEM 網路,並將其設為預設網路,則應用程式也可以選擇明確要求該 OEM 網路。

查看參考應用程式

在使用者偵錯汽車版本中提供名為 NetworkPreferenceApp 的參考應用程式 (包括程式碼),並示範如何執行下列操作:

  • 使用 PANS 指標。
  • 設定 PANS 政策。
  • 為裝置設定預設政策。
  • 清除政策。
  • 在啟動時套用政策。
  • 使用 Driver Distraction API (請參閱「駕駛人分心指南」)。
  • 使用 OEM_PAIDOEM_PRIVATE 動態更新 Wi-Fi。

圖 3. 參考應用程式

指標

為讓資料使用情形更透明,系統會收集並提供透過 OEM_PAIDOEM_PRIVATE 網路對應項目傳輸的資料量相關指標。

疑難排解

大多數的疑難排解條件都是因為應用程式使用錯誤的網路 (沒有網路連線) 或資料超出。如要啟用快速解決方案,請按照下列步驟操作:

  • 連線 dumpsys 包含每個應用程式預設網路和相關應用程式 (從 PANS 對應) 的清單。
  • Netd dumpsys 包含 UID IP 和防火牆規則。
  • Netstats dumpsys 包含每個應用程式的 PANS 指標。例如,哪些應用程式使用哪些 OEM 網路。

您可以建立 Android 錯誤報告,取得所有 dumpsys 資料。