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

車輛越來越需要連線功能,才能管理 OEM 和車主要求日漸增加的用途,導致資料足跡和相關費用增加。使用應用程式專屬網路選取 (PANS) 功能,將特定應用程式的流量導向 OEM 付費網路。

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

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

為什麼要使用 PANS?

PANS 可能會導致:

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

核心優勢

PANS 為 OEM 提供下列核心優勢:

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

導入 PANS

如要實作 PANS,請使用新的 ConnectivityManager API setOemNetworkPreference。這個新 API 會將應用程式對應至 OemNetworkPreference。 這個 API 僅適用於車用裝置,並以新的 signature 權限註解為 @SystemApi

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 指定要使用的網路,系統就會使用這個網路。這不僅涵蓋絕大多數的連線需求,也允許繼續使用 NetworkRequest API 等專用 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。

指標

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

疑難排解

大多數疑難排解情況都是因為應用程式使用錯誤的網路 (沒有網路連線),或是資料用量超出上限。如要啟用快速解決方案:

  • 「連線」dumpsys會列出每個應用程式的預設網路,以及相關聯的應用程式 (從 PANS 對應)。
  • Netd dumpsys 包含 UID IP 和防火牆規則。
  • Netstats dumpsys 包含每個應用程式的 PANS 指標。 例如,哪些應用程式使用哪些原始設備製造商 (OEM) 網路。

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