每應用網絡選擇 (PANS)

車輛越來越依賴連接來管理 OEM 和車主要求的不斷增長的用例列表,從而導致數據佔用量和相關成本增加。使用按應用程序網絡選擇 (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網絡偏好

OemNetworkPreference是對OEM_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功能標記網絡將該網絡標記為受限網絡。受限網絡只能由具有 OEM 控制的CONNECTIVITY_USE_RESTRICTED_NETWORKS權限的應用程序使用。

具有此權限的應用程序可以使用受限網絡,前提是應用程序明確請求它們。但是,這些應用程序不會將受限網絡作為默認設置。通過 PANS 映射的應用可以將受限 OEM 網絡設置為其默認值,並且不需要受限網絡權限即可使用它們。當此類應用程序具有由 PANS 指定為其默認網絡的受限 OEM 網絡時,如果應用程序選擇這樣做,它還可以明確請求所述 OEM 網絡。

查看參考應用程序

在用戶調試汽車版本中提供了一個名為NetworkPreferenceApp的參考應用程序(包括代碼),並演示瞭如何:

  • 使用 PANS 指標。
  • 設置 PANS 策略。
  • 為設備設置默認策略。
  • 清除策略。
  • 在啟動時應用策略。
  • 使用 Driver Distraction API(請參閱Driver Distraction Guidelines )。
  • 使用OEM_PAIDOEM_PRIVATE動態更新 Wi-Fi。

圖 3.參考應用

指標

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

故障排除

大多數故障排除情況來自使用錯誤網絡(無網絡連接)或數據超量的應用程序。要啟用快速解決方案:

  • 連接dumpsys包括一個活動的每個應用程序默認網絡及其相關應用程序的列表(從 PANS 映射)。
  • Netd dumpsys包括 UID IP 和防火牆規則。
  • Netstats dumpsys包括每個應用程序的 PANS 指標。例如,哪些應用程序使用了哪個 OEM 網絡。

所有dumpsys數據都可通過創建 Android 錯誤報告獲得。