Sélection de réseau par application (PANS)

Les véhicules s'appuient de plus en plus sur la connectivité pour gérer la liste croissante des cas d'utilisation demandés par les OEM et les propriétaires de véhicules, ce qui entraîne une empreinte de données et des coûts associés plus importants. Utilisez la fonctionnalité Sélection de réseau par application (PANS) pour acheminer le trafic d'applications spécifiques sur des réseaux payants fournis par l'OEM.

Avec PANS, vous pouvez gérer le volume et le coût de l'utilisation des données tout en offrant une expérience automobile robuste, sécurisée et connectée. PANS :

  • Il s'agit d'une nouvelle API ajoutée à ConnectivityManager, disponible uniquement pour les appareils automobiles.
  • Fournit une API Wi-Fi Suggestion mise à jour (voir API Wi-Fi Suggestion pour la connectivité Internet) pour inclure la prise en charge des capacités réseau PANS qui changent de manière dynamique.
  • Collecte des métriques d'assistance.
  • Fournit une application de référence.

Pourquoi utiliser PANS ?

Les PANS peuvent :

  • Mettre à jour dynamiquement les mappages entre les applications et le réseau.
  • Gérez le routage au niveau de l'application sans modifier les applications.
  • Seules les applications autorisées par l'OEM peuvent accéder aux réseaux OEM mappés.
  • Les développeurs d'applications n'ont pas besoin d'apporter de modifications pour implémenter cette fonctionnalité.
  • Les métriques visibles par l'utilisateur suivent l'utilisation des données réseau par les applications pour les réseaux gérés par l'OEM.
  • L'accès au réseau est sécurisé et ne peut pas être utilisé de manière abusive par le biais de cas d'utilisation non prévus ou d'applications non autorisées.
  • Les modifications apportées aux mappages d'applications vers le réseau PANS sont communiquées aux utilisateurs.
  • La même configuration réseau est appliquée à tous les utilisateurs.

Principaux avantages

PANS offre les principaux avantages suivants aux OEM :

  1. Les OEM peuvent payer le trafic réseau à la place des utilisateurs :
    • Les mises à jour du système peuvent être fournies à l'utilisateur sans frais.
    • L'utilisation du réseau par les applications spécifiées peut être fournie à l'utilisateur sans frais.
    • La télémétrie et les autres analyses peuvent être gérées sans frais pour l'utilisateur.
  2. Les OEM peuvent s'assurer que les applications critiques restent connectées même sans forfait de données payant. Par exemple, les fonctionnalités essentielles à la sécurité telles que les cartes, l'assistant (conduite mains libres) et les mises à jour du système continuent de fonctionner même lorsqu'un utilisateur ne dispose pas d'un forfait Internet.
  3. PANS offre un contrôle plus précis du routage du trafic réseau dans Android. Par exemple, les OEM peuvent définir de manière optimale une topologie de réseau logique pour le routage du trafic au niveau de l'application.

Implémenter PANS

Pour implémenter PANS, une nouvelle API ConnectivityManager,setOemNetworkPreference, est fournie. Cette nouvelle API mappe les applications à un OemNetworkPreference. Cette API n'est disponible que pour les appareils automobiles et est annotée en tant que @SystemApi avec une nouvelle autorisation signature.

OemNetworkPreference

OemNetworkPreference est une abstraction sur OEM_PAID et OEM_PRIVATE NetworkCapabilities qui mappe les applications par nom de package à une préférence réseau. Les préférences réseau permettent de créer des hiérarchies de réseaux. Par exemple, si vous mappez une application à la préférence OEM_NETWORK_PREFERENCE_OEM_PAID, la priorité des réseaux par défaut attribués à une application est la suivante : utiliser d'abord un réseau UNMETERED, puis un réseau OEM_PAID si UNMETERED n'est pas disponible, et enfin le réseau système par défaut si OEM_PAID n'est pas disponible.

  • OEM_PAID Utilisé principalement pour les applications pouvant être routées sur les réseaux OEM et non OEM.
  • OEM_PRIVATE Principalement utilisé par les applications OEM pour accéder à un réseau qui leur est dédié.
/**
* 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;

Appeler les API PANS

Pour utiliser les API PANS :

  1. Utilisez OemNetworkPreferences pour mapper une application à une préférence réseau.
  2. Appelez setOemNetworkPreference avec l'objet OemNetworkPreferences.
  3. Utilisez l'interface Runnable pour écouter la fin de l'API.

Exemple :

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

Points à prendre en compte

Lorsque vous implémenterez PANS, gardez à l'esprit les points suivants :

  • Les préférences réseau ne sont pas conservées entre les démarrages et doivent être réappliquées à chaque démarrage.
  • Pour créer une préférence pour une application, il n'est pas nécessaire qu'elle soit installée. Par conséquent, les préférences réseau des applications désinstallées peuvent être définies de manière proactive.
  • À tout moment, une application ne peut être associée qu'à une seule préférence réseau.
  • Les préférences réseau permettent de définir le réseau par défaut d'une application. Il s'agit du réseau utilisé lorsqu'une application n'a pas spécifié le ou les réseaux qu'elle souhaite utiliser via l'une des API spécialisées. Cela couvre non seulement la grande majorité des besoins de connectivité, mais permet également l'utilisation continue d'API spécialisées telles que l'API NetworkRequest afin de ne pas interrompre les cas d'utilisation existants des applications. Par exemple, lorsqu'une application souhaite uniquement effectuer une opération sur un réseau non facturé, PANS ne la forcera pas à utiliser un autre réseau.

Configurer un réseau

Un réseau doté des fonctionnalités OEM_PAID ou OEM_PRIVATE doit être disponible lorsque vous utilisez une préférence de réseau correspondante. Android est compatible avec la configuration des fonctionnalités pour les réseaux Ethernet et Wi-Fi. Pour les réseaux Ethernet, vous pouvez utiliser une superposition de ressources, config_ethernet_interfaces. Cette valeur est définie au moment de la compilation.

Pour le Wi-Fi, l'API WifiNetworkSuggestion peut être utilisée avec les nouvelles API Android 12, setOemPaid(Boolean) et setOemPrivate(Boolean). Ce paramètre peut être modifié au moment de l'exécution.

Voici quelques exemples :

  1. Une superposition de ressources nommée config_ethernet_interfaces spécifie :
    • Nom de l'interface à configurer.
    • Valeurs NetworkCapabilities souhaitées.
      <!-- 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. Vous pouvez modifier dynamiquement ce WiFiNetworkSuggestion :
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                  .setSsid(WifiInfo.sanitizeSsid(ssid))
                  .setOemPrivate(true)
                  .build());
    mWifiManager.addNetworkSuggestions(list);

Restreindre l'accès aux réseaux PANS

Si vous ajoutez le tag OEM_PAID ou OEM_PRIVATE à un réseau, celui-ci est marqué comme réseau restreint. Les réseaux à accès limité ne peuvent être utilisés que par les applications disposant de l'autorisation CONNECTIVITY_USE_RESTRICTED_NETWORKS, qui est contrôlée par les OEM.

Les applications disposant de cette autorisation peuvent utiliser des réseaux à accès limité à condition qu'elles les demandent explicitement. Toutefois, ces applications n'utiliseront pas les réseaux restreints par défaut. Les applications mappées via PANS peuvent définir des réseaux OEM restreints comme réseaux par défaut et n'ont pas besoin de l'autorisation de réseau restreint pour les utiliser. Lorsqu'une telle application dispose d'un réseau OEM restreint défini comme réseau par défaut par PANS, elle peut également demander explicitement ce réseau OEM si elle le souhaite.

Examiner l'application de référence

Une application de référence (y compris le code) nommée NetworkPreferenceApp est fournie dans les versions automobiles de débogage utilisateur. Elle montre comment :

  • Consommer les métriques PANS
  • Définissez une règle PANS.
  • Définissez une règle par défaut pour l'appareil.
  • Supprimez une règle.
  • Appliquez une règle au démarrage.
  • Utilisez l'API Driver Distraction (consultez les Consignes relatives à la distraction du conducteur).
  • Mettez à jour le Wi-Fi de manière dynamique avec OEM_PAID et OEM_PRIVATE.

Métriques

Pour plus de transparence concernant l'utilisation des données, des métriques sont collectées et mises à disposition concernant la quantité de données transmises sur les mappages réseau OEM_PAID et OEM_PRIVATE.

Dépannage

La plupart des problèmes de dépannage proviennent d'une application qui utilise le mauvais réseau (aucune connectivité réseau) ou d'un dépassement de données. Pour activer les résolutions rapides :

  • La connectivité dumpsys inclut une liste des réseaux par défaut actifs par application et des applications associées (mappés à partir de PANS).
  • Netd dumpsys inclut les règles de pare-feu et d'adresse IP UID.
  • Netstats dumpsys inclut les métriques PANS par application. Par exemple, quelles applications ont utilisé quel réseau OEM.

Toutes les données dumpsys sont disponibles en créant un rapport de bug Android.