Creare un controller dei criteri dei dispositivi

Questa guida descrive come sviluppare un controller dei criteri dei dispositivi (DPC) per in un'implementazione di Android Enterprise. Un'app DPC, precedentemente nota in qualità di controller delle norme di lavoro, controlla i criteri locali relativi ai dispositivi e applicazioni sui dispositivi.

Informazioni sui DPC (controller criteri dispositivi)

In un'implementazione di Android Enterprise, un'azienda mantiene il controllo i vari aspetti dei dispositivi degli utenti, come l'isolamento per i profili di lavoro le informazioni dagli utenti dati personali, preconfigurando le app approvate 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 nelle in combinazione con la console EMM e o server web. Il tuo cliente implementa il DPC sui dispositivi utente che gestisce. Il DPC funge da collegamento tra la console EMM (e il server) e il dispositivo. Un amministratore utilizza la console EMM per eseguire una serie di attività, tra cui: 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 relative al lavoro e le tiene separate utente app e dati personali. Prima di creare il profilo di lavoro, il DPC può anche eseguire il provisioning di un account Google Play gestito da usare sul dispositivo.

Questa guida mostra come sviluppare un DPC che possa creare e gestire i profili di lavoro.

Libreria di supporto 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'azienda completamente gestito di Google Cloud. La libreria ti consente di sfruttare funzioni importanti nel tuo App DPC:

  • Assistenza per il provisioning degli account Google Play gestiti: Provisioning gestito Gli account Google Play dell'app DPC richiedono che Google Play e Google Le app di Play Services soddisfano i requisiti di versione minimi. Tuttavia, l'aggiornamento di questi possono essere complesse. La libreria di supporto DPC si occupa di aggiornare questi di Google Cloud, oltre a garantire la compatibilità con gli aggiornamenti futuri alla versione Procedura di provisioning degli account Google Play. Visualizza gli account della versione gestita di Google Play il provisioning dell'assistenza per maggiori dettagli.
  • Supporto delle configurazioni gestite: L'utilizzo dell'API Play EMM per gestire le configurazioni gestite per le app approvate è la è il modo più semplice per implementare le configurazioni gestite nel DPC. L'assistenza DPC (controller criteri dispositivi) La raccolta ti consente di delegare a Google Play l'attività di applicazione delle (in precedenza limitazioni delle app) impostate dall'amministratore che utilizza la soluzione EMM Google Cloud. L'utilizzo dell'API Play EMM per gestire le configurazioni gestite consente la configurazione dell'app da applicare atomicamente durante l'installazione. Consulta Applicare configurazioni gestite app di lavoro per ulteriori informazioni su come abilitare questa funzionalità nelle il tuo DPC (controller criteri dispositivi).

Per scaricare la raccolta, procedi nel seguente modo. Le attività descritte in questa guida presuppone l'uso della libreria di supporto DPC (controller criteri dispositivi).

Scarica la libreria di assistenza DPC (controller criteri dispositivi)

Per utilizzare la libreria di supporto DPC (controller criteri dispositivi), scaricala dalla community dei provider EMM di Android Enterprise. Devi aggiungere la libreria al file build.gradle e gestire le altre quando crei l'app DPC (controller criteri dispositivi). Ad esempio, la libreria richiede la versione 11.4.0 libreria client di autenticazione di Google Play Services.

  1. Aggiungi la raccolta al file build.gradle:

    Alla moda

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

    Kotlin

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

    Alla moda

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

    Kotlin

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

L'esecuzione della libreria richiede determinate autorizzazioni, quindi devi aggiungerle a il file manifest dell'app DPC (controller criteri dispositivi) quando la carichi 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à specifica della libreria nel codice DPC, a seconda la funzionalità che vuoi implementare. I dettagli sono inclusi nel relativo sezioni seguenti.

Crea un DPC (controller criteri dispositivi)

Crea il tuo DPC sul modello esistente utilizzato per le applicazioni di amministrazione dei dispositivi. Nello specifico, la tua app deve avere la sottoclasse DeviceAdminReceiver (una classe del gruppo android.app.admin ) come descritto in . Amministrazione del dispositivo.

Crea un profilo di lavoro

Per un esempio che dimostra come creare un profilo di lavoro di base, consulta BasicManagedProfile su GitHub.

Per creare un profilo di lavoro su un dispositivo che ha già un profilo personale: scopri innanzitutto se il dispositivo è in grado di supportare un profilo di lavoro, controllando la presenza del dell'esistenza Funzionalità di sistema di 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 ACTION_PROVISION_MANAGED_PROFILE un'azione. In alcune documentazioni, il profilo gestito è un termine generico che indica la stessa cosa di profilo di lavoro nel contesto di Android nelle aziende.) 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 intento:

  • Verifica che il dispositivo sia criptato. In caso contrario, il sistema richiede all'utente di crittografare 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 il proprietario del profilo.

Esegui l'override di onActivityResult() in controlla 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

Una volta eseguito il provisioning del profilo, il sistema chiama il DPC (controller criteri dispositivi) il metodo DeviceAdminReceiver.onProfileProvisioningComplete() dell'app. Esegui override questo metodo di callback per completare l'attivazione del profilo di lavoro.

Un tipico DeviceAdminReceiver.onProfileProvisioningComplete() l'implementazione del callback:

Attiva il profilo di lavoro

Una volta completate queste attività, chiama il gestore delle norme relative ai dispositivi Metodo setProfileEnabled() 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 dell'organizzazione. Ad esempio, il criterio di sicurezza richiede che il dispositivo si blocchi 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'app Dispositivo l'API di amministrazione.

Per informazioni su come applicare i criteri relativi ai dispositivi, vedi Norme.

Applica configurazioni gestite alle app di lavoro

Le configurazioni gestite ti consentono di offrire ai clienti la possibilità di preconfigurare le app approvate per l'implementazione e aggiornarle alle app quando è necessario modificare la configurazione. Configurare un'app prima di il deployment garantisce che siano soddisfatti i criteri di sicurezza e altri criteri dell'organizzazione al momento dell'installazione dell'app sul dispositivo di destinazione.

Le funzionalità dell'app vengono definite dallo sviluppatore in uno schema XML (i schema di configurazioni gestite) che accompagna l'app al momento del caricamento su Google Google Play (gli sviluppatori di app possono consultare l'articolo Configurare le configurazioni gestite per maggiori dettagli).

Puoi recuperare questo schema dall'app per mostrarlo agli amministratori dei clienti nella console EMM, fornire una UI in cui siano presenti le varie opzioni definite visualizzazione dello schema e consentire agli amministratori di preconfigurare le impostazioni dell'app. La configurazione gestita risultante impostata dall'amministratore è in genere memorizzati sul server EMM, che a sua volta utilizza API EMM di Play da impostare Configurazioni gestiteper il dispositivo o Configurazioni gestite per l'utente. Consulta Configurazioni gestite tramite Google 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). Con l'API EMM di Play presenta diversi vantaggi, tra cui una facile implementazione grazie alla possibilità di utilizzare Libreria di supporto DPC per semplificare le attività del DPC (controller criteri dispositivi). Inoltre, l'API Play EMM:

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

Applica le configurazioni gestite utilizzando API EMM di Play

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

Per utilizzare Google Play API EMM, scarica la libreria di supporto DPC e poi abilitare il supporto delle configurazioni gestite nel DPC.

Attiva il supporto delle configurazioni gestite in il tuo DPC (controller criteri dispositivi)

Importa questo corso nel DPC:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Inizializzare la libreria di configurazioni gestite. In questo esempio, "admin" sono il valore ComponentName di DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Abilita configurazioni gestite:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Con questa libreria inizializzata nel DPC, è possibile utilizzare L'API EMM di Google Play nel tuo provider EMM console e server per applicare le configurazioni gestite alle app approvate, anziché programmare queste attività direttamente nel DPC. Consulta Configurazioni gestite tramite Play per maggiori dettagli.

Applica 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 passare i parametri per il set di dati dell'app DeviceAdminReceiver: nome pacchetto dell'app di destinazione. e il set che comprende la configurazione gestita dell'app come impostata dall'amministratore. Consulta Come vengono DPC ed EMM interagiscono con la console e per configurare le configurazioni gestite per maggiori dettagli. Tuttavia, da notare che questo approccio alternativo all'applicazione delle norme non sono consigliate nelle implementazioni degli account Google Play gestiti.

Provisioning degli account della versione gestita di Google Play assistenza

La libreria di supporto DPC include supporto del provisioning gli account della versione gestita di Google Play. Per utilizzare questo supporto, devi prima inizializzare la classe e poi puoi Assicurare che il ambiente di lavoro e aggiungi un nella versione gestita di Google Play.

Inizializzare gli account della versione gestita di Google Play nel tuo DPC (controller criteri dispositivi)

Importa questo corso nel 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 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 di un dispositivo modalità proprietario (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 l'esito positivo o negativo di questo processo. Quando viene richiamato resi correttamente, è possibile aggiungere un account della versione gestita di Google Play. Se il callback segnala un errore, chiedi all'utente di verificare che dispositivo dispone di una connessione di rete (ad esempio, se il download non va a buon fine). In altre casi, segnalare 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)
    }
}

Aggiungi un account Google Play gestito

AccountManager del framework Android possono aggiungere un account della versione gestita di Google Play a un dispositivo. Per semplificare l'interazione con AccountManager, usa la funzione helper (mostrata nell'esempio di seguito) dalla libreria di supporto DPC. La funzione gestisce il token restituito dal server di Google Play e facilita il provisioning l'account della versione gestita di Google Play. La funzione restituisce quando la versione gestita di Google Play L'account è in uno stato valido:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token: il token di autenticazione utente generato dall'account Google Chiamata Users.generateAuthenticationToken() API EMM di Play.
  • accountAddedCallback: restituisce l'account Google Play gestito aggiunta al dispositivo. Questo callback deve includere onAccountReady() e onFailure() metodi.

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 ulteriori informazioni sull'API di amministrazione dei dispositivi, consulta Dispositivo Amministrazione.
  • Per scoprire di più sui metodi di provisioning di Android Enterprise, vedi Esegui il provisioning dei dispositivi nel Guida per gli sviluppatori di Android Enterprise.
  • Per un esempio GitHub che dimostra come creare un profilo di lavoro di base, consulta BasicManagedProfile.
  • Per un esempio GitHub che dimostra come impostare le configurazioni su altre app come proprietario del profilo, consulta AppRestrictionEnforcer.