Creare un controller dei criteri dei dispositivi

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 i criteri locali dei dispositivi e le applicazioni di sistema sui dispositivi.

Informazioni sui DPC

In un deployment di Android Enterprise, un'azienda mantiene il controllo su vari aspetti dei dispositivi degli utenti, ad esempio separa le informazioni di lavoro dai dati personali degli utenti, preconfigura le app approvate per l'ambiente o disattiva le funzionalità dei dispositivi (ad esempio la fotocamera).

In qualità di EMM, svilupperai un'app DPC che può essere utilizzata dai clienti insieme alla console EMM e al server. Il cliente implementa il DPC sui dispositivi degli utenti 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 del dispositivo e delle app.

Il DPC crea e gestisce il profilo di lavoro sul dispositivo su cui è installato. Il profilo di lavoro cripta le informazioni relative 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 Google Play gestito da utilizzare sul dispositivo.

Questa guida mostra come sviluppare un DPC (controller criteri dispositivi) in grado di creare e gestire i profili di lavoro.

Libreria di supporto DPC (controller criteri dispositivi) per EMM

La DPC Support Library per EMM include classi di utilità e helper che semplificano il provisioning e la gestione dei dispositivi Android in un ambiente aziendale. La libreria consente di sfruttare importanti funzionalità delle app DPC (controller criteri dispositivi):

  • Supporto per il 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 gli aggiornamenti futuri del processo di provisioning degli account Google Play gestiti. Per maggiori dettagli, consulta Assistenza per il provisioning degli account Google Play gestiti.
  • Supporto per le 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 sul tuo DPC. La libreria di assistenza DPC ti consente di delegare a Google Play l'attività di applicazione delle configurazioni gestite (in precedenza limitazioni delle app) come impostato dall'amministratore tramite la tua console EMM. L'utilizzo dell'API Play EMM per gestire le configurazioni gestite consente di applicare la configurazione dell'app a livello atomico durante l'installazione. Consulta la pagina relativa all'applicazione di configurazioni gestite alle app di lavoro per ulteriori informazioni su come abilitare questa funzionalità nel DPC (controller criteri dispositivi).

Segui questi passaggi per scaricare la raccolta. Per le attività descritte in questa guida si intende utilizzare la DPC Support Library.

Scarica la DPC Support Library

Per utilizzare la libreria di supporto DPC, scaricala dalla community dei provider EMM di Android Enterprise. Devi aggiungere la libreria al file build.gradle e occuparti di altre dipendenze quando crei la tua app DPC. Ad esempio, la libreria richiede la libreria client di autenticazione di Google Play Services 11.4.0.

  1. Aggiungi la raccolta al file build.gradle:

    trendy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Aggiungi la libreria client di autenticazione di Google Play Services 11.4.0 al file build.gradle:

    trendy

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Kotlin

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    

L'esecuzione della libreria richiede determinate autorizzazioni, perciò devi aggiungere queste autorizzazioni al file manifest dell'app DPC quando carichi l'app su Google Play:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.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 (controller criteri dispositivi)

Crea il tuo DPC sul modello esistente utilizzato per le applicazioni di amministrazione del dispositivo. In particolare, l'app deve sottoclasse 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, consulta BasicManagedProfile su GitHub.

Per creare un profilo di lavoro su un dispositivo su cui è già presente un profilo personale, verifica innanzitutto se il dispositivo può supportarlo verificando 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, creane uno inviando un intent con un'azione ACTION_PROVISION_MANAGED_PROFILE. In alcuni documenti, profilo gestito è un termine generico che equivale a profilo di lavoro nel contesto di Android nell'azienda. Includi come extra il nome del pacchetto di amministrazione del dispositivo:

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 intento:

  • 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 obbligatorie dal profilo di lavoro.
  • Copia l'app DPC nel profilo di lavoro e imposta quest'ultima come proprietario del profilo.

Esegui l'override di onActivityResult() per vedere se il provisioning è riuscito:

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);
    }
}

Completa l'attivazione del profilo di lavoro

Dopo aver eseguito il provisioning del profilo, 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 callback DeviceAdminReceiver.onProfileProvisioningComplete() prevede quanto segue:

Attiva il profilo di lavoro

Una volta completate queste attività, chiama il metodo setProfileEnabled() di gestore dei criteri dei dispositivi 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 relativi ai dispositivi impostati da un amministratore per soddisfare i requisiti e i vincoli di un'organizzazione. Ad esempio, il criterio di sicurezza potrebbe richiedere il blocco dei dispositivi dopo un determinato numero di tentativi di inserimento della password non riusciti. Il DPC interroga la console EMM per conoscere i criteri correnti, quindi li applica utilizzando l'API Device Administration.

Per informazioni su come applicare i criteri relativi ai dispositivi, consulta le norme.

Applica configurazioni gestite alle app di lavoro

Le configurazioni gestite consentono di offrire ai clienti la possibilità di preconfigurare le app che hanno approvato per il deployment e di aggiornarle facilmente quando la configurazione deve cambiare. La configurazione di un'app prima del deployment garantisce che i criteri di sicurezza e altri criteri dell'organizzazione vengano soddisfatti 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 di configurazioni gestite) che accompagna l'app al momento del caricamento su Google Play (per i dettagli, gli sviluppatori di app consultano Configurare le configurazioni gestite).

Puoi recuperare questo schema dall'app da mostrare agli amministratori dei clienti nella console EMM, fornire una UI in cui vengono visualizzate le varie opzioni definite nello schema e consentire agli amministratori di preconfigurare le impostazioni dell'app. La configurazione gestita risultante dall'amministratore viene in genere archiviata sul server EMM, che utilizza poi l'API EMM di Play per impostare Configurazioni gestite per dispositivo o configurazioni gestite per utente. Per i dettagli, consulta Configurazioni gestite tramite Play.

Le configurazioni gestite possono essere applicate all'app utilizzando l'API EMM di Play (approccio consigliato) o direttamente dalla DPC (come descritta nella sezione Applicare le configurazioni gestite direttamente dalla DPC). L'utilizzo dell'API EMM di Play presenta diversi vantaggi, tra cui una facile implementazione perché puoi utilizzare la DPC Support Library per semplificare le attività DPC. Inoltre, l'API EMM di Play:

  • Imposta la configurazione in modo atomico quando viene installata una nuova app, in modo che l'app sia pronta la prima volta che l'utente la lancia.
  • Consente di gestire le configurazioni per singolo utente, in modo da non monitorare il provisioning in base al dispositivo.

Applica le configurazioni gestite utilizzando l'API EMM di Google Play

Per utilizzare l'API EMM di Play per le configurazioni gestite, il DPC deve consentire a Google Play di impostare le configurazioni. La DPC Support Library si occupa di questo compito eseguendo il proxy della configurazione inviata da Google Play.

Per utilizzare l'API Play EMM, scarica la DPC Support Library, quindi 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 di configurazioni gestite. In questo esempio, "admin" è il valore ComponenteName di DeviceAdminRicevir.

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 EMM di Google Play nella console e nel server EMM per applicare configurazioni gestite alle app approvate, invece di programmare queste attività direttamente nel DPC. Per i dettagli, consulta Configurazioni gestite tramite Play.

Applica le configurazioni gestite direttamente dal DPC (controller criteri dispositivi)

Per modificare le impostazioni di configurazione di un'app direttamente dal DPC, chiama il metodo DevicePolicyManager.setApplicationRestrictions() e passa i parametri per DeviceAdminReachr dell'app DPC, il nome del pacchetto dell'app di destinazione e il Bundle che comprende la configurazione gestita dell'app come impostata dall'amministratore. Per maggiori dettagli, consulta Modalità di interazione tra DPC e console EMM e Configurare configurazioni gestite. Tuttavia, tieni presente che questo approccio alternativo all'applicazione di configurazioni gestite non è consigliato nei deployment degli account Google Play gestiti.

Assistenza per il provisioning dell'account della versione gestita di Google Play

La DPC Support Library include il supporto per il provisioning degli account Google Play gestiti. Per utilizzare questo tipo di assistenza, devi prima inizializzare la libreria, quindi puoi garantire l'ambiente di lavoro e aggiungere un account della versione gestita di Google Play.

Inizializza il supporto per gli account Google Play gestiti nel tuo DPC (controller criteri dispositivi)

Importa questo corso nel tuo DPC:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Inizializzare 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);

Assicurati che l'ambiente di lavoro per gli account della versione gestita di Google Play

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 della versione gestita di Google Play chiamando:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Il callback segnala se la procedura è riuscita o meno. Quando il callback viene ripristinato, è possibile aggiungere un account Google Play gestito. Se il callback segnala un errore, chiedi all'utente di verificare che il dispositivo disponga di una connessione di rete (ad esempio, se il download non va a buon fine). In altri casi, segnala il mancato funzionamento 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 della versione gestita di Google Play

L'elemento 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 di seguito) dalla DPC Support Library. La funzione gestisce il token restituito dal server di Google Play e facilita il provisioning dell'account Google Play gestito. La funzione restituisce quando l'account della versione gestita di Google Play è in uno stato valido:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token: il token di autenticazione dell'utente generato dalla chiamata Users.generateAuthenticationToken() dell'API EMM di Google Play.
  • accountAddedCallback: restituisce l'account della versione gestita di Google Play aggiunto correttamente al dispositivo. Questo callback deve includere i metodi onAccountReady() e onFailure().

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).
        }
};
  • Per scoprire di più sull'API Device Administration, consulta Amministrazione dispositivo.
  • Per informazioni sui metodi di provisioning di Android Enterprise, consulta la sezione Provisioning dei dispositivi nella guida per gli sviluppatori di Android Enterprise.
  • Per un esempio GitHub che illustra come creare un profilo di lavoro di base, vedi BasicManagedProfile.
  • Per un esempio di GitHub che mostra come impostare le configurazioni su altre app come proprietario del profilo, consulta AppRestrictionEnforcer.