Novità di Android 10 per le aziende

Questa pagina fornisce una panoramica delle nuove API aziendali, delle funzionalità e dei cambiamenti del comportamento introdotti in Android 10.

Profili di lavoro per i dispositivi di proprietà dell'azienda

Android 10 introduce nuove funzionalità di provisioning e attestazione per i dispositivi di proprietà dell'azienda che richiedono solo un profilo di lavoro.

Strumenti di provisioning migliorati per i profili di lavoro

Puoi eseguire il provisioning dei profili di lavoro sui dispositivi Android 10 e versioni successive registrati utilizzando Codice QR o Zero Touch. Durante il provisioning di un dispositivo di proprietà dell'azienda, un nuovo intent aggiuntivo consente alle app controller dei criteri dei dispositivi (DPC) di avviare il profilo di lavoro o una configurazione completamente gestita. Dopo la creazione di un profilo di lavoro o la gestione completa, i DPC devono lanciare schermate di conformità ai criteri per applicare eventuali criteri iniziali.

Nel file manifest del tuo DPC, dichiara un nuovo filtro per intent per GET_PROVISIONING_MODE in un'attività e aggiungi l'autorizzazione BIND_DEVICE_ADMIN per impedire ad app arbitrarie di avviare l'attività. Ecco alcuni esempi:

<activity
    android:name=".GetProvisioningModeActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action
            android:name="android.app.action.GET_PROVISIONING_MODE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Durante il provisioning, il sistema avvia l'attività associata al filtro intent. Lo scopo di questa attività è specificare una modalità di gestione (profilo di lavoro o completamente gestito).

Potrebbe essere utile recuperare gli extra di provisioning prima di determinare la modalità di gestione appropriata per il dispositivo. L'attività può chiamare getIntent() per recuperare quanto segue:

I DPC possono anche creare un nuovo intent dei risultati a cui aggiungere i seguenti extra:

Per impostare la modalità di gestione sul dispositivo, chiama putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), dove desiredProvisioningMode è:

  • Profilo di lavoro: PROVISIONING_MODE_MANAGED_PROFILE
  • Servizio completamente gestito: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

Completa il profilo di lavoro o il provisioning completamente gestito inviando i dettagli del provisioning alla configurazione tramite setResult(RESULT_OK, Intent) e chiudi tutte le schermate attive con finish().

Una volta completato il provisioning, è disponibile un nuovo intent per i DPC per consentire ai DPC di lanciare le rispettive schermate di conformità e applicare le impostazioni dei criteri iniziali. Sui dispositivi con profilo di lavoro, le schermate di conformità vengono visualizzate nel profilo di lavoro. Il DPC deve assicurarsi che le sue schermate di conformità vengano mostrate agli utenti, anche se l'utente esce dal flusso di configurazione.

Nel file manifest del tuo DPC, dichiara un nuovo filtro per intent per ADMIN_POLICY_COMPLIANCE in un'attività e aggiungi l'autorizzazione BIND_DEVICE_ADMIN per impedire ad app arbitrarie di avviare l'attività. Ecco alcuni esempi:

<activity
    android:name=".PolicyComplianceActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Il DPC deve utilizzare questo nuovo intent invece di ascoltare la trasmissione di ACTION_PROFILE_PROVISIONING_COMPLETE.

L'attività associata al filtro per intent può chiamare getIntent() per recuperare EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE. Dopo aver eseguito la conformità ai criteri, ADMIN_POLICY_COMPLIANCE deve restituire setResult(RESULT_OK, Intent) e chiudere tutte le schermate attive con finish().

I dispositivi completamente gestiti riportano gli utenti alla schermata Home. I dispositivi con profili di lavoro chiedono agli utenti di aggiungere il proprio account personale prima di riportarli alla schermata Home.

Attestazione ID dispositivo del profilo di lavoro

I DPC impostati come amministratori di un profilo di lavoro di cui è stato eseguito il provisioning mediante la registrazione zero-touch possono ricevere ID dispositivo certificati mediante hardware protetto, ad esempio un IMEI o il numero di serie del produttore. Il dispositivo deve includere hardware protetto (ad esempio un ambiente di esecuzione attendibile (TEE) o Secure Element (SE)) e supportare l'attestazione dell'ID dispositivo e la registrazione zero-touch.

Il componente amministratore di un profilo di lavoro può chiamare DevicePolicyManager.generateKeyPair(), passando uno o più tra ID_TYPE_SERIAL, ID_TYPE_IMEI o ID_TYPE_MEID per l'argomento idAttestationFlags.

Per scoprire di più sull'estrazione e sulla convalida degli ID dispositivo, vedi Verificare le coppie di chiavi supportate dall'hardware con l'attestazione della chiave.

Miglioramenti del profilo di lavoro

Sono disponibili nuove API per supportare la visibilità del calendario tra più profili e il blocco a livello di dispositivo delle installazioni di app provenienti da origini sconosciute.

Profilo di lavoro, origini sconosciute a livello di dispositivo

Le app scaricate da fonti diverse da Google Play (o da altri store attendibili) sono chiamate app di origini sconosciute. In Android 10, gli amministratori dei profili di lavoro possono impedire a qualsiasi utente o profilo di installare app da origini sconosciute ovunque sul dispositivo aggiungendo la nuova limitazione per gli utenti DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. Tuttavia, una volta aggiunta questa limitazione, chi utilizza il dispositivo può comunque installare app tramite adb.

Per impedire agli utenti di installare erroneamente app da origini sconosciute, ti consigliamo di aggiungere questa limitazione per gli utenti perché non richiede l'installazione di Google Play Services. Se vuoi supportare le versioni precedenti di Android, puoi impostare un valore di configurazione gestita per Google Play.

Limita i dispositivi di immissione consentiti ai profili di lavoro

Quando gli amministratori dei profili di lavoro chiamano DevicePolicyManager.setPermittedInputMethods(), gli utenti sono limitati ai metodi di immissione consentiti all'interno del profilo di lavoro anziché all'intero dispositivo, offrendo loro il pieno controllo sui metodi di immissione sul lato personale del dispositivo.

Cancellare silenziosamente i profili di lavoro

È stato aggiunto il flag WIPE_SILENTLY a DevicePolicyManager.wipeData(). Se il flag è impostato, gli utenti non riceveranno notifiche dopo la cancellazione dei dati del profilo di lavoro mediante wipeData().

Nuove funzionalità per i dispositivi completamente gestiti

Android 10 introduce nuove funzionalità e API per dispositivi completamente gestiti, inclusi aggiornamenti di sistema manuali, estensione del provisioning del codice QR e NFC per includere le credenziali per una rete Wi-Fi EAP e supporto del DNS tramite TLS.

Installazione manuale degli aggiornamenti di sistema

In Android 10, gli amministratori dei dispositivi completamente gestiti possono installare aggiornamenti di sistema tramite un file di aggiornamento di sistema. Gli aggiornamenti di sistema manuali consentono agli amministratori IT di:

  • Prova un aggiornamento su un numero limitato di dispositivi prima di installarli su larga scala.
  • Evita download duplicati su reti con larghezza di banda limitata.
  • Scagliona le installazioni o aggiorna i dispositivi solo quando non sono in uso.

Innanzitutto, un amministratore IT imposta un criterio di aggiornamento del sistema posticipato per ritardare l'installazione automatica (se necessario). Successivamente, il DPC di un dispositivo chiama installSystemUpdate() con il percorso del file di aggiornamento di sistema del produttore del dispositivo. Passa un oggetto InstallSystemUpdateCallback che il sistema può utilizzare per segnalare gli errori che si verificano prima del riavvio del dispositivo. In caso di problemi, il sistema chiama onInstallUpdateError() con il codice di errore.

Dopo il riavvio del dispositivo, il DPC deve confermare l'avvenuta installazione utilizzando un'API di versione, ad esempio Build.FINGERPRINT. Se l'aggiornamento non va a buon fine, segnala l'errore a un amministratore IT.

Provisioning Wi-Fi EAP

In Android 10, i codici QR e i dati NFC utilizzati per il provisioning del dispositivo possono contenere configurazione e credenziali EAP, inclusi i certificati. Quando una persona esegue la scansione di un codice QR o tocca un tag NFC, il dispositivo esegue automaticamente l'autenticazione su una rete Wi-Fi locale tramite EAP e avvia il processo di provisioning senza alcun input manuale aggiuntivo.

Per autenticare il Wi-Fi utilizzando EAP, aggiungi un extra di EXTRA_PROVISIONING_WIFI_SECURITY_TYPE con il valore "EAP". Per specificare l'autenticazione EAP, puoi aggiungere i seguenti extra di provisioning all'intent:

Supporto dei DNS privati

Le organizzazioni possono utilizzare DNS su TLS (chiamato DNS privato sui dispositivi Android) per evitare di fughe di query DNS, incluse quelle dei nomi host interni. I componenti amministrativi dei dispositivi completamente gestiti possono controllare le impostazioni del DNS privato del dispositivo. Per impostare la modalità DNS privato, chiama:

Quando il DPC chiama uno di questi metodi, il sistema restituisce PRIVATE_DNS_SET_NO_ERROR se la chiamata ha avuto esito positivo. In caso contrario, viene restituito un errore.

Per recuperare la modalità DNS privato e l'host impostato su un dispositivo, chiama getGlobalPrivateDnsMode() e getGlobalPrivateDnsHost(). Puoi impedire agli utenti di modificare le impostazioni del DNS privato aggiungendo la limitazione utente di DISALLOW_CONFIG_PRIVATE_DNS.

Esenzione della modalità di blocco della VPN

La modalità di blocco della VPN consente a un DPC di bloccare tutto il traffico di rete che non utilizza la VPN. Gli amministratori di dispositivi completamente gestiti e di profili di lavoro possono escludere le app dalla modalità di blocco. Le app esenti utilizzano una VPN per impostazione predefinita, ma si connettono automaticamente ad altre reti se la VPN non è disponibile. Le app esenti a cui viene negato esplicitamente l'accesso alla VPN useranno solo altre reti.

Per escludere un'app dalla modalità di blocco, chiama il nuovo metodo DevicePolicyManager setAlwaysOnVpnPackage() che accetta un elenco di pacchetti di app esenti. Eventuali pacchetti dell'app aggiunti dal DPC devono essere installati sul dispositivo quando viene richiamato il metodo. Se un'app viene disinstallata e reinstallata, l'app deve essere esente di nuovo. Per scaricare le app precedentemente esenti dalla modalità di blocco, chiama getAlwaysOnVpnLockdownWhitelist().

Per aiutare gli amministratori di dispositivi completamente gestiti e di profili di lavoro a ottenere lo stato della modalità di blocco, Android 10 aggiunge il metodo isAlwaysOnVpnLockdownEnabled().

Nuovi ambiti di delega

Android 10 estende l'elenco di funzioni che un DPC può delegare ad altre app più specializzate. Android raggruppa i metodi API necessari per un'attività in ambiti. Per delegare un ambito, chiama setDelegatedScopes() e passa uno o più dei seguenti ambiti:

Android 10 introduce il nuovo corso DelegatedAdminReceiver per le app delegate. Il sistema utilizza questo ricevitore per l'invio di callback di tipo DPC per delegare le app. Le app per le quali è stata delegata la registrazione dell'attività di rete e la selezione dei certificati devono implementare questa classe. Per aggiungere questo componente a un'app delegata, segui questi passaggi:

  1. Aggiungi una sottoclasse di DelegatedAdminReceiver all'app delegata.
  2. Dichiara <receiver> nel file manifest dell'app, aggiungendo un'azione di filtro per intent per ogni callback. Ad esempio, ACTION_NETWORK_LOGS_AVAILABLE o ACTION_CHOOSE_PRIVATE_KEY_ALIAS.
  3. Proteggi il ricevitore della trasmissione con l'autorizzazione BIND_DEVICE_ADMIN.

Lo snippet seguente mostra il manifest di una singola app delegata che gestisce sia il logging di rete sia la selezione dei certificati:

<receiver android:name=".app.DelegatedAdminReceiver"
        android:permission="android.permission.BIND_DELEGATED_ADMIN">
    <intent-filter>
        <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
        <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
    </intent-filter>
    </receiver>

Logging delle attività di rete

Per aiutare le organizzazioni a rilevare e monitorare il malware, i DPC possono registrare le connessioni TCP e le ricerche DNS da parte del sistema. In Android 10, gli amministratori dei dispositivi completamente gestiti possono delegare il logging di rete a un'app specializzata.

Per recuperare i log di rete dopo che il sistema ha reso disponibile un batch, le app delegate devono prima sottoclasse DelegatedAdminReceiver (descritta in precedenza). Nella sottoclasse, implementa il callback onNetworkLogsAvailable() seguendo le istruzioni riportate in Recuperare i log.

Le app delegate possono chiamare i seguenti metodi DevicePolicyManager (trasmettendo null per l'argomento admin):

Per evitare di perdere i log, i DPC non devono abilitare il logging di rete se prevedi di delegare i log a un'altra app. L'app delegata deve abilitare e raccogliere i log di rete. Una volta delegato il logging di rete, un DPC non riceverà ulteriori callback di onNetworkLogsAvailable().

Per informazioni su come segnalare il logging delle attività di rete da un'app delegata, consulta la Logging delle attività di rete della guida per gli sviluppatori.

Selezione certificato

In Android 10, gli amministratori di dispositivi completamente gestiti, profili di lavoro e utenti secondari possono delegare la selezione dei certificati a un'app specializzata.

Per selezionare un alias di certificato, le app delegate devono prima avere una sottoclasse DelegatedAdminReceiver (descritta in precedenza). Nella sottoclasse, implementa il callback onChoosePrivateKeyAlias() e restituisci un alias per un certificato preferito oppure, per chiedere all'utente di selezionare un certificato, restituisci null.

Ritiro dei criteri di amministrazione dei dispositivi

Android 10 impedisce alle app e ai DPC di applicare i criteri legacy per l'amministrazione del dispositivo. Consigliamo a clienti e partner di passare a dispositivi o profili di lavoro completamente gestiti. I seguenti criteri generano un errore SecurityException quando viene richiamato da un amministratore del dispositivo che ha come target Android 10:

Alcune applicazioni utilizzano l'amministrazione del dispositivo per l'amministrazione dei dispositivi consumer. Ad esempio, bloccare ed eliminare i dati di un dispositivo smarrito. Per abilitare questa funzionalità, continuano a essere disponibili i seguenti criteri:

Per ulteriori informazioni su queste modifiche, consulta Ritiro dell'amministrazione del dispositivo.

Nuove funzionalità per le app

Le app che hanno come target Android 10 possono interrogare la complessità del blocco schermo impostata su un dispositivo prima di mostrare dati riservati o di lanciare funzionalità fondamentali. Le app che chiamano l'API KeyChain traggono vantaggio da miglioramenti del comportamento, mentre sono disponibili nuove funzionalità anche per le app VPN.

Controllo qualità del blocco schermo

A partire da Android 10, le app con funzionalità fondamentali che richiedono un blocco schermo possono interrogare la complessità del blocco schermo di un dispositivo o un profilo di lavoro. Le app che richiedono un blocco schermo più efficace possono indirizzare l'utente alle impostazioni di blocco schermo di sistema, in modo da poter aggiornare le impostazioni di sicurezza.

Per controllare la qualità del blocco schermo:

Per avviare le impostazioni del blocco schermo di sistema, utilizza ACTION_SET_NEW_PASSWORD con EXTRA_PASSWORD_COMPLEXITY extra: le opzioni che non soddisfano la complessità specificata nell'intent extra non sono selezionabili. Gli utenti possono scegliere tra le opzioni di blocco schermo disponibili o uscire dallo schermo.

Best practice: mostra un messaggio nell'app prima di avviare la pagina di blocco schermo del sistema. Quando l'app viene ripristinata, chiama di nuovo il numero DevicePolicyManager.getPasswordComplexity(). Se è ancora necessario un blocco schermo più efficace, limita l'accesso anziché chiedere ripetutamente agli utenti di aggiornare le proprie impostazioni di sicurezza.

Supporto del proxy HTTP nelle app VPN

In Android 10, le app VPN possono impostare un proxy HTTP per la connessione VPN. Per aggiungere un proxy HTTP, un'app VPN deve configurare un'istanza ProxyInfo con un host e una porta prima di chiamare VpnService.Builder.setHttpProxy(). Il sistema e molte librerie di rete utilizzano questa impostazione proxy, ma il sistema non forza le app a inviare un proxy per le richieste HTTP.

Per un codice di esempio che mostra come impostare un proxy HTTP, vedi l'app di esempio ToyVPN.

Modalità di servizio VPN

Le app VPN possono rilevare se il servizio è in esecuzione a causa della Vpn sempre attiva e se la modalità di blocco è attiva. I nuovi metodi aggiunti in Android 10 possono aiutarti a modificare l'interfaccia utente. Ad esempio, potresti disabilitare il pulsante di disconnessione quando la VPN sempre attiva controlla il ciclo di vita del tuo servizio.

Le app VPN possono chiamare i seguenti metodi VpnService dopo aver effettuato la connessione al servizio e aver stabilito l'interfaccia locale:

  • isAlwaysOn() per scoprire se il sistema ha avviato il servizio grazie alla VPN sempre attiva
  • isLockdownEnabled() per scoprire se il sistema blocca le connessioni che non utilizzano la VPN

Lo stato sempre attivo rimane lo stesso mentre il servizio è in esecuzione, ma lo stato in modalità di blocco potrebbe cambiare.

Miglioramenti al portachiavi

Android 10 introduce diversi miglioramenti relativi all'API KeyChain.

Quando un'app chiama KeyChain.choosePrivateKeyAlias(), i dispositivi Android 10 e versioni successive filtrano l'elenco di certificati tra cui l'utente può scegliere in base agli emittenti e agli algoritmi delle chiavi specificati nella chiamata.

Ad esempio, quando un server TLS invia un messaggio Richiesta di certificato nell'ambito di un handshake TLS e il browser chiama KeyChain.choosePrivateKeyAlias(), la richiesta di selezione del certificato include solo le opzioni che corrispondono al parametro dell'emittente. Se non sono disponibili opzioni di corrispondenza o se sul dispositivo non sono installati certificati, la richiesta di selezione non verrà mostrata all'utente.

Inoltre, KeyChain non richiede più il blocco schermo dei dispositivi per poter importare chiavi o certificati CA.