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

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

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

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

Почему именно сковородки?

PANS может:

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

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

Система PANS предоставляет производителям оригинального оборудования следующие ключевые преимущества:

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

Внедрить PANS

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

OemNetworkPreference

OemNetworkPreference — это абстракция над NetworkCapabilities OEM_PAID и OEM_PRIVATE , сопоставляющая приложения по имени пакета с сетевыми настройками . Сетевые настройки позволяют создавать иерархии сетей. Например, сопоставление приложения с настройкой 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 , которое контролируется производителями оборудования.

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

Ознакомьтесь с справочным приложением.

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

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

Метрики

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

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

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

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

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