Выбор сети для каждого приложения (PANS), Выбор сети для каждого приложения (PANS)

Транспортные средства все больше полагаются на возможность подключения для управления растущим списком вариантов использования, запрашиваемых как OEM-производителями, так и владельцами транспортных средств, что приводит к увеличению объема данных и связанных с этим затрат. Используйте функцию выбора сети для каждого приложения (PANS) для маршрутизации трафика определенных приложений в сетях, оплачиваемых OEM-производителем.

С помощью PANS вы можете управлять объемом и стоимостью использования данных, одновременно обеспечивая надежную, безопасную и подключенную автомобильную среду. ПАНС:

  • Состоит из нового API, добавленного в ConnectivityManager , доступного только для автомобильных устройств.
  • Предоставляет обновленный API предложений Wi-Fi (см. API предложений Wi-Fi для подключения к Интернету ), включающий поддержку динамически изменяющихся возможностей сети PANS.
  • Собирает вспомогательные показатели.
  • Предоставляет справочное приложение.

Почему ПАНС?

ПАНС может:

  • Динамически обновляйте сопоставления приложений и сетей.
  • Управляйте маршрутизацией на уровне приложений, не внося изменений в приложения.
  • Только приложения, разрешенные OEM, могут получить доступ к сопоставленным OEM-сетям.
  • Разработчикам приложений не нужно вносить какие-либо изменения для реализации этой функции.
  • Метрики, ориентированные на пользователя, отслеживают использование данных приложения в сети для сетей, управляемых OEM.
  • Доступ к сети безопасен и не может быть злоупотреблен непреднамеренным использованием или неавторизованными приложениями.
  • Изменения в сопоставлении приложений PANS с сетью доводятся до сведения пользователей.
  • Одна и та же конфигурация сети применяется ко всем пользователям.

Основные преимущества

PANS предоставляет OEM-производителям следующие основные преимущества:

  1. OEM-производители могут платить за сетевой трафик вместо пользователей:
    • Обновления системы могут предоставляться пользователю бесплатно.
    • Использование сети определенных приложений может быть предоставлено пользователю бесплатно.
    • Телеметрией и другой аналитикой можно управлять бесплатно для пользователя.
  2. OEM-производители могут гарантировать, что критически важные приложения останутся подключенными даже без оплачиваемого пользователем тарифного плана. Например, критически важные для безопасности функции, такие как карты, помощник (вождение без помощи рук) и обновления системы, продолжают работать, даже если у пользователя нет тарифного плана.
  3. PANS обеспечивает дополнительную степень детализации контроля, специфичную для маршрутизации сетевого трафика в Android. Например, OEM-производители могут оптимально определить топологию логической сети для маршрутизации трафика уровня приложений.

Рисунок 1 . Система PANS

Внедрить ПАНС

Для реализации PANS предоставляется новый API ConnectivityManager setOemNetworkPreference . Этот новый API сопоставляет приложения с OemNetworkPreference . Этот API доступен только для автомобильных устройств и помечен как @SystemApi с новым разрешением signature .

Рисунок 2. Внедрение PANS

OEMNetworkPreference

OemNetworkPreference — это абстракция OEM_PAID и OEM_PRIVATE NetworkCapabilities сопоставляющая приложения по имени пакета с сетевыми настройками . Сетевые настройки допускают сетевую иерархию. Например, сопоставление приложения с предпочтением OEM_NETWORK_PREFERENCE_OEM_PAID приводит к следующему приоритету сетей по умолчанию, назначенных приложению: сначала используйте сеть UNMETERED , если UNMETERED недоступен, используйте сеть OEM_PAID , а если OEM_PAID недоступен, используйте системную сеть по умолчанию. сеть.

  • OEM_PAID Используется в основном для приложений, которые можно маршрутизировать как в 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;

Вызов API PANS

Чтобы использовать API PANS:

  1. Используйте OemNetworkPreferences , чтобы сопоставить приложение с сетевыми настройками.
  2. Вызовите setOemNetworkPreference с объектом OemNetworkPreferences .
  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, такие как API NetworkRequest , чтобы не нарушать существующие сценарии использования приложений. Например, когда приложение хочет выполнить операцию только через сеть без лимита трафика, PANS не будет заставлять его использовать другую сеть.

Настройка сети

Сеть с возможностями OEM_PAID или OEM_PRIVATE должна быть доступна при использовании соответствующего сетевого предпочтения. Android обеспечивает поддержку настройки возможностей сетей Ethernet и Wi-Fi. Для сетей Ethernet вы можете использовать наложение ресурса config_ethernet_interfaces . Это устанавливается во время компиляции.

Для Wi-Fi API WifiNetworkSuggestion можно использовать с новыми API Android 12: 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_PAID или OEM_PRIVATE помечает эту сеть как сеть с ограниченным доступом . Сети с ограниченным доступом могут использоваться только приложениями, имеющими разрешение CONNECTIVITY_USE_RESTRICTED_NETWORKS , которое контролируется OEM-производителями.

Приложения с этим разрешением могут использовать сети с ограниченным доступом , если приложения явно запрашивают их . Однако эти приложения не будут использовать сети с ограниченным доступом по умолчанию. Приложения, отображаемые через PANS, могут иметь ограниченные сети OEM, установленные по умолчанию, и для их использования не потребуются ограниченные сетевые разрешения. Если такое приложение имеет ограниченную OEM-сеть, назначенную PANS в качестве сети по умолчанию, оно также имеет возможность явно запрашивать указанную OEM-сеть, если приложение решит это сделать.

Просмотрите эталонное приложение

Эталонное приложение (включая код) под названием NetworkPreferenceApp предоставляется в автомобильных сборках для пользовательской отладки и демонстрирует, как:

  • Используйте метрики PANS.
  • Установите политику PANS.
  • Установите политику по умолчанию для устройства.
  • Очистить политику.
  • Примените политику при загрузке.
  • Используйте API отвлечения внимания водителей (см. Рекомендации по отвлечению внимания водителей ).
  • Динамически обновляйте Wi-Fi с помощью OEM_PAID и OEM_PRIVATE .

Рисунок 3. Эталонное приложение

Метрики

Чтобы обеспечить прозрачность использования данных, собираются и предоставляются метрики относительно объема данных, передаваемых через сетевые сопоставления OEM_PAID и OEM_PRIVATE .

Поиск неисправностей

Большинство условий устранения неполадок возникают либо из-за того, что приложение использует неправильную сеть (отсутствие подключения к сети), либо из-за избытка данных. Чтобы включить быстрое разрешение:

  • Connectivity dumpsys включает список активных сетей по умолчанию для каждого приложения и связанных с ними приложений (сопоставленных из PANS).
  • Netd dumpsys включает UID IP и правила брандмауэра.
  • Netstats dumpsys включает метрики PANS для каждого приложения. Например, какие приложения использовали какую OEM-сеть.

Все данные dumpsys доступны после создания отчета об ошибках Android.