Novedades de Android 8.0

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() y onUserRemoved().
  • 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:

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:

En la siguiente tabla, se muestra cómo se organizan los distintos métodos de DevicePolicyManager en los diferentes alcances:

Tabla 1: Correspondencia entre los alcances y los métodos de política de dispositivo

Group Métodos
DELEGATION_CERT_INSTALL
DELEGATION_APP_RESTRICTIONS
DELEGATION_BLOCK_UNINSTALL setUninstallBlocked()
DELEGATION_PERMISSION_GRANT
DELEGATION_PACKAGE_ACCESS
DELEGATION_ENABLE_SYSTEM_APP enableSystemApp()

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 usar resetPasswordWithToken().

    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 si DISALLOW_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:

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:

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.