依應用程式選擇網路 (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. 原始設備製造商 (OEM) 可確保即使沒有安裝 使用者付費數據方案例如:地圖、Google 助理等安全的重要功能 不必動手行車) 和系統更新 使用者沒有數據方案時。
  3. PANS 可提供網路流量專屬的額外控管程度 也就是 Android 的轉送功能舉例來說,原始設備製造商 (OEM) 能以最佳方式定義邏輯網路 應用程式層級流量轉送的拓撲。

圖 1. PANS 架構

實作永久帳號

如要實作永久帳號 (PANS),我們推出了新的 ConnectivityManager API。 提供了 setOemNetworkPreference。 這個新的 API 會將應用程式對應至 OemNetworkPreference。 這個 API 僅適用於車用裝置,且加註為 @SystemApi (具備新的 signature 權限)。

圖 2. 實作永久帳號

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 網路設為預設狀態,因此不需要 只有使用受限網路的權限這類應用程式會受到限制 原始設備製造商 (OEM) 網路已由 PANS 指派為預設網路,但也能 明確要求,並在應用程式選擇的情況下,明確要求 OEM 網路。

查看參考應用程式

系統提供名為 NetworkPreferenceApp 的參考應用程式 (包括程式碼) 並示範如何完成以下操作:

  • 使用 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 資料。