Ce guide explique comment développer un contrôleur de règles relatives aux appareils (DPC) pour les appareils dans un déploiement Android Enterprise. Une application DPC, anciennement appelée contrôleur de règles professionnelles, contrôle les règles relatives aux appareils locaux et les applications système sur les appareils.
À propos des DPC
Dans un déploiement Android Enterprise, une entreprise conserve le contrôle sur différents aspects des appareils des utilisateurs, comme l'isolement des informations liées au travail des données personnelles des utilisateurs, la préconfiguration des applications approuvées pour l'environnement ou la désactivation des fonctionnalités de l'appareil (par exemple, l'appareil photo).
En tant qu'EMM, vous développez une application DPC que vos clients peuvent utiliser avec votre console EMM et votre serveur. Votre client déploie le DPC sur les appareils utilisateur qu'il gère. Le DPC sert de passerelle entre votre console (et serveur) EMM et l'appareil. Un administrateur utilise la console EMM pour effectuer diverses tâches, y compris la configuration des paramètres et des applications de l'appareil.
Le DPC crée et gère le profil professionnel sur l'appareil sur lequel il est installé. Le profil professionnel chiffre les informations professionnelles et les sépare des applications et données personnelles des utilisateurs. Avant de créer le profil professionnel, le DPC peut également provisionner un compte Google Play géré à utiliser sur l'appareil.
Ce guide vous explique comment développer un DPC capable de créer et de gérer des profils professionnels.
Bibliothèque Support DPC pour les EMM
La bibliothèque DPC Support pour les EMM comprend des classes utilitaires et d'assistance qui facilitent le provisionnement et la gestion des appareils Android dans un environnement d'entreprise. La bibliothèque vous permet de profiter de fonctionnalités importantes dans vos applications DPC :
- Prise en charge du provisionnement des comptes Google Play d'entreprise : le provisionnement des comptes Google Play d'entreprise à partir de l'application DPC nécessite que les applications Google Play et Services Google Play répondent à des exigences minimales en termes de version. Toutefois, la mise à jour de ces applications peut être complexe. La bibliothèque DPC Support se charge de la mise à jour de ces applications et assure également la compatibilité avec les futures mises à jour du processus de provisionnement des comptes Google Play gérés. Pour en savoir plus, consultez Assistance pour le provisionnement des comptes Google Play gérés.
- Compatibilité avec les configurations gérées : L'utilisation de l'API Play EMM pour gérer les configurations gérées des applications approuvées est le moyen le plus simple d'implémenter des configurations gérées sur votre DPC. La bibliothèque DPC Support vous permet de déléguer à Google Play la tâche d'appliquer les configurations gérées (anciennement appelées "restrictions d'application") définies par l'administrateur à l'aide de votre console EMM. L'utilisation de l'API Play EMM pour gérer les configurations gérées permet d'appliquer la configuration de l'application de manière atomique lors de l'installation. Pour savoir comment activer cette fonctionnalité dans votre DPC, consultez Appliquer des configurations gérées aux applications professionnelles.
Suivez les étapes ci-dessous pour télécharger la bibliothèque. Les tâches décrites dans ce guide supposent l'utilisation de la bibliothèque d'assistance DPC.
Télécharger la bibliothèque d'assistance DPC
Pour utiliser la bibliothèque DPC Support, téléchargez-la depuis la communauté des fournisseurs EMM Android Enterprise. Vous devez ajouter la bibliothèque à votre fichier build.gradle et gérer les autres dépendances lorsque vous compilez votre application DPC. Par exemple, la bibliothèque nécessite la bibliothèque cliente d'authentification des services Google Play 11.4.0.
- Ajoutez la bibliothèque au fichier
build.gradle:
Groovy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- Ajoutez la
bibliothèque cliente d'authentification des services Google Play 11.4.0 au fichier 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")
La bibliothèque nécessite certaines autorisations pour s'exécuter. Vous devez donc les ajouter au fichier manifeste de votre application DPC lorsque vous l'importez sur 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"/>
En plus de ces étapes préliminaires de configuration et de déploiement, vous devez également initialiser la fonctionnalité de bibliothèque spécifique dans votre code DPC, en fonction de la fonctionnalité que vous souhaitez implémenter. Vous trouverez les détails dans les sections correspondantes ci-dessous.
Créer un DPC
Créez votre DPC sur le modèle existant utilisé pour les applications d'administration des appareils.
Plus précisément, votre application doit créer une sous-classe
DeviceAdminReceiver (classe du package android.app.admin), comme décrit dans
Administration des appareils.
Créer un profil professionnel
Pour obtenir un exemple montrant comment créer un profil professionnel de base, consultez BasicManagedProfile sur GitHub.
Pour créer un profil professionnel sur un appareil qui possède déjà un profil personnel, vérifiez d'abord si l'appareil est compatible avec un profil professionnel en recherchant la fonctionnalité système 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! }
Si l'appareil est compatible avec les profils professionnels, créez-en un en envoyant un intent avec une action ACTION_PROVISION_MANAGED_PROFILE. (Dans certaines documentations, le terme profil géré est un terme générique qui signifie la même chose que profil professionnel dans le contexte d'Android Enterprise.) Incluez le nom du package d'administrateur de l'appareil en tant qu'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(); }
Le système répond à cette intention en procédant comme suit :
- Vérifie que l'appareil est chiffré. Si ce n'est pas le cas, le système invite l'utilisateur à chiffrer l'appareil avant de continuer.
- Crée un profil professionnel.
- Supprime les applications non requises du profil professionnel.
- Copie l'application DPC dans le profil professionnel et définit le DPC lui-même comme propriétaire du profil.
Remplacez
onActivityResult() pour voir si le provisionnement a réussi :
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); } }
Terminer l'activation du profil professionnel
Une fois le profil provisionné, le système appelle la méthode
DeviceAdminReceiver.onProfileProvisioningComplete() de l'application DPC. Remplacez cette méthode de rappel pour terminer l'activation du profil professionnel.
Une implémentation de rappel DeviceAdminReceiver.onProfileProvisioningComplete() type effectue les opérations suivantes :
- Vérifie que l'appareil respecte les règles relatives aux appareils de l'EMM, comme décrit dans Configurer les règles relatives aux appareils.
- Active les applications système que l'administrateur a rendues disponibles dans le profil professionnel à l'aide de
DevicePolicyManager.enableSystemApp(). - Si l'appareil utilise Google Play d'entreprise, ajoutez le compte approprié au profil professionnel afin que les applications approuvées puissent être installées sur l'appareil.
- Comptes Google Play d'entreprise : pour en savoir plus, consultez Assurer l'environnement de travail pour les comptes Google Play d'entreprise et Ajouter un compte Google Play d'entreprise.
- Comptes Google : utilisez
AccountManager.addAccount().
Activer le profil professionnel
Une fois ces tâches terminées, appelez la méthode
setProfileEnabled() du gestionnaire de règles relatives aux appareils pour activer le profil professionnel :
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);
Configurer des règles relatives aux appareils
L'application DPC applique les règles relatives aux appareils définies par un administrateur pour répondre aux exigences et aux contraintes d'une organisation. Par exemple, une règle de sécurité peut exiger que les appareils se verrouillent après un certain nombre de tentatives de saisie du mot de passe infructueuses. Le DPC interroge la console EMM pour connaître les règles actuelles, puis les applique à l'aide de l'API Device Administration.
Pour savoir comment appliquer des règles relatives aux appareils, consultez Règles.
Appliquer des configurations gérées aux applications professionnelles
Les configurations gérées vous permettent de donner à vos clients la possibilité de préconfigurer les applications qu'ils ont approuvées pour le déploiement et de les mettre à jour facilement lorsque la configuration doit être modifiée. La configuration d'une application avant son déploiement permet de s'assurer que les règles de sécurité et autres règles de l'organisation sont respectées lors de l'installation de l'application sur l'appareil cible.
Les fonctionnalités de l'application sont définies par le développeur de l'application dans un schéma XML (le schéma des configurations gérées) qui accompagne l'application lors de son importation sur Google Play (pour les développeurs d'applications, consultez Configurer les configurations gérées pour en savoir plus).
Vous récupérez ce schéma à partir de l'application pour l'afficher à vos administrateurs clients dans votre console EMM, fournissez une UI dans laquelle les différentes options définies dans le schéma s'affichent et permettez aux administrateurs de préconfigurer les paramètres de l'application. L'ensemble de configurations gérées défini par l'administrateur est généralement stocké sur le serveur EMM, qui utilise ensuite l'API Play EMM pour définir Managedconfigurationsfordevice ou Managedconfigurationsforuser. Pour en savoir plus, consultez Configurations gérées via Play.
Les configurations gérées peuvent être appliquées à l'application à l'aide de l'API Play EMM (approche recommandée) ou directement à partir du DPC (décrit dans Appliquer des configurations gérées directement à partir du DPC). L'utilisation de l'API Play EMM présente plusieurs avantages, y compris une implémentation facile, car vous pouvez utiliser la bibliothèque d'assistance DPC pour simplifier les tâches DPC. De plus, l'API Play EMM :
- Définit la configuration de manière atomique lorsqu'une nouvelle application est installée, ce qui garantit que l'application est prête la première fois que l'utilisateur la lance.
- Vous permet de gérer les configurations par utilisateur, ce qui vous évite de provisionner la surveillance par appareil.
Appliquer des configurations gérées à l'aide de l'API Play EMM
Pour utiliser l'API Play EMM pour les configurations gérées, le DPC doit autoriser Google Play à définir des configurations. La bibliothèque d'assistance DPC s'en charge pour vous en transmettant la configuration envoyée par Google Play.
Pour utiliser l'API Play EMM, téléchargez la bibliothèque d'assistance DPC, puis activez la compatibilité avec les configurations gérées dans votre DPC.
Activer la prise en charge des configurations gérées dans votre DPC
Importez cette classe dans votre DPC :
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
Initialisez la bibliothèque de configurations gérées. Dans cet exemple, "admin" est le ComponentName de DeviceAdminReceiver.
Kotlin
var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)
Java
ManagedConfigurationsSupport managedConfigurationsSupport = new ManagedConfigurationsSupport(context, admin);
Activez les configurations gérées :
Kotlin
managedConfigurationsSupport.enableManagedConfigurations()
Java
managedConfigurationsSupport.enableManagedConfigurations();
Une fois cette bibliothèque initialisée dans votre DPC, vous pouvez utiliser l'API Google Play EMM dans votre console et votre serveur EMM pour appliquer des configurations gérées aux applications approuvées, au lieu de coder ces tâches directement dans le DPC. Pour en savoir plus, consultez Configurations gérées via Play.
Appliquer des configurations gérées directement à partir du DPC
Pour modifier les paramètres de configuration d'une application directement depuis le DPC, appelez la méthode DevicePolicyManager.setApplicationRestrictions() et transmettez les paramètres du DeviceAdminReceiver de l'application DPC, le nom du package de l'application cible et le Bundle comprenant la configuration gérée de l'application telle que définie par l'administrateur. Pour en savoir plus, consultez Interaction entre votre DPC et la console EMM et Configurer des configurations gérées. Toutefois, notez que cette autre approche pour appliquer des configurations gérées n'est pas recommandée dans les déploiements de comptes Google Play d'entreprise.
Assistance pour le provisionnement de comptes Google Play d'entreprise
La bibliothèque d'assistance DPC inclut la prise en charge du provisionnement des comptes Google Play gérés. Pour utiliser cette assistance, vous devez d'abord initialiser la bibliothèque. Vous pourrez ensuite assurer le bon fonctionnement de l'environnement et ajouter un compte Google Play géré.
Initialiser la prise en charge des comptes Google Play d'entreprise dans votre DPC
Importez cette classe dans votre DPC :
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
Initialisez la bibliothèque de compatibilité du provisionnement. Dans cet exemple, "admin" est le ComponentName de
DeviceAdminReceiver.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Assurer l'environnement de travail pour les comptes Google Play gérés
Une fois que le DPC a provisionné un appareil en mode propriétaire du profil (ACTION_PROVISION_MANAGED_PROFILE) ou en mode propriétaire de l'appareil (ACTION_PROVISION_MANAGED_DEVICE), assurez-vous que l'appareil est compatible avec les comptes Google gérés en appelant :
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Le rappel indique si ce processus a réussi ou échoué. Lorsqu'un rappel renvoie un résultat positif, un compte Google Play d'entreprise peut être ajouté. Si le rappel signale une erreur, invitez l'utilisateur à s'assurer que l'appareil est connecté à un réseau (par exemple, si le téléchargement échoue). Dans les autres cas, signalez l'échec à 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) } }
Ajouter un compte Google Play d'entreprise
Le framework Android AccountManager peut ajouter un compte Google Play d'entreprise à un appareil. Pour simplifier l'interaction avec AccountManager, utilisez la fonction d'assistance (indiquée dans l'exemple ci-dessous) de la bibliothèque Support DPC. La fonction gère le jeton renvoyé par le serveur Google Play et facilite le provisionnement du compte Google Play d'entreprise. La fonction renvoie la valeur lorsque le compte Google Play d'entreprise est dans un état valide :
Kotlin
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
Java
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
token: jeton d'authentification de l'utilisateur généré par l'appelUsers.generateAuthenticationToken()de l'API EMM Google Play.accountAddedCallback: renvoie le compte Google Play géré qui a été ajouté à l'appareil. Ce rappel doit inclure les méthodesonAccountReady()etonFailure().
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). } };
Documentation associée
- Pour en savoir plus sur l'API Device Administration, consultez Device Administration.
- Pour en savoir plus sur les méthodes de provisionnement Android Enterprise, consultez Provisionner des appareils dans le guide du développeur Android Enterprise.
- Pour obtenir un exemple GitHub montrant comment créer un profil professionnel de base, consultez BasicManagedProfile.
- Pour obtenir un exemple GitHub montrant comment définir des configurations sur d'autres applications en tant que propriétaire du profil, consultez AppRestrictionEnforcer.