Ce guide explique comment développer un outil de contrôle des règles relatives aux appareils (DPC) pour les appareils déployés dans le cadre d'un déploiement d'entreprise Android. Une application DPC, auparavant appelée outil de contrôle de règles professionnelles, contrôle les règles locales relatives aux appareils et les applications système sur les appareils.
À propos des DPC
Dans un déploiement d'entreprise Android, une entreprise conserve le contrôle de divers aspects des appareils des utilisateurs, comme isoler les informations professionnelles des données à caractère personnel des utilisateurs, préconfigurer des applications approuvées pour l'environnement ou désactiver les fonctionnalités de l'appareil (par exemple, l'appareil photo).
En tant qu'EMM, vous développez une application DPC pouvant être utilisée par vos clients conjointement avec votre console EMM et votre serveur. Votre client déploie l'outil de contrôle des règles relatives aux appareils sur les appareils des utilisateurs qu'il gère. Le DPC fait le lien entre votre console EMM (et votre serveur) et l'appareil. Un administrateur utilise la console EMM pour effectuer diverses tâches, y compris la configuration des paramètres et des applications d'un appareil.
L'outil 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 d'entreprise à utiliser sur l'appareil.
Ce guide vous explique comment développer une application de contrôle des règles relatives aux appareils capable de créer et de gérer des profils professionnels.
Bibliothèque de support DPC pour les EMM
La bibliothèque Support DPC pour les EMM comprend des classes d'utilitaires et d'assistance qui facilitent le provisionnement et la gestion des appareils Android dans un environnement d'entreprise. Cette bibliothèque vous permet de profiter de fonctionnalités importantes dans vos applications DPC:
- Compatibilité avec le provisionnement des comptes Google Play gérés : pour provisionner des comptes Google Play gérés à partir de l'application DPC, Google Play et les applications des services Google Play doivent disposer de la version minimale requise. Cependant, la mise à jour de ces applications peut être complexe. La bibliothèque Support DPC se charge de mettre à jour ces applications et garantit également la compatibilité avec les futures mises à jour du processus de provisionnement des comptes Google Play gérés. Pour en savoir plus, consultez la page Assistance pour le provisionnement des comptes Google Play gérés.
- Compatibilité avec les configurations gérées : l'utilisation de l'API EMM Play pour gérer les configurations gérées pour les 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 restrictions des applications) définies par l'administrateur à l'aide de votre console EMM. L'utilisation de l'API EMM Play pour gérer les configurations gérées permet d'appliquer la configuration de l'application de manière atomique lors de l'installation. Consultez la section Appliquer les configurations gérées aux applications professionnelles pour en savoir plus sur l'activation de cette fonctionnalité dans votre application de contrôle des règles relatives aux appareils.
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 Support DPC.
Télécharger la bibliothèque Support DPC
Pour utiliser la bibliothèque Support DPC, téléchargez-la depuis la communauté des fournisseurs EMM Android Enterprise. Vous devez ajouter la bibliothèque à votre fichier build.gradle et vous occuper des 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. 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. Pour en savoir plus, consultez les sections correspondantes ci-dessous.
Créer un DPC
Créez votre DPC sur le modèle existant utilisé pour les applications d'administration d'appareils.
Plus précisément, votre application doit sous-classer
DeviceAdminReceiver
(une classe du package android.app.admin
) comme décrit dans la section
Administration des appareils.
Créer un profil professionnel
Pour obtenir un exemple montrant comment créer un profil professionnel de base, consultez la section BasicManagedProfile sur GitHub.
Pour créer un profil professionnel sur un appareil disposant déjà d'un profil personnel, commencez par vérifier si l'appareil est compatible avec un profil professionnel en vérifiant l'existence de 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 un profil professionnel en envoyant un intent avec une action ACTION_PROVISION_MANAGED_PROFILE. (Dans certaines documentations, le terme général profil géré a la même signification que profil professionnel dans le contexte d'Android en entreprise.) Incluez le nom du package d'administration de l'appareil en tant qu'élément supplémentaire:
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 à cet intent 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.
- Il copie l'application DPC dans le profil professionnel et le définit en tant que propriétaire du profil.
Ignorez
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()
typique 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 des 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, ajoute 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 Vérifier 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 infructueuses de saisie du mot de passe. L'outil DPC interroge la console EMM pour connaître les stratégies actuelles, puis les applique à l'aide de l'API Device Administration (Administration des appareils).
Pour en savoir plus sur l'application des règles relatives aux appareils, consultez la section Règles.
Appliquer des configurations gérées aux applications professionnelles
Les configurations gérées vous permettent d'offrir à vos clients la possibilité de préconfigurer les applications dont ils ont approuvé le déploiement et de mettre à jour facilement ces applications lorsque la configuration doit changer. Lorsque vous configurez une application avant son déploiement, vous vous assurez que les règles de sécurité de l'organisation et les autres règles 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 (schéma des configurations gérées) qui accompagne l'application lors de son importation sur Google Play. Les développeurs d'applications peuvent consulter la page Configurer des configurations gérées pour en savoir plus.
Vous allez récupérer ce schéma depuis l'application à afficher pour les administrateurs de votre client dans votre console EMM, fournir une interface utilisateur dans laquelle les différentes options définies dans le schéma s'affichent et permettre aux administrateurs de préconfigurer les paramètres de l'application. La configuration gérée résultante définie par l'administrateur est généralement stockée sur le serveur EMM, qui utilise ensuite l'API EMM Play pour définir Managedconfigurationsfordevice ou Managedconfigurationsforuser. Pour en savoir plus, consultez la section Configurations gérées via Play.
Les configurations gérées peuvent être appliquées à l'application à l'aide de l'API EMM Play (approche recommandée) ou directement depuis le DPC (comme décrit dans la section Appliquer des configurations gérées directement à partir du DPC). L'utilisation de l'API EMM Play présente plusieurs avantages, y compris une implémentation facile, car la bibliothèque de support DPC permet de simplifier les tâches DPC. De plus, l'API EMM Play:
- Définit la configuration de manière atomique lorsqu'une nouvelle application est installée, afin de s'assurer que l'application est prête la première fois que l'utilisateur la lance.
- Permet de gérer les configurations par utilisateur, ce qui vous évite de surveiller le provisionnement de chaque appareil.
Appliquez des configurations gérées à l'aide de l'API Play EMM.
Pour utiliser l'API EMM Play pour les configurations gérées, l'outil DPC doit autoriser Google Play à définir des configurations. La bibliothèque Support DPC se charge de cette tâche en transmettant par proxy la configuration envoyée par Google Play.
Pour utiliser l'API Play EMM, téléchargez la bibliothèque de support DPC, puis activez la prise en charge des configurations gérées dans votre DPC.
Activez 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 EMM Google Play 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 la DPC. Pour en savoir plus, consultez la section Configurations gérées via Play.
Appliquez des configurations gérées directement depuis le DPC
Pour modifier les paramètres de configuration d'une application directement à partir du DPC, appelez la méthode DevicePolicyManager.setApplicationRestrictions() et transmettez les paramètres pour DeviceAdminReceiver de l'application DPC, le nom de 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 Interactions 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 pour les déploiements de comptes Google Play d'entreprise.
Assistance pour le provisionnement des comptes Google Play d'entreprise
La bibliothèque de support DPC permet de provisionner les comptes Google Play gérés. Pour bénéficier de cette prise en charge, vous devez d'abord initialiser la bibliothèque. Vous pouvez ensuite vérifier que l'environnement de travail est utilisé et ajouter un compte Google Play géré.
Initialisez 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é de provisionnement. Dans cet exemple, "admin" correspond au ComponentName
de
DeviceAdminReceiver
.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Assurez-vous que l'environnement de travail des comptes Google Play d'entreprise
Une fois que l'outil DPC a provisionné un appareil en mode propriétaire de 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 Play d'entreprise en appelant la méthode suivante:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Le rappel signale la réussite ou l'échec de ce processus. Lorsque le rappel est renvoyé, un compte Google Play d'entreprise peut être ajouté. Si le rappel signale une erreur, invitez l'utilisateur à vérifier que l'appareil dispose d'une connexion réseau (par exemple, en cas d'échec du téléchargement). 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 fichier AccountManager
du framework Android permet d'ajouter un compte Google Play d'entreprise à un appareil. Pour simplifier l'interaction avec AccountManager
, utilisez la fonction d'assistance (illustré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 est renvoyée lorsque l'état du compte Google Play d'entreprise est 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 d'entreprise qui a bien é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 Administration des appareils.
- Pour en savoir plus sur les méthodes de provisionnement d'Android Enterprise, consultez la section Provisionner des appareils du guide du développeur Android Enterprise.
- Pour obtenir un exemple GitHub illustrant 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 de profil, consultez AppRestrictionEnforcer.