Selezione della 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 sia dai proprietari dei veicoli, con conseguente aumento dell'impronta dei dati e dei costi associati. Utilizza la funzionalità selezione della rete per applicazione (PANS) per indirizzare il traffico delle app specificate sulle reti pagate dall'OEM.

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

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

Perché PANS?

PANS può:

  • Aggiorna dinamicamente i mapping 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 dall'app alla rete per le reti gestite dall'OEM.
  • L'accesso alla rete è sicuro e non può essere utilizzato in modo improprio tramite casi d'uso non previsti o app non autorizzate.
  • Le modifiche ai mapping da app a rete 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 il traffico di rete al posto degli utenti:
    • Gli aggiornamenti di sistema possono essere forniti all'utente senza costi.
    • L'utilizzo della rete di app specifiche può essere fornito senza costi per l'utente.
    • La telemetria e altre analisi possono essere gestite senza costi per l'utente.
  2. Gli OEM possono garantire che le app critiche rimangano connesse anche senza un piano dati a pagamento. Ad esempio, le funzionalità essenziali per la sicurezza, come mappe, assistente (guida a mani libere) e aggiornamenti di sistema, continuano a funzionare anche quando un utente non ha un piano dati.
  3. PANS fornisce un controllo più granulare 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.

Implementare PANS

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

OemNetworkPreference

OemNetworkPreference è un'astrazione di OEM_PAID e OEM_PRIVATE NetworkCapabilities che mappa le app per nome del pacchetto a una preferenza di rete. Le preferenze di rete consentono 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 indirizzate su reti OEM e non OEM.
  • OEM_PRIVATE Utilizzato principalmente per le app OEM per ottenere l'accesso 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;

Chiamare 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 rilevare 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 tra un avvio e l'altro e devono essere riapplicate a ogni avvio.
  • Per creare una preferenza per un'app, non è necessario installarla. Pertanto, le preferenze di rete per le app disinstallate possono essere impostate in modo proattivo.
  • In un determinato momento, un'app può essere mappata a una sola 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 vuole utilizzare tramite una delle API specializzate. In questo modo non solo vengono soddisfatte la maggior parte delle esigenze di connettività, ma viene anche consentito l'utilizzo continuato di API specializzate come l'API NetworkRequest per non interrompere i casi d'uso delle app esistenti. Ad esempio, quando un'app vuole eseguire un'operazione solo su una rete non a consumo, PANS non la costringe a utilizzare un'altra rete.

Configurare una rete

Quando utilizzi una preferenza di rete corrispondente, deve essere disponibile una rete con 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 una sovrapposizione di risorse, config_ethernet_interfaces. Questo valore viene impostato al momento della 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 runtime.

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 in modo dinamico:
    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

Se contrassegni una rete con le funzionalità OEM_PAID o OEM_PRIVATE, la rete viene contrassegnata come rete con limitazioni. Le reti con limitazioni 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 con accesso limitato a condizione che le app le richiedano esplicitamente. Tuttavia, queste app non avranno reti 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 di rete con limitazioni per utilizzarle. Quando un'app di questo tipo ha una rete OEM con limitazioni assegnata come rete predefinita da PANS, ha anche la possibilità di richiedere esplicitamente la rete OEM se l'app sceglie di farlo.

Rivedere l'app di riferimento

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

  • Utilizza le metriche PANS.
  • Imposta il criterio PANS.
  • Imposta una norma predefinita per il dispositivo.
  • Cancella una policy.
  • Applica una policy all'avvio.
  • Utilizza l'API Driver Distraction (vedi Linee guida sulla distrazione del conducente).
  • Aggiorna dinamicamente il Wi-Fi con OEM_PAID e OEM_PRIVATE.

Metriche

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

Risoluzione dei problemi

La maggior parte delle condizioni di risoluzione dei problemi deriva dall'utilizzo di una rete errata da parte di un'app (nessuna connettività di rete) o dal superamento dei limiti di dati. Per attivare le risoluzioni rapide:

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

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