Selezione della rete per applicazione (PANS)

I veicoli fanno sempre più affidamento sulla connettività per gestire il crescente elenco di casi d’uso richiesti sia dagli OEM che dai proprietari dei veicoli, con 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 specificate su reti pagate dall'OEM.

Con PANS puoi gestire il volume e il costo dell'utilizzo dei dati fornendo allo stesso tempo un'esperienza di guida solida, sicura e connessa. PADELLE:

  • È costituito da una nuova API aggiunta a ConnectivityManager disponibile solo per i dispositivi automobilistici.
  • Fornisce un'API di suggerimento Wi-Fi aggiornata (vedi API di suggerimento Wi-Fi per la connettività 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:

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

Vantaggi fondamentali

PANS offre agli OEM questi vantaggi fondamentali:

  1. Gli OEM possono pagare per il traffico di rete anziché per gli utenti:
    • Gli aggiornamenti di sistema possono essere forniti senza alcun costo per l'utente.
    • L'utilizzo della rete di app specifiche può essere fornito gratuitamente all'utente.
    • La telemetria e altre analisi possono essere gestite senza alcun costo per l'utente.
  2. Gli OEM possono garantire che le app critiche rimangano connesse anche senza un piano dati a carico dell'utente. Ad esempio, funzionalità critiche per la sicurezza come mappe, assistente (guida a mani libere) e aggiornamenti di sistema continuano a funzionare anche quando un utente non dispone di un piano dati.
  3. PANS fornisce un'ulteriore granularità di controllo specifica per l'instradamento del traffico di rete in Android. Ad esempio, gli OEM possono definire in modo ottimale una topologia di rete logica per l'instradamento del traffico a livello di app.

Figura 1 . Quadro PANS

Implementare PANS

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

Figura 2. Implementazione PANS

Preferenza rete Oem

OemNetworkPreference è un'astrazione su OEM_PAID e OEM_PRIVATE NetworkCapabilities che mappa le app in base al nome del pacchetto su una preferenza di rete . Le preferenze di rete consentono gerarchie di rete. Ad esempio, mappando un'app alla preferenza OEM_NETWORK_PREFERENCE_OEM_PAID si ottiene 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 l'impostazione predefinita del sistema rete.

  • OEM_PAID Utilizzato principalmente per le app che possono essere instradate sia su reti OEM che non OEM.
  • OEM_PRIVATE Utilizzato principalmente per le app OEM per ottenere l'accesso a una rete a loro 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. Utilizza OemNetworkPreferences per mappare un'app a una preferenza di rete.
  2. Chiama setOemNetworkPreference con l'oggetto OemNetworkPreferences .
  3. Utilizza l'interfaccia Runnable per attendere il completamento dell'API.

Per 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 PANS, tieni presente i seguenti punti:

  • Le preferenze di rete non vengono mantenute tra gli avvii e devono essere riapplicate 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.
  • In qualsiasi momento, un'app può essere mappata solo su una singola preferenza di rete.
  • Le preferenze di rete vengono utilizzate per impostare la rete predefinita di un'app. Questa è la rete utilizzata quando un'app non ha specificato quali reti desidera utilizzare tramite una delle API specializzate. Ciò non solo copre la stragrande maggioranza delle esigenze di connettività, ma consente anche l'uso continuato di API specializzate come l'API NetworkRequest in modo da non interrompere i casi d'uso delle app esistenti. Ad esempio, quando un'app desidera eseguire un'operazione solo su una rete illimitata, PANS non la costringerà a utilizzare un'altra rete.

Configura una rete

Quando si utilizza una preferenza di rete corrispondente deve essere disponibile una rete con funzionalità OEM_PAID o OEM_PRIVATE . Android fornisce supporto per la configurazione delle funzionalità per le reti Ethernet e Wi-Fi. Per le reti Ethernet, è possibile utilizzare un overlay di risorse, config_ethernet_interfaces . Questo 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 può essere modificato in fase di esecuzione.

Considera questi esempi:

  1. Una sovrapposizione di risorse denominata 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

Contrassegnare una rete con le funzionalità OEM_PAID o OEM_PRIVATE contrassegna la rete come rete con restrizioni . Le reti limitate possono essere utilizzate solo dalle app che dispongono dell'autorizzazione CONNECTIVITY_USE_RESTRICTED_NETWORKS , controllata dagli OEM.

Le app con questa autorizzazione possono utilizzare reti limitate a condizione che le app lo richiedano esplicitamente . Tuttavia, queste app non avranno reti limitate come impostazione predefinita. Le app mappate tramite PANS possono avere reti OEM limitate impostate come predefinite e non avranno bisogno dell'autorizzazione di rete limitata per utilizzarle. Quando un'app di questo tipo ha una rete OEM limitata assegnata come rete predefinita da PANS, ha anche la possibilità di richiedere esplicitamente detta rete OEM se l'app sceglie di farlo.

Esamina l'app di riferimento

Un'app di riferimento (incluso il codice) denominata NetworkPreferenceApp viene fornita nelle build automobilistiche di debug dell'utente e dimostra come:

  • Utilizza metriche PANS.
  • Imposta la policy PANS.
  • Imposta una policy predefinita per il dispositivo.
  • Cancellare una politica.
  • Applicare una policy all'avvio.
  • Utilizza l'API Driver Distraction (vedi Linee guida per la distrazione del conducente ).
  • Aggiorna dinamicamente il Wi-Fi con OEM_PAID e OEM_PRIVATE .

Figura 3. App di riferimento

Metrica

Per facilitare la trasparenza sull'utilizzo dei dati, vengono raccolte e rese disponibili metriche relative alla quantità di dati trasmessi sulle mappature di rete OEM_PAID e OEM_PRIVATE .

Risoluzione dei problemi

La maggior parte delle condizioni di risoluzione dei problemi deriva da un'app che utilizza la rete sbagliata (nessuna connettività di rete) o da un eccesso di dati. Per abilitare risoluzioni rapide:

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

Tutti i dati dumpsys sono disponibili creando una segnalazione di bug Android.