Questa guida descrive come sviluppare un controller dei criteri dei dispositivi (DPC) per i dispositivi in un deployment di Android Enterprise. Un'app DPC, precedentemente nota come controller dei criteri di lavoro, controlla le policy dei dispositivi locali e le applicazioni di sistema sui dispositivi.
Informazioni sui DPC
In un deployment Android Enterprise, un'azienda mantiene il controllo su vari aspetti dei dispositivi degli utenti, ad esempio l'isolamento delle informazioni relative al lavoro dai dati personali degli utenti, la preconfigurazione delle app approvate per l'ambiente o la disattivazione delle funzionalità del dispositivo (ad esempio, la fotocamera).
In qualità di EMM, sviluppi un'app DPC che può essere utilizzata dai tuoi clienti in combinazione con la tua console EMM e il tuo server. Il tuo cliente esegue il deployment del DPC sui dispositivi utente che gestisce. Il DPC funge da ponte tra la console EMM (e il server) e il dispositivo. Un amministratore utilizza la console EMM per eseguire una serie di attività, tra cui la configurazione delle impostazioni e delle app del dispositivo.
Il DPC crea e gestisce il profilo di lavoro sul dispositivo su cui è installato. Il profilo di lavoro cripta le informazioni correlate al lavoro e le mantiene separate dalle app e dai dati personali degli utenti. Prima di creare il profilo di lavoro, il DPC può anche eseguire il provisioning di un account della versione gestita di Google Play da utilizzare sul dispositivo.
Questa guida mostra come sviluppare un DPC in grado di creare e gestire profili di lavoro.
Support Library DPC per EMM
La libreria di supporto DPC per EMM comprende classi di utilità e helper che facilitano il provisioning e la gestione dei dispositivi Android in un ambiente aziendale. La libreria ti consente di sfruttare importanti funzionalità nelle tue app DPC:
- Supporto del provisioning degli account Google Play gestiti: il provisioning degli account Google Play gestiti dall'app DPC richiede che le app Google Play e Google Play Services soddisfino i requisiti di versione minimi. Tuttavia, l'aggiornamento di queste app può essere complesso. La libreria di supporto DPC si occupa dell'aggiornamento di queste app e garantisce anche la compatibilità con i futuri aggiornamenti della procedura di provisioning degli account Google Play gestiti. Per maggiori dettagli, consulta la sezione Supporto per il provisioning degli account Google Play gestiti.
- Supporto delle configurazioni gestite: l'utilizzo dell'API Play EMM per gestire le configurazioni gestite per le app approvate è il modo più semplice per implementare le configurazioni gestite nel tuo DPC. La libreria di supporto DPC ti consente di delegare a Google Play l'attività di applicazione delle configurazioni gestite (in precedenza, limitazioni delle app) impostate dall'amministratore utilizzando la console EMM. L'utilizzo dell'API Play EMM per gestire le configurazioni gestite consente di applicare la configurazione dell'app in modo atomico durante l'installazione. Per saperne di più su come attivare questa funzionalità nel tuo DPC, consulta Applicare le configurazioni gestite alle app di lavoro.
Segui i passaggi riportati di seguito per scaricare la libreria. Le attività descritte in questa guida presuppongono l'utilizzo della libreria di supporto DPC.
Scaricare la libreria di supporto DPC
Per utilizzare la libreria di supporto DPC, scaricala dalla community dei provider EMM Android Enterprise. Devi aggiungere la libreria al file build.gradle e gestire altre dipendenze quando crei l'app DPC. Ad esempio, la libreria richiede la libreria client di autenticazione di Google Play Services 11.4.0 Google Play Services.
- Aggiungi la libreria al file
build.gradle:
Groovy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- Aggiungi la
libreria client di autenticazione di Google Play Services 11.4.0 al file build.gradle:
Groovy
implementation 'com.google.android.gms:play-services-auth:11.4.0'
Kotlin
implementation("com.google.android.gms:play-services-auth:11.4.0")
Per essere eseguita, la libreria richiede determinate autorizzazioni, pertanto devi aggiungerle al manifest della tua app DPC quando la carichi su Google Play:
<uses-permission android:name= "android.permission.DOWNLOAD_WITHOUT_NOTIFICAT>ION<"/ uses-permission android:name= "android.permission>.GE<T_ACCOUNTS"/ uses-permission android:name= "android.per>mis<sion.MANAGE_ACCOUNTS"/ uses-permission android:name= "andro>id.<permission.WRITE_SYNC_SETTINGS"/ uses-permission android:name= "com.google.andr>oid.providers.gsf.permission.READ_GSERVICES"/
Oltre a questi passaggi preliminari di configurazione e deployment, devi anche inizializzare la funzionalità della libreria specifica nel codice DPC, a seconda della funzionalità che vuoi implementare. I dettagli sono inclusi nelle sezioni pertinenti di seguito.
Crea un DPC
Crea il tuo DPC sul modello esistente utilizzato per le applicazioni di amministrazione dei dispositivi.
Nello specifico, la tua app deve creare una sottoclasse di
DeviceAdminReceiver (una classe del pacchetto android.app.admin) come descritto in
Amministrazione dispositivo.
Crea un profilo di lavoro
Per un esempio che mostra come creare un profilo di lavoro di base, vedi BasicManagedProfile su GitHub.
Per creare un profilo di lavoro su un dispositivo che ha già un profilo personale,
innanzitutto verifica se il dispositivo può supportare un profilo di lavoro controllando l'esistenza della
funzionalità di sistema
FEATURE_MANAGED_USERS:
Kotlin
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Se il dispositivo supporta i profili di lavoro, crea un profilo di lavoro inviando un intent con un'azione ACTION_PROVISION_MANAGED_PROFILE. In alcuni documenti, profilo gestito è un termine generale che significa la stessa cosa di profilo di lavoro nel contesto di Android in ambito aziendale. Includi il nome del pacchetto di amministrazione del dispositivo come extra:
Kotlin
val provisioningActivity = getActivity() // You'll need the package name for the DPC app. val myDPCPackageName = "com.example.myDPCApp" // Set up the provisioning intent val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java) provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()) if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE) provisioningActivity.finish() }
Java
Activity provisioningActivity = getActivity(); // You'll need the package name for the DPC app. String myDPCPackageName = "com.example.myDPCApp"; // Set up the provisioning intent Intent provisioningIntent = new Intent("android.app.action.PROVISION_MANAGED_PROFILE"); ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class); provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()); if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager()) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE); provisioningActivity.finish(); }
Il sistema risponde a questo intent nel seguente modo:
- Verifica che il dispositivo sia criptato. In caso contrario, il sistema chiede all'utente di criptare il dispositivo prima di procedere.
- Crea un profilo di lavoro.
- Rimuove le applicazioni non richieste dal profilo di lavoro.
- Copia l'app DPC nel profilo di lavoro e imposta il DPC stesso come proprietario del profilo.
Esegui l'override di
onActivityResult() per
verificare se il provisioning è andato a buon fine:
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data) } }
Java
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return; } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data); } }
Termina l'attivazione del profilo di lavoro
Quando il profilo è stato sottoposto al provisioning, il sistema chiama il metodo
DeviceAdminReceiver.onProfileProvisioningComplete() dell'app DPC. Esegui l'override
di questo metodo di callback per completare l'attivazione del profilo di lavoro.
Una tipica implementazione di DeviceAdminReceiver.onProfileProvisioningComplete()
callback esegue le seguenti operazioni:
- Verifica che il dispositivo sia conforme ai criteri relativi ai dispositivi dell'EMM, come descritto in Impostare i criteri relativi ai dispositivi.
- Attiva le applicazioni di sistema che l'amministratore ha reso
disponibili nel profilo di lavoro utilizzando
DevicePolicyManager.enableSystemApp(). - Se il dispositivo utilizza la versione gestita di Google Play, aggiunge l'account appropriato al
profilo di lavoro in modo che le app approvate possano essere installate sul dispositivo.
- Account Google Play gestiti: per maggiori dettagli, consulta Garantire l'ambiente di lavoro per gli account Google Play gestiti e Aggiungere un account Google Play gestito.
- Account Google: utilizza
AccountManager.addAccount().
Attivare il profilo di lavoro
Una volta completate queste attività, chiama il metodo
setProfileEnabled() di Device Policy Manager per attivare il profilo di lavoro:
Kotlin
// Get the device policy manager val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val componentName = myDeviceAdminReceiver.getComponentName(this) // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile") // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName)
Java
// Get the device policy manager DevicePolicyManager myDevicePolicyMgr = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName componentName = myDeviceAdminReceiver.getComponentName(this); // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile"); // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName);
Configurare i criteri relativi ai dispositivi
L'app DPC applica i criteri dei dispositivi impostati da un amministratore per soddisfare i requisiti e i vincoli di un'organizzazione. Ad esempio, le norme di sicurezza potrebbero richiedere che i dispositivi si blocchino dopo un determinato numero di tentativi di inserimento della password non riusciti. Il DPC esegue query nella console EMM per i criteri attuali, quindi li applica utilizzando l'API Device Administration.
Per informazioni su come applicare i criteri relativi ai dispositivi, vedi Criteri.
Applicare le configurazioni gestite alle app di lavoro
Le configurazioni gestite consentono ai tuoi clienti di preconfigurare le app che hanno approvato per la distribuzione e aggiornarle facilmente quando la configurazione deve essere modificata. La configurazione di un'app prima del deployment garantisce che le norme di sicurezza e altre norme dell'organizzazione vengano rispettate al momento dell'installazione dell'app sul dispositivo di destinazione.
Le funzionalità dell'app sono definite dallo sviluppatore dell'app in uno schema XML (lo schema delle configurazioni gestite) che accompagna l'app al momento del caricamento su Google Play (gli sviluppatori di app possono consultare Configurare le configurazioni gestite per i dettagli).
Recuperi questo schema dall'app per mostrarlo agli amministratori clienti nella console EMM, fornisci un'interfaccia utente in cui vengono visualizzate le varie opzioni definite nello schema e consenti agli amministratori di preconfigurare le impostazioni dell'app. Il set di configurazione gestita risultante impostato dall'amministratore viene in genere memorizzato sul server EMM, che poi utilizza l'API Play EMM per impostare Managedconfigurationsfordevice o Managedconfigurationsforuser. Per maggiori dettagli, vedi Configurazioni gestite tramite Play.
Le configurazioni gestite possono essere applicate all'app utilizzando l'API Play EMM (approccio consigliato) o direttamente dal DPC (descritto in Applicare le configurazioni gestite direttamente dal DPC). L'utilizzo dell'API Play EMM presenta diversi vantaggi, tra cui una facile implementazione perché puoi utilizzare la libreria di supporto DPC per semplificare le attività DPC. Inoltre, l'API Play EMM:
- Imposta la configurazione in modo atomico quando viene installata una nuova app, garantendo così che l'app sia pronta la prima volta che l'utente la avvia.
- Consente di gestire le configurazioni in base all'utente, in modo da evitare di monitorare il provisioning in base al dispositivo.
Applica le configurazioni gestite utilizzando l'API Play EMM
Per utilizzare l'API Play EMM per le configurazioni gestite, il DPC deve consentire a Google Play di impostare le configurazioni. La libreria di supporto DPC si occupa di questa attività per te eseguendo il proxy della configurazione inviata da Google Play.
Per utilizzare l'API Play EMM, scarica la libreria di supporto DPC e poi attiva il supporto delle configurazioni gestite nel tuo DPC.
Abilita il supporto delle configurazioni gestite nel tuo DPC
Importa questo corso nel tuo DPC:
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
Inizializza la libreria delle configurazioni gestite. In questo esempio, "admin" è il ComponentName di DeviceAdminReceiver.
Kotlin
var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)
Java
ManagedConfigurationsSupport managedConfigurationsSupport = new ManagedConfigurationsSupport(context, admin);
Abilita le configurazioni gestite:
Kotlin
managedConfigurationsSupport.enableManagedConfigurations()
Java
managedConfigurationsSupport.enableManagedConfigurations();
Con questa libreria inizializzata nel DPC, puoi utilizzare l'API Google Play EMM nella console e nel server EMM per applicare le configurazioni gestite alle app approvate, anziché codificare queste attività direttamente nel DPC. Per maggiori dettagli, vedi Configurazioni gestite tramite Google Play.
Applica le configurazioni gestite direttamente dal DPC
Per modificare le impostazioni di configurazione di un'app direttamente dal DPC, chiama il metodo DevicePolicyManager.setApplicationRestrictions() e passa i parametri per DeviceAdminReceiver dell'app DPC, il nome del pacchetto dell'app di destinazione e il Bundle che comprende la configurazione gestita dell'app impostata dall'amministratore. Per maggiori dettagli, consulta Come interagiscono il DPC e la console EMM e Configurare le configurazioni gestite. Tuttavia, tieni presente che questo approccio alternativo all'applicazione delle configurazioni gestite non è consigliato nelle implementazioni degli account Google Play gestiti.
Supporto per il provisioning dell'account Google Play gestito
La libreria di supporto DPC include il supporto per il provisioning degli account Google Play gestiti. Per utilizzare questo supporto, devi prima inizializzare la libreria, quindi puoi assicurarti che l'ambiente di lavoro sia corretto e aggiungere un account Google Play gestito.
Inizializzare il supporto degli account Google Play gestiti nel DPC
Importa questo corso nel tuo DPC:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
Inizializza la libreria di compatibilità del provisioning. In questo esempio, "admin" è
il ComponentName di
DeviceAdminReceiver.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Garantire l'ambiente di lavoro per gli account Google Play gestiti
Dopo che il DPC ha eseguito il provisioning di un dispositivo in modalità Proprietario del profilo (ACTION_PROVISION_MANAGED_PROFILE) o Proprietario del dispositivo (ACTION_PROVISION_MANAGED_DEVICE), assicurati che il dispositivo possa supportare gli account Google Play gestiti chiamando:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Il callback segnala l'esito positivo o negativo di questo processo. Quando il callback viene restituito correttamente, è possibile aggiungere un account Google Play gestito. Se il callback segnala un errore, chiedi all'utente di assicurarsi che il dispositivo abbia una connessione di rete (ad esempio, se il download non va a buon fine). In altri casi, segnala l'errore a Google.
Kotlin
object : WorkingEnvironmentCallback() { override fun onSuccess() { // Can now provision the managed Google Play Account } override fun onFailure(error: Error) { // Notify user, handle error (check network connection) } }
Java
new WorkingEnvironmentCallback() { @Override public void onSuccess() { // Can now provision the managed Google Play Account } @Override public void onFailure(Error error) { // Notify user, handle error (check network connection) } }
Aggiungere un account Google Play gestito
AccountManager
del framework Android può aggiungere un account Google Play gestito a un dispositivo. Per semplificare l'interazione con
AccountManager, utilizza la funzione helper (mostrata nell'esempio seguente)
della libreria di supporto DPC. La funzione
gestisce il token restituito dal server Google Play e facilita il provisioning
dell'account Google Play gestito. La funzione viene restituita quando l'account Google Play gestito
si trova in uno stato valido:
Kotlin
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
Java
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
token: il token di autenticazione utente generato dalla chiamata dell'API EMM di Google PlayUsers.generateAuthenticationToken().accountAddedCallback: restituisce l'account Google Play gestito che è stato aggiunto correttamente al dispositivo. Questo callback deve includere i metodionAccountReady()eonFailure().
Kotlin
val workAccountAddedCallback = object : WorkAccountAddedCallback() { override fun onAccountReady(account: Account, deviceHint: String) { // Device account was successfully added to the device // and is ready to be used. } override fun onFailure(error: Error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } }
Java
WorkAccountAddedCallback workAccountAddedCallback = new WorkAccountAddedCallback() { @Override public void onAccountReady(Account account, String deviceHint) { // Device account was successfully added to the device // and is ready to be used. } @Override public void onFailure(Error error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } };
Documentazione correlata
- Per saperne di più sull'API Device Administration, vedi Device Administration.
- Per scoprire di più sui metodi di provisioning di Android Enterprise, consulta Provisioning dei dispositivi nella Guida per gli sviluppatori di Android Enterprise.
- Per un esempio di GitHub che mostra come creare un profilo di lavoro di base, consulta BasicManagedProfile.
- Per un esempio di GitHub che mostra come impostare le configurazioni su altre app come proprietario del profilo, vedi AppRestrictionEnforcer.