Novità di Android 8.0

Questa pagina fornisce una panoramica delle nuove API, delle funzionalità e delle modifiche al comportamento introdotte in Android 8.0 (livello API 26) che interessano Android nell'azienda.

Nuove API e funzionalità

Abbiamo reso le modalità di gestione del proprietario del profilo e del proprietario del dispositivo più efficaci, produttive e di provisioning più semplici che mai. Abbiamo inoltre attivato uno scenario di deployment completamente nuovo: i profili di lavoro sui dispositivi completamente gestiti. Queste e altre funzionalità sono descritte nelle sezioni seguenti.

Profili di lavoro su dispositivi completamente gestiti

In Android 8.0, i dispositivi completamente gestiti possono anche avere profili di lavoro. Ciò consente alle aziende di separare app e criteri mantenendo controllo e visibilità su entrambi i profili. Il profilo gestito può essere creato dal proprietario esistente del dispositivo o da un altro controller dei criteri dei dispositivi (DPC).

Con i profili di lavoro sui dispositivi completamente gestiti, i proprietari dei dispositivi possono:

  • Crea un profilo gestito senza interazione da parte dell'utente chiamando EXTRA_PROVISIONING_SKIP_USER_CONSENT.
  • Ricevi notifiche quando vengono creati o rimossi utenti secondari o profili gestiti. I callback sono onUserAdded() e onUserRemoved().
  • Impedisci ad altri DPC di creare profili gestiti utilizzando DISALLOW_ADD_MANAGED_PROFILE. Questa è l'impostazione predefinita in Android 8.0 per i proprietari di dispositivi su dispositivi di cui è stato appena eseguito il provisioning o con dispositivi di cui è stato eseguito l'upgrade ad Android 8.0.
  • I proprietari di dispositivi possono anche impedire agli utenti di rimuovere i profili gestiti esistenti utilizzando DISALLOW_REMOVE_MANAGED_PROFILE.

I proprietari di dispositivi e i proprietari di profili possono comunicare tra loro se provengono dallo stesso APK e se i proprietari sono affiliati (consulta la sezione Affiliazione utente di seguito).

Per informazioni più dettagliate sul supporto di questo nuovo scenario di deployment, consulta la pagina dedicata ai profili di lavoro sui dispositivi completamente gestiti.

Affiliazione utente

Quando il proprietario di un dispositivo e il proprietario di un profilo rappresentano la stessa organizzazione:

  • I proprietari di dispositivi e profili possono comunicare tra loro all'interno dello stesso APK e potrebbero voler condividere criteri o stato (vedi Profili di lavoro su dispositivi completamente gestiti qui sopra).

  • Le funzionalità a livello di dispositivo, come il logging o la modalità di blocco attività nella lista consentita, possono essere applicate agli utenti affiliati.

Gli ID di affiliazione, associati a un profilo o a un utente, identificano le organizzazioni. Quando gli ID affiliazione corrispondono, gli utenti diventano affiliati. I proprietari di dispositivi e profili utilizzano setAffiliationIds() per impostare i propri ID affiliazione. Rappresentano le organizzazioni utilizzando ID stringa lunghi difficili da indovinare.

Nuovo accesso per gli utenti affiliati

Se tutti gli utenti e i profili secondari su un dispositivo sono affiliati al proprietario del dispositivo, sono disponibili le seguenti funzioni:

In precedenza, il logging di sicurezza e la segnalazione di bug erano disponibili solo per i dispositivi con un solo utente o per i dispositivi con un solo profilo e un solo utente.

La modalità di blocco attività è disponibile per gli utenti secondari e i profili gestiti se è affiliato al proprietario del dispositivo tramite setLockTaskPackages(). Per informazioni più dettagliate sull'affiliazione degli utenti, consulta la sezione Utenti affiliati.

Disclaimer per il provisioning personalizzato

Ora i DPC possono mostrare i propri disclaimer agli utenti durante il provisioning. Utilizza EXTRA_PROVISIONING_DISCLAIMERS, EXTRA_PROVISIONING_DISCLAIMER_HEADER e EXTRA_PROVISIONING_DISCLAIMER_CONTENT per fornire disclaimer testuali con stili. I disclaimer personalizzati di un DPC vengono visualizzati nell'elenco dei Termini comprimibili.

Sicurezza

I proprietari di profili e i proprietari di dispositivi possono utilizzare setRequiredStrongAuthTimeout() per configurare un periodo di timeout per lo sblocco di un dispositivo o di un profilo con un metodo di autenticazione secondario, ad esempio impronte o agenti di attendibilità. Alla scadenza del periodo di timeout, l'utente deve sbloccare il dispositivo o il profilo utilizzando un metodo di autenticazione efficace, ad esempio password, PIN o sequenza.

I proprietari dei dispositivi e dei profili possono reimpostare in sicurezza le password del dispositivo e dei profili di lavoro utilizzando resetPasswordWithToken(). Per i dispositivi che supportano la crittografia basata su file, questa API è disponibile prima che un utente sblocchi il proprio dispositivo o profilo, a condizione che il DPC sia sensibile alla crittografia.

Quando blocchi un profilo di lavoro su un dispositivo che supporta la crittografia basata su file, lockNow(int) può scegliere di rimuovere le chiavi di crittografia principali del profilo di lavoro utilizzando FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY. Le chiavi di crittografia vengono rimosse anche se l'utente disattiva il profilo di lavoro.

Inoltre, i proprietari di dispositivi possono utilizzare setNetworkLoggingEnabled() per attivare il logging di rete delle query DNS e delle connessioni TCP avviate dai dispositivi di proprietà dell'azienda. Per ulteriori informazioni, consulta Logging dell'attività di rete.

I proprietari del profilo possono limitare i pacchetti dell'utente principale che possono osservare le notifiche del profilo di lavoro. Chiama setPermittedCrossProfileNotificationListeners() per impostare i pacchetti nella lista consentita che ricevono eventi tramite un NotificationListenerService. Se imposti i listener consentiti su null (impostazione predefinita), la lista consentita viene disabilitata e tutti i pacchetti possono rimanere in ascolto delle notifiche. Per limitare gli eventi ai pacchetti di sistema, passa un Set vuoto. Per visualizzare le app che non possono accedere alle notifiche del profilo di lavoro, gli utenti possono toccare Impostazioni > App e notifiche > Accesso speciale per le app > Accesso alle notifiche.

Infine, i proprietari del profilo e dei dispositivi possono recuperare informazioni sugli aggiornamenti di sistema in attesa disponibili su un dispositivo utilizzando getPendingSystemUpdate().

Delega API per la gestione delle app

La delega API consente ai proprietari di dispositivi e profili di trasferire completamente la gestione delle app ad altre applicazioni. La classe DevicePolicyManager fornisce metodi per gestire gli ambiti di delega che i proprietari di dispositivi e profili possono concedere a un pacchetto:

La seguente tabella mostra come i vari metodi di DevicePolicyManager sono organizzati nei diversi ambiti:

Tabella 1. La corrispondenza tra ambiti e metodi dei criteri dei dispositivi

Raggruppa Metodi
DELEGATION_CERT_INSTALL
DELEGATION_APP_RESTRICTIONS
DELEGATION_BLOCK_UNINSTALL setUninstallBlocked()
DELEGATION_PERMISSION_GRANT
DELEGATION_PACKAGE_ACCESS
DELEGATION_ENABLE_SYSTEM_APP enableSystemApp()

Servizi in background di lunga durata

I proprietari di dispositivi e profili possono creare una sottoclasse DeviceAdminService per creare servizi in background. Il sistema Android tenta di mantenere il servizio in esecuzione mentre l'utente è in esecuzione. Se vuoi eseguire attività periodiche, valuta l'utilizzo di JobScheduler prima di creare un servizio in background.

Controllo del servizio di backup

I proprietari di dispositivi possono attivare/disattivare Android Backup Service utilizzando i nuovi metodi in DevicePolicyManager. Abilita e disabilita il servizio di backup utilizzando setBackupServiceEnabled(). Controlla lo stato del servizio di backup utilizzando isBackupServiceEnabled().

Configurazione del proxy Wi-Fi

I proprietari dei dispositivi e dei profili possono configurare server proxy HTTP per le reti Wi-Fi. Utilizza un file PAC o le impostazioni manuali per configurare un server proxy per ogni rete Wi-Fi. Per impostare o rimuovere il proxy per un elemento WifiConfiguration, chiama il relativo metodo setHttpProxy(). Per ricevere la chiamata alle impostazioni proxy, chiama getHttpProxy().

Finestre di dialogo esplicative per le funzionalità disattivate dall'amministratore

L'app dovrebbe mostrare una spiegazione utile agli utenti che cercano di utilizzare una funzionalità disattivata dall'amministratore. Tutte le app ora possono usare createAdminSupportIntent() per creare un intent che mostra una finestra di dialogo di spiegazione quando viene trasmesso a startActivity(Intent). Gli intent includono spiegazioni personalizzate e localizzate per le videocamere disattivate, acquisizioni schermo disattivate e tutte le limitazioni di UserManager.

Limitazione Bluetooth

I proprietari dei dispositivi possono disattivare il Bluetooth, influendo su tutti gli utenti e i profili sul dispositivo. Per disattivare il Bluetooth, aggiungi la limitazione utente DISALLOW_BLUETOOTH.

I proprietari dei dispositivi e dei profili possono impedire agli utenti di inviare file tramite Bluetooth utilizzando DISALLOW_BLUETOOTH_SHARING. La ricezione dei file non è interessata. Se impostato dal proprietario di un dispositivo, l'impostazione DISALLOW_BLUETOOTH_SHARING viene applicata a tutti gli utenti sul dispositivo. Questa è l'impostazione predefinita in Android 8.0 per i nuovi profili e quelli esistenti sui dispositivi di cui è stato eseguito l'upgrade ad Android 8.0.

Modifiche al comportamento

Se sviluppi app per le aziende, inclusi i DPC, devi esaminare le seguenti modifiche al comportamento in Android 8.0 e modificare l'app di conseguenza.

Rimozione degli utenti

I proprietari di dispositivi possono rimuovere gli utenti secondari e i profili gestiti utilizzando removeUser(), anche se DISALLOW_REMOVE_USER è abilitato.

Sicurezza

Autenticazione

Le seguenti modifiche sono state applicate alla classe DevicePolicyManager:

  • Il metodo lockNow() blocca il profilo di lavoro solo se è attiva una verifica di lavoro separata.
  • Il metodo resetPassword() non è più disponibile per i DPC (controller criteri dispositivi) che agiscono come proprietari di dispositivi o profili e hanno come target Android 8.0. Se chiamata, viene generata un'eccezione di sicurezza. I DPC devono invece usare resetPasswordWithToken().

    Nota: questa modifica non riguarda i DPC che hanno come target Android 7.1.1 (livello API 25) o una versione precedente, così come i DPC con privilegi amministrativi solo del dispositivo.

  • Per i dispositivi che supportano la crittografia basata su file, isActivePasswordSufficient() non è disponibile prima che l'utente sblocca il dispositivo per la prima volta dopo un riavvio. Se chiamata prima che l'utente sblocca il dispositivo, viene generata un'eccezione.

Dati provenienti da profili di lavoro bloccati

Android 8.0 include modifiche all'interfaccia utente per separare i dati da un profilo di lavoro bloccato.

  • Le notifiche per le app nel profilo di lavoro ora potrebbero nascondere i relativi contenuti. In precedenza, il riquadro a scomparsa delle notifiche mostrava i contenuti di un profilo di lavoro bloccato per le app di lavoro.
  • La schermata Recenti ora mostra un riquadro normale per eseguire le app da un profilo di lavoro bloccato. Il riquadro con chiavi colorate contiene l'icona e il nome di un'app. In precedenza, le attività o le attività di un profilo di lavoro bloccato mostravano un'anteprima nella schermata Recenti.

Integrità del dispositivo

  • Il flag ENSURE_VERIFY_APPS è ora una limitazione globale per gli utenti. Se qualsiasi utente sul dispositivo ha questa limitazione, la verifica delle app viene applicata a tutti gli utenti sul dispositivo. Ad esempio, se il proprietario di un profilo imposta la limitazione per il profilo di lavoro, la verifica delle app viene applicata al profilo personale dell'utente.
  • Il metodo onSystemUpdatePending() è ora richiamato per i proprietari del profilo oltre che per i proprietari dei dispositivi.
  • Quando utilizzi la classe SystemUpdatePolicy, il criterio di posticipazione non si applica più alle patch di sicurezza, pertanto le patch di sicurezza non possono più essere posticipate. Tuttavia, il comportamento di altri tipi di criteri, ad esempio quelli automatici e a finestre, non è interessato.
  • I proprietari di dispositivi possono attivare un ripristino dei dati di fabbrica utilizzando wipeData(), anche se DISALLOW_FACTORY_RESET è abilitato.

VPN sempre attiva

Android 8.0 include modifiche all'interfaccia utente per aiutare gli utenti a comprendere lo stato delle connessioni VPN sempre attive:

  • Quando le connessioni VPN sempre attive si disconnettono o non riescono a connettersi, gli utenti visualizzano una notifica che non può essere ignorata. Toccando la notifica vengono visualizzate le impostazioni di configurazione della VPN. La notifica scompare quando la VPN si riconnette o l'utente disattiva l'opzione VPN sempre attiva.
  • La VPN sempre attiva consente alla persona che utilizza un dispositivo di bloccare le connessioni di rete che non utilizzano la VPN. Quando attivi questa opzione, l'app Impostazioni avvisa l'utente che non avrà una connessione Internet fino a quando la VPN non si sarà connessa. In Impostazioni viene chiesto all'utente se continuare o annullare l'abbonamento.

L'VpnService delle app VPN ora deve chiamare il suo metodo startForeground() dopo il lancio. Poiché il sistema Android avvia direttamente il servizio di un'app VPN, l'app è responsabile della transizione in primo piano. Android 8.0 blocca le app VPN che non eseguono la transizione del servizio VPN in primo piano.

Richiamate delle password

I callback di modifica della password di DeviceAdminReceiver ora includono un parametro user per identificare l'utente o il profilo a cui appartiene la password. Le firme del nuovo metodo sono:

L'implementazione predefinita di ogni nuovo metodo chiama la versione precedente, eliminando l'argomento utente. Android 8.0 ritira i metodi precedenti.

Delega API per la gestione delle app

I seguenti metodi nella classe DevicePolicyManager sono ora deprecati:

Inoltre, è ora possibile delegare un singolo ambito a più pacchetti. In altre parole, i proprietari di dispositivi e profili possono concedere contemporaneamente l'accesso allo stesso set di API a due diversi pacchetti.