Cette page présente les nouvelles API, fonctionnalités et modifications de comportement introduites dans Android 8.0 (niveau d'API 26) qui affectent Android dans l'entreprise.
Nouvelles API et fonctionnalités
Nous avons rendu les modes de gestion du propriétaire de profil et du propriétaire de l'appareil plus puissants, plus productifs et plus faciles à provisionner que jamais. Nous avons également mis en place un tout nouveau scénario de déploiement : les profils professionnels sur des appareils entièrement gérés. Ces fonctionnalités et d'autres sont décrites dans les sections suivantes.
Profils professionnels sur des appareils entièrement gérés
Sous Android 8.0, les appareils entièrement gérés peuvent également disposer de profils professionnels. Cela permet aux entreprises de séparer les applications et les règles tout en conservant contrôle et visibilité sur les deux profils. Le propriétaire existant de l'appareil ou un autre outil de contrôle des règles relatives aux appareils (DPC) peut créer le profil géré.
Avec les profils professionnels sur les appareils entièrement gérés, les propriétaires d'appareils peuvent:
- Créez un profil géré sans interaction de l'utilisateur en appelant
EXTRA_PROVISIONING_SKIP_USER_CONSENT
. - Recevez des notifications lorsque des utilisateurs secondaires ou des profils gérés sont créés ou supprimés. Les rappels sont
onUserAdded()
etonUserRemoved()
. - Empêchez les autres DPC de créer des profils gérés à l'aide de
DISALLOW_ADD_MANAGED_PROFILE
. Il s'agit du paramètre par défaut dans Android 8.0 pour les propriétaires d'appareils nouvellement provisionnés ou mis à niveau vers Android 8.0. - Les propriétaires d'appareils peuvent également empêcher les utilisateurs de supprimer des profils gérés existants à l'aide de
DISALLOW_REMOVE_MANAGED_PROFILE
.
Les propriétaires d'appareils et les propriétaires de profils peuvent communiquer entre eux s'ils proviennent du même fichier APK et que les propriétaires sont affiliés (voir Affiliation des utilisateurs ci-dessous).
Pour plus d'informations sur la prise en charge de ce nouveau scénario de déploiement, consultez la page dédiée aux profils professionnels sur les appareils entièrement gérés.
Affiliation des utilisateurs
Lorsque le propriétaire de l'appareil et le propriétaire du profil représentent la même organisation:
Les propriétaires de l'appareil et du profil peuvent communiquer entre eux dans le même fichier APK. Ils peuvent partager des règles ou un état (voir Profils professionnels sur les appareils entièrement gérés ci-dessus).
Les fonctionnalités à l'échelle de l'appareil, telles que la journalisation ou l'ajout du mode tâches de verrouillage à la liste d'autorisation, peuvent s'appliquer aux utilisateurs affiliés.
Les ID d'affiliation associés à un profil ou à un utilisateur permettent d'identifier des organisations. Lorsque les ID d'affiliation correspondent, les utilisateurs deviennent affiliés. Les propriétaires d'appareils et de profils utilisent setAffiliationIds() pour définir leurs ID d'affiliation. Représente des organisations utilisant des ID de chaîne longs et difficiles à deviner.
Nouvel accès pour les utilisateurs affiliés
Si tous les profils et utilisateurs secondaires d'un appareil sont affiliés au propriétaire de l'appareil, les fonctionnalités suivantes sont disponibles:
- Journalisation de sécurité à l'aide de
setSecurityLoggingEnabled()
. - La journalisation de l'activité réseau à l'aide de
setNetworkLoggingEnabled()
- Création de rapports de bug avec
requestBugreport()
.
Auparavant, la journalisation de la sécurité et les rapports de bugs n'étaient disponibles que pour les appareils à utilisateur unique, ou avec un seul profil et un seul utilisateur.
Le mode tâches verrouillées est disponible pour les utilisateurs secondaires et les profils gérés s'ils sont affiliés au propriétaire de l'appareil via setLockTaskPackages()
.
Pour en savoir plus sur l'affiliation des utilisateurs, consultez Utilisateurs affiliés.
Clauses de non-responsabilité concernant le provisionnement personnalisé
Les DPC peuvent désormais afficher leurs propres clauses de non-responsabilité auprès des utilisateurs lors du provisionnement. Utilisez EXTRA_PROVISIONING_DISCLAIMERS
, EXTRA_PROVISIONING_DISCLAIMER_HEADER
et EXTRA_PROVISIONING_DISCLAIMER_CONTENT
pour fournir des clauses de non-responsabilité sous forme de texte stylisé. Les clauses de non-responsabilité personnalisées d'un DPC apparaissent dans la liste des termes réductibles.
Sécurité
Les propriétaires de profils et d'appareils peuvent utiliser setRequiredStrongAuthTimeout()
pour configurer un délai avant expiration pour le déverrouillage d'un appareil ou d'un profil avec une méthode d'authentification secondaire, telle que les empreintes digitales ou les agents de confiance. À l'expiration du délai, l'utilisateur doit déverrouiller l'appareil ou le profil à l'aide d'une méthode d'authentification forte, telle qu'un mot de passe, un code ou un schéma.
Les propriétaires d'appareils et de profils peuvent réinitialiser de manière sécurisée les mots de passe des appareils et des profils professionnels à l'aide de resetPasswordWithToken()
.
Pour les appareils compatibles avec le chiffrement basé sur les fichiers, cette API est disponible avant qu'un utilisateur ne déverrouille son appareil ou son profil, à condition que le DPC soit compatible avec le chiffrement.
Lors du verrouillage d'un profil professionnel sur un appareil compatible avec le chiffrement basé sur les fichiers, lockNow(int)
peut éventuellement supprimer les clés de chiffrement principales du profil professionnel à l'aide de FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY
.
Les clés de chiffrement sont également supprimées si l'utilisateur désactive son profil professionnel.
Les propriétaires d'appareils peuvent également utiliser setNetworkLoggingEnabled()
pour activer la journalisation réseau des requêtes DNS et des connexions TCP initiées à partir d'appareils appartenant à l'entreprise. Pour en savoir plus, consultez la section Journalisation de l'activité réseau.
Les propriétaires de profils peuvent limiter les packages de l'utilisateur principal autorisés à observer les notifications du profil professionnel. Appelez setPermittedCrossProfileNotificationListeners()
pour définir les packages sur liste d'autorisation qui reçoivent des événements via un NotificationListenerService
. Définir les écouteurs autorisés sur null
(valeur par défaut) désactive la liste d'autorisation et tous les packages peuvent écouter les notifications. Pour limiter les événements aux packages système, transmettez un ensemble "Set" vide. Pour afficher les applications qui n'ont pas accès aux notifications du profil professionnel, les utilisateurs peuvent appuyer sur Paramètres > Applications et notifications > Accès spéciaux des applications > Accès aux notifications.
Enfin, les propriétaires de profils et d'appareils peuvent récupérer des informations sur les mises à jour du système en attente disponibles sur un appareil à l'aide de getPendingSystemUpdate()
.
Délégation de l'API de gestion des applications
La délégation d'API permet aux propriétaires d'appareils et de profils de décharger entièrement la gestion des applications vers d'autres applications. La classe DevicePolicyManager
fournit des méthodes permettant de gérer les champs d'application de délégation que les propriétaires d'appareils et de profils peuvent accorder à un package:
- La méthode
setDelegatedScopes()
permet aux propriétaires d'appareils et de profils d'accorder à d'autres applications l'accès aux API privilégiées. - La méthode
getDelegatedScopes()
renvoie les niveaux d'accès accordés à un package. getDelegatePackages()
renvoie les packages qui ont un champ d'application.
Le tableau suivant montre comment les différentes méthodes de DevicePolicyManager
sont organisées selon le champ d'application:
Services d'arrière-plan de longue durée
Les propriétaires d'appareils et de profils peuvent sous-classer DeviceAdminService
pour créer des services d'arrière-plan. Le système Android tente de maintenir le service actif pendant que l'utilisateur est en cours d'exécution.
Si vous souhaitez exécuter des tâches périodiques, envisagez d'utiliser JobScheduler
avant de créer un service d'arrière-plan.
Contrôler le service de sauvegarde
Les propriétaires d'appareils peuvent activer ou désactiver l'Android Backup Service à l'aide de nouvelles méthodes dans DevicePolicyManager
. Activez et désactivez le service de sauvegarde à l'aide de setBackupServiceEnabled()
.
Vérifiez l'état du service de sauvegarde à l'aide de isBackupServiceEnabled()
.
Configuration du proxy Wi-Fi
Les propriétaires d'appareils et de profils peuvent configurer des serveurs proxy HTTP pour les réseaux Wi-Fi. Utilisez un fichier PAC ou des paramètres manuels pour configurer un serveur proxy pour chaque réseau Wi-Fi. Pour définir ou supprimer le proxy pour un objet WifiConfiguration
, appelez sa méthode setHttpProxy()
. Pour obtenir les paramètres du proxy, appelez getHttpProxy()
.
Boîtes de dialogue d'explication pour les fonctionnalités désactivées par l'administrateur
Votre application doit afficher une explication utile aux utilisateurs qui essaient d'utiliser une fonctionnalité désactivée par l'administrateur. Toutes les applications peuvent désormais utiliser createAdminSupportIntent()
pour créer un intent qui affiche une boîte de dialogue d'explication lorsqu'elle est transmise à startActivity(Intent)
.
Les intents incluent des explications personnalisées et localisées pour les appareils photo désactivés, les captures d'écran désactivées et toutes les restrictions UserManager
.
Limitation du Bluetooth
Les propriétaires d'appareils peuvent désactiver le Bluetooth, ce qui concerne tous les utilisateurs et tous les profils de l'appareil. Pour désactiver le Bluetooth, ajoutez la restriction utilisateur DISALLOW_BLUETOOTH
.
Les propriétaires d'appareils et de profils peuvent empêcher les utilisateurs d'envoyer des fichiers via le Bluetooth à l'aide de DISALLOW_BLUETOOTH_SHARING
. La réception de fichiers n'est pas affectée. Lorsqu'il est défini par le propriétaire d'un appareil, DISALLOW_BLUETOOTH_SHARING
s'applique à tous les utilisateurs de l'appareil. Dans Android 8.0, ce paramètre est le paramètre par défaut pour les nouveaux profils et les profils existants sur les appareils mis à niveau vers Android 8.0.
Changements de comportement
Si vous créez des applications pour les entreprises, y compris les DPC, vous devez consulter les modifications de comportement suivantes dans Android 8.0 et modifier votre application en conséquence.
Suppression d'utilisateurs
Les propriétaires d'appareils peuvent supprimer des utilisateurs secondaires et des profils gérés à l'aide de removeUser()
, même si DISALLOW_REMOVE_USER
est activé.
Sécurité
Authentification
Les modifications suivantes ont été appliquées à la classe DevicePolicyManager
:
- La méthode
lockNow()
ne verrouille le profil professionnel que si une question professionnelle distincte est active. - La méthode
resetPassword()
n'est plus disponible pour les DPC qui agissent en tant que propriétaires d'appareils ou propriétaires de profil et qui ciblent Android 8.0. En cas d'appel, une exception de sécurité est générée. Les DPC doivent plutôt utiliserresetPasswordWithToken()
.Remarque : Les DPC ciblant Android 7.1.1 (niveau d'API 25) ou version antérieure, ainsi que les DPC disposant uniquement de droits d'administrateur d'appareil, ne sont pas concernés par cette modification.
- Pour les appareils compatibles avec le chiffrement basé sur les fichiers,
isActivePasswordSufficient()
n'est pas disponible avant que l'utilisateur ne déverrouille l'appareil pour la première fois après un redémarrage. Si elle est appelée avant que l'utilisateur ne déverrouille l'appareil, une exception est générée.
Données des profils professionnels verrouillés
Android 8.0 inclut des modifications de l'interface utilisateur permettant de séparer les données d'un profil professionnel verrouillé.
- Les notifications pour les applications du profil professionnel peuvent désormais masquer leur contenu. Auparavant, le panneau des notifications affichait le contenu des applications professionnelles d'un profil professionnel verrouillé.
- L'écran Recents (Éléments récents) affiche maintenant un panneau simple permettant d'exécuter des applications à partir d'un profil professionnel verrouillé. Le panneau simple et coloré contient l'icône et le nom d'une application. Auparavant, les activités ou les tâches d'un profil professionnel verrouillé affichaient un aperçu sur l'écran "Récents".
Intégrité de l'appareil
- L'option
ENSURE_VERIFY_APPS
est désormais une restriction utilisateur globale. Si un utilisateur de l'appareil est soumis à cette restriction, la vérification de l'application est appliquée à tous les utilisateurs de l'appareil. Par exemple, si un propriétaire de profil définit la restriction sur le profil professionnel, la validation de l'application est appliquée au profil personnel de l'utilisateur. - La méthode
onSystemUpdatePending()
est désormais appelée pour les propriétaires de profils en plus des propriétaires d'appareils. - Lorsque vous utilisez la classe
SystemUpdatePolicy
, la règle de report ne s'applique plus aux correctifs de sécurité. Les correctifs de sécurité ne peuvent donc plus être reportés. Toutefois, le comportement des autres types de règles, tels que les règles automatiques et fenêtrées, n'est pas affecté. - Les propriétaires d'appareils peuvent déclencher un rétablissement de la configuration d'usine à l'aide de
wipeData()
, même siDISALLOW_FACTORY_RESET
est activé.
VPN permanent
Android 8.0 inclut des modifications de l'interface utilisateur pour aider les utilisateurs à comprendre l'état des connexions VPN permanentes:
- Lorsque des connexions VPN permanents se déconnectent ou ne peuvent pas se connecter, les utilisateurs voient une notification pouvant être ignorée. Appuyez sur la notification pour afficher les paramètres de configuration du VPN. La notification disparaît lorsque le VPN se reconnecte ou lorsque l'utilisateur désactive l'option "VPN permanent".
- Le VPN permanent permet à l'utilisateur d'un appareil de bloquer toutes les connexions réseau qui n'utilisent pas le VPN. Lorsque cette option est activée, l'application Paramètres avertit l'utilisateur qu'il n'aura pas de connexion Internet jusqu'à ce que le VPN se connecte. Les paramètres invitent l'utilisateur à continuer ou à annuler.
Le VpnService
des applications VPN doit désormais appeler sa méthode startForeground()
après le lancement. Étant donné que le système Android démarre directement le service d'une application VPN, la transition au premier plan relève de la responsabilité de l'application. Android 8.0 arrête les applications VPN qui ne font pas passer le service VPN au premier plan.
Rappels pour les mots de passe
Les rappels de changement de mot de passe de DeviceAdminReceiver
incluent désormais un paramètre user
pour identifier l'utilisateur ou le profil auquel appartient le mot de passe. Les nouvelles signatures de méthode sont les suivantes:
onPasswordChanged(Context, Intent, UserHandle)
onPasswordExpiring(Context, Intent, UserHandle)
onPasswordFailed(Context, Intent, UserHandle)
onPasswordSucceeded(Context, Intent, UserHandle)
L'implémentation par défaut de chaque nouvelle méthode appelle la version précédente, ce qui supprime l'argument utilisateur. Android 8.0 abandonne les méthodes précédentes.
Délégation de l'API de gestion des applications
Les méthodes suivantes de la classe DevicePolicyManager
sont désormais obsolètes:
setCertInstallerPackage()
getCertInstallerPackage()
setApplicationRestrictionsManagingPackage()
getApplicationRestrictionsManagingPackage()
De plus, il est désormais possible de déléguer un seul champ d'application à plusieurs packages. En d'autres termes, les propriétaires d'appareils et de profils peuvent accorder simultanément l'accès au même ensemble d'API à deux packages différents.