Selección de red por aplicación (PANS)

Los vehículos dependen cada vez más de la conectividad para administrar la creciente lista de casos de uso solicitados por los OEM y los propietarios de los vehículos, lo que ocasionó un aumento la huella de datos y los costos asociados. Usa la selección de red por aplicación (PANS) para enrutar el tráfico de apps específicas en redes pagadas por el OEM.

Con PANS, puedes administrar el volumen y el costo del uso de datos a la vez que lo que brinda una experiencia de vehículo sólida, segura y conectada. PANS:

  • Consiste en una nueva API que se agregó a ConnectivityManager disponible solo a dispositivos de la industria automotriz.
  • Proporciona una API de sugerencia de Wi-Fi actualizada (consulta API de sugerencia de Wi-Fi para la conectividad a Internet) para incluir compatibilidad con capacidades de red PANS que cambian de forma dinámica.
  • Recopila métricas complementarias.
  • Proporciona una app de referencia.

¿Por qué usar PANS?

Los PANS pueden:

  • Actualiza de forma dinámica las asignaciones de app a red.
  • Administrar el enrutamiento a nivel de la aplicación sin realizar cambios en las aplicaciones
  • Solo las apps permitidas por OEM pueden acceder a las redes de OEM asignadas.
  • Los desarrolladores de apps no necesitan hacer ningún cambio para implementar esta función.
  • Las métricas del usuario hacen un seguimiento del uso de datos de app a red para las cuentas administradas por OEM redes.
  • El acceso a la red es seguro y no se puede abusar de él en casos de uso no deseados o aplicaciones no autorizadas.
  • Los cambios en las asignaciones de app a red de PANS se comunican a los usuarios.
  • Se aplica la misma configuración de red a todos los usuarios.

Ventajas principales

PANS les brinda a los OEM las siguientes ventajas principales:

  1. Los OEMs pueden pagar por tráfico de red en lugar de por usuarios:
    • El usuario puede proporcionar actualizaciones del sistema sin costo.
    • El uso de red de las apps específicas se puede proporcionar sin costo al usuario.
    • La telemetría y otras estadísticas se pueden administrar sin costo para el usuario.
  2. Los OEM pueden asegurarse de que las apps esenciales permanezcan conectadas incluso sin una plan de datos pagado por el usuario. Por ejemplo, funciones críticas para la seguridad, como mapas, Asistente (conducción con manos libres) y las actualizaciones del sistema siguen funcionando cuando un usuario no tiene un plan de datos.
  3. PANS proporciona un nivel de detalle adicional de control específico para el tráfico de red. enrutamiento en Android. Por ejemplo, los OEM pueden definir de forma óptima una red lógica topología para el enrutamiento del tráfico a nivel de la app.

Figura 1. Marco de trabajo de PANS

Implementación de PANS

Para implementar PANS, una nueva API de ConnectivityManager setOemNetworkPreference. Esta nueva API asigna apps a un OemNetworkPreference. Esta API solo está disponible para dispositivos de automóviles y está anotada como @SystemApi con un nuevo permiso signature.

Figura 2: Implementación de PANS

Preferencias de red de OEM

OemNetworkPreference es una abstracción sobre OEM_PAID y OEM_PRIVATE NetworkCapabilities apps de asignación por nombre de paquete a una preferencia de red. Las preferencias de red permiten las jerarquías de red. Por ejemplo, asigna una app a la preferencia OEM_NETWORK_PREFERENCE_OEM_PAID que da como resultado la siguiente prioridad de las redes predeterminadas asignadas a una aplicación: usa un UNMETERED primero. Si UNMETERED no está disponible, usa un red OEM_PAID. Si OEM_PAID no está disponible, usa el sistema. red predeterminada.

  • OEM_PAID Se usa principalmente para apps que se pueden enrutar en en redes de OEM y no OEM.
  • OEM_PRIVATE Se usa principalmente para que las apps del OEM obtengan acceso a un red dedicada a ellos.
/**
* 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;

Llama a las APIs de PANS

Para usar las APIs de PANS, haz lo siguiente:

  1. Usa OemNetworkPreferences para asignar una app a una preferencia de red.
  2. Llama a setOemNetworkPreference con OemNetworkPreferences. .
  3. Usa la interfaz Runnable para escuchar la finalización de la API.

Por ejemplo:

// 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);

Consideraciones

Cuando implementes PANS, ten en cuenta los siguientes puntos:

  • Las preferencias de red no persisten en los inicios y se deben que se vuelven a aplicar en cada inicio.
  • Para crear una preferencia para una app, no es necesario instalarla. Por lo tanto, la configuración las preferencias para las apps desinstaladas se pueden establecer de manera proactiva.
  • En un momento determinado, una app solo se puede asignar a una preferencia de red única.
  • Las preferencias de red se utilizan para establecer la red predeterminada de una app. Este es la red que se usa cuando una app no especifica en qué redes desea usar una de las APIs especializadas. Esto no solo cubre la gran mayoría de las necesidades de conectividad, También permite el uso continuo de APIs especializadas, como la API de NetworkRequest. para no interrumpir los casos de uso de apps existentes. Por ejemplo, cuando una app solo quiere hacer una operación en una red no medida, la función PANS no la obligará a usar otra red.

Configura una red

Una red con OEM_PAID o OEM_PRIVATE deben estar disponibles cuando se use una preferencia de red correspondiente. En Android proporciona asistencia para la configuración de capacidades de redes Ethernet y Wi-Fi. Para Ethernet, puedes usar una superposición de recursos, config_ethernet_interfaces. Se configura en el tiempo de compilación.

Para Wi-Fi, la API de WifiNetworkSuggestion se puede usar con el nuevo APIs de Android 12, setOemPaid(Boolean) y setOemPrivate(Boolean) Esto se puede cambiar en el tiempo de ejecución.

Considera los siguientes ejemplos:

  1. Una superposición de recursos llamada config_ethernet_interfaces especifica lo siguiente:
    • El nombre de la interfaz que se configurará.
    • Los valores NetworkCapabilities deseados.
      <!-- 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. Este WiFiNetworkSuggestion se puede cambiar de forma dinámica:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);
    

Restringir el acceso a las redes PANS

Etiqueta una red con OEM_PAID o OEM_PRIVATE. marcan esa red como una red restringida. Redes restringidas solo pueden usarla las aplicaciones que tienen El permiso CONNECTIVITY_USE_RESTRICTED_NETWORKS, controlado por los OEM.

Las apps con este permiso pueden usar redes restringidas siempre que estas soliciten explícitamente con ellos. Sin embargo, estas apps no tendrán redes restringidas de forma predeterminada. Aplicaciones asignados a través de PANS pueden tener redes de OEM restringidas configuradas como predeterminadas, por lo que no será necesario el permiso de red restringido para usarlos. Cuando dicha aplicación tenga acceso restringido OEM asignada como red predeterminada por PANS, también tiene la capacidad solicitar de manera explícita esa red del OEM si la app así lo decide.

Revisa la app de referencia

Se proporciona una app de referencia (incluido el código) llamada NetworkPreferenceApp. en compilaciones de Automotive de depuración por parte del usuario y demuestra cómo hacer lo siguiente:

  • Consumir métricas PANS.
  • Establecer la política PANS
  • Establece una política predeterminada para el dispositivo.
  • Borra una política.
  • Aplica una política al inicio.
  • Cómo usar la API de Driver Distraction Consulta los Lineamientos sobre distracciones del conductor.
  • Actualiza de forma dinámica la red Wi-Fi con OEM_PAID y OEM_PRIVATE.

Figura 3: App de referencia

Métricas

Para facilitar la transparencia en torno al uso de datos, las métricas se recopilan y crean disponibles con respecto a la cantidad de datos transmitidos Asignaciones de red OEM_PAID y OEM_PRIVATE.

Solución de problemas

La mayoría de las condiciones de solución de problemas ocurren debido a que una app usa una red incorrecta. (sin conectividad de red) o excedentes de datos. Para habilitar resoluciones rápidas:

  • La conectividad dumpsys incluye una lista de los recursos redes predeterminadas por app y sus apps asociadas (asignadas desde PANS).
  • La red dumpsys incluye la IP de UID y las reglas de firewall.
  • Las estadísticas de red dumpsys incluyen métricas de PANS por app. Por ejemplo, qué apps usaron qué red de OEM.

Todos los datos de dumpsys están disponibles mediante la creación de un informe de errores de Android.