Selezione della rete per applicazione (PANS)

I veicoli si basano sempre più sulla connettività per gestire l'elenco crescente di casi d'uso richiesti sia dagli OEM sia dai proprietari di veicoli, con un conseguente aumento dell'impronta di dati e dei costi associati. Utilizza la funzionalità di selezione della rete per applicazione (PANS) per instradare il traffico di app specifiche sulle reti pagate dall'OEM.

Con PANS, puoi gestire il volume e il costo dell'utilizzo dei dati, offrendo al contempo un'esperienza solida, sicura e connessa per le auto. PANS:

  • Consiste in una nuova API aggiunta a ConnectivityManager disponibile solo per i dispositivi automotive.
  • Fornisce un'API di suggerimenti Wi-Fi aggiornata (vedi API di suggerimenti Wi-Fi per la connettività a internet) per includere il supporto per la modifica dinamica delle funzionalità di rete PANS.
  • Raccoglie le metriche di supporto.
  • Fornisce un'app di riferimento.

Perché PANS?

I PAN possono:

  • Aggiornare dinamicamente le mappature da app a rete.
  • Gestisci il routing a livello di app senza apportare modifiche alle app.
  • Solo le app consentite dall'OEM possono accedere alle reti OEM mappate.
  • Gli sviluppatori di app non devono apportare modifiche per implementare questa funzionalità.
  • Le metriche rivolte agli utenti monitorano l'utilizzo dei dati tra app e rete per le reti gestite dall'OEM.
  • L'accesso alla rete è sicuro e non può essere utilizzato in modo improprio tramite casi d'uso indesiderati o app non autorizzate.
  • Le modifiche alle mappature app-to-network PANS vengono comunicate agli utenti.
  • La stessa configurazione di rete viene applicata a tutti gli utenti.

Vantaggi principali

PANS offre agli OEM i seguenti vantaggi principali:

  1. Gli OEM possono pagare per il traffico di rete anziché per gli utenti:
    • Gli aggiornamenti di sistema possono essere forniti senza costi per l'utente.
    • L'utilizzo della rete di app specifiche può essere fornito senza costi per l'utente.
    • La telemetria e altri dati e analisi possono essere gestiti senza costi per l'utente.
  2. Gli OEM possono assicurarsi che le app critiche rimangano connesse anche senza un piano di dati pagato dall'utente. Ad esempio, le funzionalità di sicurezza critiche come mappe, assistente (guida con i comandi vocali) e aggiornamenti di sistema continuano a funzionare anche se un utente non ha un piano dati.
  3. PANS fornisce un'ulteriore granularità di controllo specifico per il routing del traffico di rete in Android. Ad esempio, gli OEM possono definire in modo ottimale una topologia di rete logica per il routing del traffico a livello di app.

Figura 1. Framework PANS

Implementare i PANS

Per implementare i PANS, viene fornita una nuova API ConnectivityManagersetOemNetworkPreference. Questa nuova API mappa le app a un OemNetworkPreference. Questa API è disponibile solo per i dispositivi automotive ed è annotata come @SystemApi con una nuova autorizzazione signature.

Figura 2. Implementare i PANS

OemNetworkPreference

OemNetworkPreference è un'astrazione di OEM_PAID e OEM_PRIVATE NetworkCapabilities che mappa le app in base al nome del pacchetto a una preferenza di rete. Le preferenze di rete consentono di creare gerarchie di rete. Ad esempio, la mappatura di un'app alla preferenza OEM_NETWORK_PREFERENCE_OEM_PAID comporta la seguente priorità delle reti predefinite assegnate a un'app: utilizza prima una rete UNMETERED, se UNMETERED non è disponibile, utilizza una rete OEM_PAID e, se OEM_PAID non è disponibile, utilizza la rete predefinita del sistema.

  • OEM_PAID Utilizzato principalmente per le app che possono essere instradate sia su reti OEM sia su reti non OEM.
  • OEM_PRIVATE Utilizzato principalmente per le app OEM per accedere a una rete dedicata.
/**
* 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;

Chiama le API PANS

Per utilizzare le API PANS:

  1. Usa OemNetworkPreferences per mappare un'app a una preferenza di rete.
  2. Chiama setOemNetworkPreference con l'oggetto OemNetworkPreferences.
  3. Utilizza l'interfaccia Runnable per ascoltare il completamento dell'API.

Ad esempio:

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

Considerazioni

Quando implementi i PANS, tieni presente quanto segue:

  • Le preferenze di rete non vengono mantenute durante gli avvii e devono essere applicate nuovamente a ogni avvio.
  • Per creare una preferenza per un'app, non è necessario che sia installata. Pertanto, le preferenze di rete per le app disinstallate possono essere impostate in modo proattivo.
  • Un'app può essere mappata a una sola preferenza di rete alla volta.
  • Le preferenze di rete vengono utilizzate per impostare la rete predefinita di un'app. Si tratta della rete utilizzata quando un'app non ha specificato le reti che vuole utilizzare tramite una delle API specializzate. Non solo copre la maggior parte delle esigenze di connettività, ma consente anche di continuare a utilizzare API specializzate come l'API NetworkRequest in modo da non interrompere i casi d'uso delle app esistenti. Ad esempio, quando un'app vuole eseguire un'operazione solo su una rete senza misurazione, PANS non la forza a utilizzare un'altra rete.

Configurare una rete

Quando utilizzi una preferenza di rete corrispondente, deve essere disponibile una rete con le funzionalità OEM_PAID o OEM_PRIVATE. Android supporta la configurazione delle funzionalità per le reti Ethernet e Wi-Fi. Per le reti Ethernet, puoi utilizzare un overlay delle risorse, config_ethernet_interfaces. Questo valore viene impostato in fase di compilazione.

Per il Wi-Fi, l'API WifiNetworkSuggestion può essere utilizzata con le nuove API Android 12 setOemPaid(Boolean) e setOemPrivate(Boolean). Questo valore può essere modificato in fase di esecuzione.

Considera questi esempi:

  1. Un overlay della risorsa denominato config_ethernet_interfaces specifica:
    • Il nome dell'interfaccia da configurare.
    • I valori NetworkCapabilities desiderati.
      <!-- 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. Questo WiFiNetworkSuggestion può essere modificato dinamicamente:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);

Limitare l'accesso alle reti PANS

Il tagging di una rete con le funzionalità OEM_PAID o OEM_PRIVATE la contrassegna come rete con limitazioni. Le reti con limitazioni possono essere utilizzate solo dalle app che dispongono dell'autorizzazioneCONNECTIVITY_USE_RESTRICTED_NETWORKS, controllata dagli OEM.

Le app con questa autorizzazione possono utilizzare reti con limitazioni se le richiedono esplicitamente. Tuttavia, queste app non avranno le emittenti con limitazioni come impostazione predefinita. Le app mappate tramite PANS possono avere reti OEM con limitazioni impostate come predefinite e non avranno bisogno dell'autorizzazione per le reti con limitazioni per utilizzarle. Quando a un'app viene assegnata una rete OEM limitata come rete predefinita da PANS, l'app ha anche la possibilità di richiedere esplicitamente la rete OEM in questione, se lo desidera.

Esamina l'app di riferimento

Nelle build per il debug dell'utente per i veicoli è fornita un'app di riferimento (incluso il codice) denominata NetworkPreferenceApp che mostra come:

  • Utilizza le metriche PANS.
  • Imposta il criterio PANS.
  • Imposta un criterio predefinito per il dispositivo.
  • Cancella una norma.
  • Applica un criterio all'avvio.
  • Utilizza l'API Driver Distraction (Distrazione alla guida) (consulta le linee guida sulla distrazione alla guida).
  • Aggiornare dinamicamente il Wi-Fi con OEM_PAID e OEM_PRIVATE.

Figura 3. App di riferimento

Metriche

Per garantire la trasparenza sull'utilizzo dei dati, vengono raccolte e messe a disposizione le metriche relative alla quantità di dati trasmessi tramite le mappature di rete OEM_PAID e OEM_PRIVATE.

Risoluzione dei problemi

La maggior parte delle condizioni di risoluzione dei problemi si verifica quando un'app utilizza la rete sbagliata (nessuna connettività di rete) o quando si verificano superamenti dei limiti di dati. Per attivare le risoluzioni rapide:

  • Connettività dumpsys include un elenco di reti predefinite per app attive e delle relative app associate (mappate da PANS).
  • Netd dumpsys include regole firewall e UID IP.
  • Netstats dumpsys include le metriche PANS per app. Ad esempio, quali app hanno utilizzato la rete di un OEM.

Tutti i dati di dumpsys sono disponibili creando un report di bug Android.