En esta página, se proporciona una descripción general de las nuevas APIs, funciones y cambios de comportamiento que se introdujeron en Android 8.0 (nivel de API 26) y que afectan a Android en el ámbito empresarial.
Nuevas APIs y funciones
Hicimos que los modos de administración de propietario del perfil y del dispositivo sean más potentes, productivos y fáciles de aprovisionar que nunca. También habilitamos un escenario de implementación completamente nuevo: perfiles de trabajo en dispositivos completamente administrados. Estas y otras funciones se describen en las siguientes secciones.
Perfiles de trabajo en dispositivos completamente administrados
En Android 8.0, los dispositivos completamente administrados también pueden tener perfiles de trabajo. Esto brinda a las empresas la capacidad de separar apps y políticas mientras mantienen el control y la visibilidad en ambos perfiles. El propietario del dispositivo existente o un controlador de política de dispositivo (DPC) diferente puede crear el perfil administrado.
Con los perfiles de trabajo en dispositivos completamente administrados, los propietarios de dispositivos pueden hacer lo siguiente:
- Llama a
EXTRA_PROVISIONING_SKIP_USER_CONSENT
para crear un perfil administrado sin interacción del usuario. - Recibe notificaciones cuando se crean o quitan usuarios secundarios o perfiles administrados. Las devoluciones de llamada son
onUserAdded()
yonUserRemoved()
. - Evita que otros DPC creen perfiles administrados con
DISALLOW_ADD_MANAGED_PROFILE
. Esta configuración es la predeterminada en Android 8.0 para los propietarios de dispositivos en dispositivos recientemente aprovisionados o para dispositivos actualizados a Android 8.0. - Los propietarios de dispositivos también pueden impedir que los usuarios quiten perfiles administrados existentes mediante
DISALLOW_REMOVE_MANAGED_PROFILE
.
Los propietarios de dispositivos y perfiles pueden comunicarse entre sí si son del mismo APK y si están afiliados (consulta Afiliación de usuarios a continuación).
Para obtener información más detallada sobre la compatibilidad con esta situación de implementación nueva, consulta la página dedicada de perfiles de trabajo en dispositivos completamente administrados.
Afiliación de usuarios
Cuando el propietario de un dispositivo y el propietario de un perfil representan a la misma organización:
Los propietarios del dispositivo y el perfil pueden comunicarse entre sí dentro del mismo APK. Es posible que quieran compartir políticas o estados (consulta Perfiles de trabajo en dispositivos completamente administrados más arriba).
Las funciones de todo el dispositivo, como el registro o la inclusión en la lista de entidades permitidas del modo de tareas bloqueadas, se pueden aplicar a los usuarios afiliados.
Los IDs de afiliación, adjuntos a un perfil o usuario, identifican organizaciones. Cuando los ID de afiliación coinciden, los usuarios se afilian. Los propietarios de dispositivos y perfiles usan setAffiliationIds() para configurar sus ID de afiliación. Representa a organizaciones que usan ID de cadena largos y difíciles de adivinar.
Nuevo acceso para usuarios afiliados
Si todos los usuarios y perfiles secundarios de un dispositivo están afiliados al propietario del dispositivo, estarán disponibles las siguientes funciones:
- Registro de seguridad con
setSecurityLoggingEnabled()
. - Registro de actividad de red con
setNetworkLoggingEnabled()
- Informe de errores con
requestBugreport()
Anteriormente, los informes de errores y los registros de seguridad solo estaban disponibles para dispositivos de un solo usuario o para dispositivos con un solo perfil y un usuario.
El modo de tareas bloqueadas está disponible para usuarios secundarios y perfiles administrados cuando se afilia al propietario del dispositivo a través de setLockTaskPackages()
.
Para obtener información más detallada sobre la afiliación de un usuario, consulta Usuarios afiliados.
Renuncias de responsabilidad personalizadas del aprovisionamiento
Ahora, los DPC pueden mostrar sus propias renuncias de responsabilidad a los usuarios durante el aprovisionamiento. Usa EXTRA_PROVISIONING_DISCLAIMERS
, EXTRA_PROVISIONING_DISCLAIMER_HEADER
y EXTRA_PROVISIONING_DISCLAIMER_CONTENT
para proporcionar renuncias de responsabilidad de texto con estilo. Las renuncias de responsabilidad personalizadas de un DPC aparecen en la lista de condiciones contraíbles.
Seguridad
Los propietarios de perfiles y de dispositivos pueden usar setRequiredStrongAuthTimeout()
a fin de configurar un tiempo de espera para desbloquear un dispositivo o un perfil con un método de autenticación secundario, como huellas digitales o agentes de confianza. Una vez que finaliza el tiempo de espera, el usuario debe desbloquear el dispositivo o perfil con un método de autenticación seguro, como una contraseña, un PIN o un patrón.
Los propietarios de dispositivos y perfiles pueden restablecer de forma segura las contraseñas del dispositivo y del perfil de trabajo con resetPasswordWithToken()
.
En el caso de los dispositivos que admiten la encriptación basada en archivos, esta API está disponible antes de que un usuario desbloquee su dispositivo o perfil, siempre que el DPC reconozca la encriptación.
Cuando se bloquea un perfil de trabajo en un dispositivo que admite la encriptación basada en archivos, lockNow(int)
puede expulsar de manera opcional las claves de encriptación principales del perfil de trabajo con FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY
.
Las claves de encriptación también se expulsan si el usuario desactiva su perfil de trabajo.
Además, los propietarios de dispositivos pueden usar setNetworkLoggingEnabled()
para activar el registro de red de las consultas de DNS y las conexiones TCP iniciadas desde dispositivos empresariales. Para obtener más información, consulta el Registro de actividad de red.
Los propietarios de perfiles pueden restringir cuáles de los paquetes del usuario principal pueden observar las notificaciones del perfil de trabajo. Llama a setPermittedCrossProfileNotificationListeners()
para configurar los paquetes incluidos en la lista de entidades permitidas que reciben eventos a través de un NotificationListenerService
. Si configuras los objetos de escucha permitidos en null
(la opción predeterminada), se inhabilita la inclusión en la lista de entidades permitidas, y todos los
paquetes pueden escuchar notificaciones. Para limitar los eventos a los paquetes del sistema, pasa un conjunto vacío. Para ver las apps que no pueden acceder a las notificaciones del perfil de trabajo, los usuarios pueden presionar Configuración > Apps y notificaciones > Acceso especial de apps > Acceso a notificaciones.
Por último, los propietarios de perfiles y dispositivos pueden recuperar información sobre las actualizaciones del sistema pendientes que están disponibles en un dispositivo con getPendingSystemUpdate()
.
Delegación de API de administración de apps
La delegación de API permite a los propietarios de dispositivos y perfiles transferir por completo la administración de apps a otras aplicaciones. La clase DevicePolicyManager
proporciona métodos para administrar los alcances de delegación que los propietarios de dispositivos y perfiles pueden otorgar a un paquete:
- El método
setDelegatedScopes()
permite que los propietarios de dispositivos y perfiles otorguen acceso a APIs con privilegios a otras apps. - El método
getDelegatedScopes()
muestra los alcances otorgados a un paquete. getDelegatePackages()
muestra los paquetes que tienen un alcance.
En la siguiente tabla, se muestra cómo se organizan los distintos métodos de DevicePolicyManager
en los diferentes alcances:
Servicios en segundo plano de larga duración
Los propietarios de dispositivos y perfiles pueden subclasificar DeviceAdminService
para crear servicios en segundo plano. El sistema Android intenta mantener el servicio en ejecución mientras el usuario está activo.
Si deseas ejecutar tareas periódicas, considera usar JobScheduler
antes de crear un servicio en segundo plano.
Controla el servicio de copia de seguridad
Los propietarios de dispositivos pueden activar o desactivar Android Backup Service con métodos nuevos en DevicePolicyManager
. Habilita o inhabilita el servicio de copia de seguridad con setBackupServiceEnabled()
.
Verifica el estado del servicio de copia de seguridad con isBackupServiceEnabled()
.
Configuración del proxy Wi-Fi
Los propietarios de dispositivos y perfiles pueden configurar servidores proxy HTTP para redes Wi-Fi. Usa un archivo PAC o la configuración manual a fin de configurar un servidor proxy para cada red Wi-Fi. Para configurar o quitar el proxy de una WifiConfiguration
, llama a su método setHttpProxy()
. Para obtener la configuración de proxy, llama a getHttpProxy()
.
Diálogos de explicación de las funciones inhabilitadas por el administrador
Tu app debe mostrar una explicación útil a los usuarios que intentan usar una función inhabilitada por el administrador. Ahora, todas las apps pueden usar createAdminSupportIntent()
para crear un intent que muestre un diálogo de explicación cuando se pase a startActivity(Intent)
.
Los intents incluyen explicaciones personalizadas y localizadas para cámaras y capturas de pantalla inhabilitadas, además de todas las restricciones de UserManager
.
Cómo restringir el Bluetooth
Los propietarios de dispositivos pueden inhabilitar Bluetooth, lo que afecta a todos los usuarios y perfiles del dispositivo. Para desactivar el Bluetooth, agrega la restricción de usuario DISALLOW_BLUETOOTH
.
Los propietarios de dispositivos y perfiles pueden impedir que los usuarios envíen archivos mediante Bluetooth con DISALLOW_BLUETOOTH_SHARING
. La recepción de archivos no se ve afectada. Cuando lo configura un propietario de dispositivo, DISALLOW_BLUETOOTH_SHARING
se aplica a todos los usuarios del dispositivo. Esta configuración es la predeterminada en Android 8.0 para los perfiles nuevos y existentes en dispositivos actualizados a Android 8.0.
Cambios en el comportamiento
Si compilas apps para empresas, incluidos los DPC, debes revisar los siguientes cambios de comportamiento en Android 8.0 y modificar tu app según corresponda.
Eliminación de usuarios
Los propietarios de dispositivos pueden quitar usuarios secundarios y perfiles administrados con removeUser()
, incluso si DISALLOW_REMOVE_USER
está habilitado.
Seguridad
Autenticación
Se aplicaron los siguientes cambios en la clase DevicePolicyManager
:
- El método
lockNow()
solo bloquea el perfil de trabajo si hay una comprobación de trabajo independiente activa. - El método
resetPassword()
ya no está disponible para los DPC que actúan como propietarios de dispositivos o propietarios de perfiles y que se orientan a Android 8.0. Si se llama, se arroja una excepción de seguridad. En cambio, los DPC deben usarresetPasswordWithToken()
.Nota: Este cambio no afecta a los DPC que se orientan a Android 7.1.1 (nivel de API 25) o versiones anteriores, ni a los DPC que solo tienen privilegios de administrador de dispositivos.
- En el caso de los dispositivos que admiten la encriptación basada en archivos,
isActivePasswordSufficient()
no estará disponible antes de que el usuario desbloquee el dispositivo por primera vez después de un reinicio. Si se llama antes de que el usuario desbloquee el dispositivo, se arrojará una excepción.
Datos de perfiles de trabajo bloqueados
Android 8.0 incluye cambios en la interfaz de usuario para separar datos de un perfil de trabajo bloqueado.
- Es posible que las notificaciones de apps en el perfil de trabajo ahora oculten su contenido. Anteriormente, en el panel lateral de notificaciones, se mostraba el contenido de las apps de trabajo de un perfil de trabajo bloqueado.
- La pantalla Recientes ahora muestra un panel simple para ejecutar apps desde un perfil de trabajo bloqueado. El panel simple con botones de color contiene el ícono y el nombre de una app. Anteriormente, las actividades o las tareas de un perfil de trabajo bloqueado mostraban una vista previa en la pantalla Recientes.
Integridad del dispositivo
- La marca
ENSURE_VERIFY_APPS
ahora es una restricción global de usuarios. Si algún usuario del dispositivo tiene esta restricción, se aplicará la verificación de la app a todos los usuarios del dispositivo. Por ejemplo, si el propietario de un perfil establece la restricción en el perfil de trabajo, la verificación de la app se aplica al perfil personal del usuario. - Ahora se invoca el método
onSystemUpdatePending()
para los propietarios de perfiles y de dispositivos. - Cuando se usa la clase
SystemUpdatePolicy
, la política para posponer ya no se aplica a los parches de seguridad, por lo que ya no se pueden posponer. Sin embargo, el comportamiento de otros tipos de políticas, como las automáticas y las con ventanas, no se ve afectado. - Los propietarios de dispositivos pueden activar un restablecimiento de la configuración de fábrica con
wipeData()
, incluso siDISALLOW_FACTORY_RESET
está habilitado.
VPN siempre activada
Android 8.0 incluye cambios en la interfaz de usuario para ayudar a los usuarios a comprender el estado de las conexiones VPN siempre activas:
- Cuando las conexiones de VPN siempre activas se desconectan o no se pueden conectar, los usuarios ven una notificación que no se puede descartar. Cuando se presiona la notificación, se muestran los ajustes de configuración de la VPN. La notificación desaparece cuando la VPN se vuelve a conectar o cuando el usuario desactiva la opción de VPN siempre activada.
- La VPN siempre activada permite que la persona que usa un dispositivo bloquee las conexiones de red que no usan la VPN. Cuando se activa esta opción, la app de Configuración advierte al usuario que no tendrá conexión a Internet hasta que se conecte la VPN. La Configuración le solicita al usuario que continúe o cancele.
El VpnService
de las apps de VPN ahora debe llamar a su método startForeground()
después del inicio. Debido a que el sistema Android inicia directamente un servicio de la app de VPN, es responsabilidad de la app hacer la transición al primer plano. Android 8.0 cierra las apps de VPN que no realizan la transición del servicio VPN al primer plano.
Devoluciones de llamada de contraseña
Las devoluciones de llamada de cambio de contraseña de DeviceAdminReceiver
ahora incluyen un parámetro user
para identificar al usuario o perfil al que pertenece la contraseña. Las nuevas firmas de métodos son las siguientes:
onPasswordChanged(Context, Intent, UserHandle)
onPasswordExpiring(Context, Intent, UserHandle)
onPasswordFailed(Context, Intent, UserHandle)
onPasswordSucceeded(Context, Intent, UserHandle)
La implementación predeterminada de cada método nuevo llama a la versión anterior y quita el argumento del usuario. En Android 8.0, se dejan de usar los métodos anteriores.
Delegación de API de administración de apps
Los siguientes métodos de la clase DevicePolicyManager
dejaron de estar disponibles:
setCertInstallerPackage()
getCertInstallerPackage()
setApplicationRestrictionsManagingPackage()
getApplicationRestrictionsManagingPackage()
Además, ahora es posible delegar un solo alcance a varios paquetes. En otras palabras, los propietarios de dispositivos y perfiles pueden otorgar acceso a dos paquetes diferentes al mismo conjunto de APIs de forma simultánea.