Selezione rete per applicazione (PANS)

I veicoli si affidano sempre più alla connettività per gestire l'elenco crescente di casi d'uso richiesti sia dagli OEM che dai proprietari dei veicoli, con conseguente aumento dell'impronta dei dati e dei costi associati. Utilizzare la funzione di selezione della rete per applicazione (PANS) per instradare il traffico di applicazioni specifiche su reti pagate dall'OEM.

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

  • Consiste in una nuova API aggiunta a ConnectivityManager disponibile solo per i dispositivi automobilistici.
  • Fornisce un'API di suggerimento Wi-Fi aggiornata (consulta 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'applicazione di riferimento.

Perché PAN?

PANS può:

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

Vantaggi principali

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 gratuitamente per l'utente.
    • L'utilizzo della rete di app specificate può essere fornito gratuitamente per l'utente.
    • La telemetria e altre analisi possono essere gestite senza alcun costo per l'utente.
  2. Gli OEM possono garantire che le applicazioni critiche rimangano connesse anche senza un piano dati a carico dell'utente. Ad esempio, le funzioni critiche per la sicurezza come mappe, assistente (guida a mani libere) e aggiornamenti del sistema continuano a funzionare anche quando un utente non ha un piano dati.
  3. PANS fornisce un'ulteriore granularità di controllo specifica per il routing 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 applicazione.

Figura 1 . quadro PANS

Implementazione PANS

Per implementare PANS, viene fornita una nuova API ConnectivityManager , setOemNetworkPreference . Questa nuova API associa le applicazioni a una OemNetworkPreference . Questa API è disponibile solo per i dispositivi automobilistici ed è annotata come @SystemApi con una nuova autorizzazione di signature .

Figura 2. Implementare PANS

Preferenza di rete OEM

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

  • OEM_PAID Utilizzato principalmente per app che possono essere instradate su reti OEM e non OEM.
  • OEM_PRIVATE Utilizzato principalmente per le app OEM per accedere 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;

Chiamare 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. Usa l'interfaccia Runnable per ascoltare 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 a mente i seguenti punti:

  • Le preferenze di rete non vengono mantenute tra gli stivali e dovranno essere riapplicate a ogni avvio.
  • Per creare una preferenza per un'applicazione, non è necessario installarla. 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'applicazione. Questa è la rete utilizzata quando un'applicazione non ha specificato quali reti desidera utilizzare tramite una delle API specializzate. Questo 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.

Configurazione di una rete

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

Per il Wi-Fi, l'API WifiNetworkSuggestion può essere utilizzata con le nuove API di 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);
    

Limitazione dell'accesso alle reti PANS

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

Le app con questa autorizzazione possono utilizzare reti limitate a condizione che le app le richiedano esplicitamente . Tuttavia, queste app non riceveranno 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 usarle. 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.

Revisione dell'app di riferimento

Un'app di riferimento (incluso il codice) denominata NetworkPreferenceApp viene fornita nelle build automobilistiche di debug degli utenti e mostra come:

  • Consuma le metriche PANS.
  • Imposta la politica PANS.
  • Imposta un criterio predefinito per il dispositivo.
  • Cancella una politica.
  • Applicare una politica all'avvio.
  • Utilizzare 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 tramite le mappature di rete OEM_PAID e OEM_PRIVATE .

Risoluzione dei problemi

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

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

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