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:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
: aggiungi il bundle esistente o creane uno nuovo. Questo pacchetto viene inviato come intent extra quando il tuo DPC lancia le schermate di conformità alle norme.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
: specifica un account di cui eseguire la migrazione solo se aggiungi un account di lavoro come parte del provisioning del profilo di lavoro.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS
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:
EXTRA_PROVISIONING_WIFI_EAP_METHOD
EXTRA_PROVISIONING_WIFI_IDENTITY
EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY
EXTRA_PROVISIONING_WIFI_DOMAIN
EXTRA_PROVISIONING_WIFI_PHASE2_AUTH
EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE
EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE
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:
setGlobalPrivateDnsModeOpportunistic()
affinché il dispositivo utilizzi il DNS privato quando il sistema può rilevare un server dei nomi supportato; oppuresetGlobalPrivateDnsModeSpecifiedHost()
per specificare il nome host di un server dei nomi che supporta RFC7858 nell'argomentoprivateDnsHost
.
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:
DELEGATION_NETWORK_LOGGING
per delegare il logging delle attività di reteDELEGATION_CERT_SELECTION
per delegare la selezione dei certificati
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:
- Aggiungi una sottoclasse di
DelegatedAdminReceiver
all'app delegata. - Dichiara
<receiver>
nel file manifest dell'app, aggiungendo un'azione di filtro per intent per ogni callback. Ad esempio,ACTION_NETWORK_LOGS_AVAILABLE
oACTION_CHOOSE_PRIVATE_KEY_ALIAS
. - 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:
USES_POLICY_DISABLE_CAMERA
USES_POLICY_DISABLE_KEYGUARD_FEATURES
USES_POLICY_EXPIRE_PASSWORD
USES_POLICY_LIMIT_PASSWORD
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:
- Aggiungi la nuova autorizzazione
REQUEST_PASSWORD_COMPLEXITY
al file manifest dell'app. - Chiama il numero
DevicePolicyManager.getPasswordComplexity()
. La complessità è suddivisa in quattro categorie:
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 attivaisLockdownEnabled()
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.