按應用程式網路選擇 (PANS),按應用程式網路選擇 (PANS)

車輛越來越依賴連接來管理原始設備製造商和車主要求的越來越多的用例,從而導致數據足跡和相關成本增加。使用按應用程式網路選擇 (PANS)功能在 OEM 付費的網路上路由指定應用程式的流量。

透過 PANS,您可以管理資料使用量和成本,同時提供強大、安全且互聯的汽車體驗。平移系統:

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

為什麼選擇PANS?

PANS 可以:

  • 動態更新應用程式到網路的對應。
  • 管理應用程式級路由,無需對應用程式進行更改。
  • 只有 OEM 允許的應用程式才能存取已對應的 OEM 網路。
  • 應用程式開發人員無需進行任何更改即可實現此功能。
  • 面向使用者的指標追蹤 OEM 託管網路的應用程式到網路資料的使用情況。
  • 網路存取是安全的,不會透過意外用例或未經授權的應用程式被濫用。
  • PANS 應用程式到網路對應的變更會傳達給使用者。
  • 相同的網路配置適用於所有使用者。

核心優勢

PANS 為 OEM 提供了以下核心優勢:

  1. OEM 可以取代用戶為網路流量付費:
    • 可以免費提供使用者係統更新。
    • 可以免費向用戶提供指定應用程式的網路使用情況。
    • 用戶可以免費管理遙測和其他分析。
  2. 即使沒有用戶付費的數據計劃,OEM 也可以確保關鍵應用程式保持連線。例如,即使使用者沒有資料計劃,地圖、助理(免持駕駛)和系統更新等安全關鍵功能也能繼續發揮作用。
  3. PANS 提供了針對 Android 中網路流量路由的額外控製粒度。例如,OEM 可以為應用程式級流量的路由最佳化定義邏輯網路拓撲。

圖1 。 PANS框架

實施PANS

為了實作 PANS,提供了新的ConnectivityManager API setOemNetworkPreference 。這個新的 API 將應用程式對應到OemNetworkPreference 。此API僅適用於汽車設備,並被註釋為具有新signature權限的@SystemApi

圖 2.實施 PANS

OEM網路偏好

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 策略。
  • 為設備設定預設策略。
  • 明確政策。
  • 在啟動時應用策略。
  • 使用駕駛分心 API(請參閱駕駛分心指南)。
  • 使用OEM_PAIDOEM_PRIVATE動態更新 Wi-Fi。

圖 3.參考應用程式

指標

為了提高資料使用的透明度,收集並提供有關透過OEM_PAIDOEM_PRIVATE網路映射傳輸的資料量的指標。

故障排除

大多數故障排除情況都是由應用程式使用錯誤的網路(無網路連線)或資料過量所引起的。若要啟用快速解決方案:

  • 連接性dumpsys包括活動的每個應用程式預設網路及其關聯應用程式(從 PANS 映射)的清單。
  • Netd dumpsys包含 UID IP 和防火牆規則。
  • Netstats dumpsys包括每個應用程式的 PANS 指標。例如,哪些應用程式使用了哪個 OEM 網路。

所有dumpsys資料都可以透過建立 Android 錯誤報告來取得。