Cómo compilar un controlador de política de dispositivo

En esta guía, se describe cómo desarrollar un controlador de política de dispositivo (DPC) para en una implementación empresarial de Android. Una app de DPC, conocida anteriormente Como controlador de políticas de trabajo, controla las políticas de dispositivos locales y el sistema. aplicaciones en los dispositivos.

Información acerca de los DPC

En una implementación empresarial de Android, una empresa mantiene el control de de los dispositivos del usuario, como el aislamiento información de la infraestructura de los usuarios datos personales y preconfigurar apps aprobadas para el entorno o inhabilitar las funciones del dispositivo (por ejemplo, la cámara).

Como EMM, desarrollas una app para DPC que los clientes pueden usar en junto con tu consola de EMM y servidor. Tu cliente implementa el DPC en los dispositivos de los usuarios que administra. El DPC actúa como un puente entre la consola (y el servidor) de EMM y el dispositivo. Un administrador usa la consola de EMM para realizar diversas tareas, como las siguientes: configurar los dispositivos y las apps.

El DPC crea y administra el perfil de trabajo en el dispositivo en el que está instalado. El perfil de trabajo encripta la información relacionada con el trabajo y la mantiene separada de de los usuarios aplicaciones y datos personales. Antes de crear el perfil de trabajo, el DPC también puede aprovisionar una cuenta de Google Play administrada para usar en el dispositivo.

En esta guía, se muestra cómo desarrollar un DPC que pueda crear y administrar perfiles de trabajo.

Biblioteca de compatibilidad de DPC para EMM

La biblioteca de compatibilidad de DPC para EMM incluye clases de utilidades y auxiliares que facilitar el aprovisionamiento y la administración de los dispositivos Android en una empresa, en un entorno de nube. La biblioteca te permite aprovechar las funciones importantes de tu Apps para DPC:

  • Compatibilidad con el aprovisionamiento de cuentas de Google Play administrado: Aprovisionamiento administrado Las Cuentas de Google Play de la app para DPC requieren que Google Play y Google Las apps de Servicios de Play cumplen con los requisitos mínimos de versión. Sin embargo, actualizar estas apps puede ser complejo. La biblioteca de compatibilidad de DPC se encarga de actualizar estos y garantiza la compatibilidad con las actualizaciones futuras de la cuenta de servicio Proceso de aprovisionamiento de las cuentas de Play. Consulte las cuentas de Google Play administradas aprovisionamiento de recursos para obtener más detalles.
  • Compatibilidad con configuraciones administradas: Usar la API de EMM de Play para controlar las configuraciones administradas de las apps aprobadas es la la forma más sencilla de implementar configuraciones administradas en tu DPC. Compatibilidad con DPC La biblioteca te permite delegar a Google Play la tarea de aplicar la administración parámetros de configuración (anteriormente, restricciones de apps) establecidos por el administrador con tu EMM de Cloud. Usar la API de Play EMM para controlar las configuraciones administradas permite que la configuración de la app se aplique automáticamente durante la instalación. Consulta Aplica parámetros de configuración administrados. en las apps de trabajo para obtener más información sobre cómo habilitar esta función en tu DPC.

Sigue los pasos que se indican a continuación para descargar la biblioteca. Las tareas que se detallan en esta guía se da por sentado que se usa la biblioteca de compatibilidad de DPC.

Descarga la biblioteca de compatibilidad de DPC

Para usar la biblioteca de compatibilidad de DPC, descárgala de la comunidad de proveedores de EMM de Android Enterprise. Debes agregar la biblioteca al archivo build.gradle y ocuparte de otras las dependencias cuando compiles tu app de DPC. Por ejemplo, la biblioteca requiere la versión 11.4.0 Biblioteca cliente de autenticación de los Servicios de Google Play

  1. Agrega la biblioteca al archivo build.gradle:

    Groovy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Agregar 11.4.0 La biblioteca cliente de autenticación de los Servicios de Google Play al archivo 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 biblioteca requiere ciertos permisos para ejecutarse, por lo que debes agregarlos a El manifiesto de tu app de DPC cuando la subes a 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"/>

Además de estos pasos preliminares de implementación y configuración, inicializamos la funcionalidad específica de la biblioteca en tu código DPC, según el y la capacidad que quieres implementar. Los detalles se incluyen en el repositorio secciones a continuación.

Crea un DPC

Compila tu DPC en el modelo existente que se usa para las aplicaciones de administración de dispositivos. Específicamente, tu app debe crear una subclase de DeviceAdminReceiver (una clase de android.app.admin) paquete), como se describe en Administración del dispositivo.

Crea un perfil de trabajo

Para ver un ejemplo que muestra cómo crear un perfil de trabajo básico, consulta BasicManagedProfile en GitHub.

Para crear un perfil de trabajo en un dispositivo que ya tiene un perfil personal, haz lo siguiente: primero averigua si el dispositivo es compatible con un perfil de trabajo. la existencia del Función del sistema 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 el dispositivo admite perfiles de trabajo, crea uno mediante el envío de un intent. con un ACTION_PROVISION_MANAGED_PROFILE acción. (En algunos documentos, el perfil administrado es una término general que significa lo mismo que perfil de trabajo en el contexto de Android en el ámbito empresarial). Incluye el nombre del paquete de administración de dispositivos como 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();
}

El sistema responde a este intent de la siguiente manera:

  • Verifica que el dispositivo esté encriptado. Si no es así, el sistema solicita que el usuario encripte el dispositivo antes de continuar.
  • Crea un perfil de trabajo.
  • Quita las aplicaciones no necesarias del perfil de trabajo.
  • Copia la app de DPC en el perfil de trabajo y establece el DPC como el propietario del perfil.

Anular onActivityResult() por Consulta si el aprovisionamiento fue exitoso:

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);
    }
}

Termina de habilitar el perfil de trabajo

Cuando se aprovisiona el perfil, el sistema llama al DPC DeviceAdminReceiver.onProfileProvisioningComplete() de la app. Anular este método de devolución de llamada para terminar de habilitar el perfil de trabajo.

Un DeviceAdminReceiver.onProfileProvisioningComplete() típico una implementación de devolución de llamada hace lo siguiente:

Activa el perfil de trabajo

Cuando hayas completado estas tareas, llama al administrador de políticas setProfileEnabled() para activar el perfil de trabajo:

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);

Configura las políticas de dispositivo

La aplicación de DPC aplica las políticas de dispositivo establecidas por un administrador para cumplir con un de los requisitos y restricciones de tu organización. Por ejemplo, la política de seguridad podría exigir que los dispositivos se bloqueen después de una cierta cantidad de intentos de contraseña fallidos. El DPC consulta las políticas actuales a la consola de EMM y, luego, las aplica con la opción Device Administration.

Para obtener información sobre cómo aplicar políticas de dispositivo, consulta Políticas

Aplica configuraciones administradas a apps de trabajo

Los parámetros de configuración administrados te permiten brindar a tus clientes la capacidad de realizar lo siguiente: configurar previamente las apps para las cuales se aprobó su implementación y actualizarlas apps fácilmente cuando la configuración deba cambiar. Configurar una app antes de de la implementación garantiza que se cumplan la seguridad de la organización y otras políticas después de instalar la app en el dispositivo de destino.

El desarrollador de la app define las capacidades de la app en un esquema XML (el esquema de configuraciones administradas) que acompaña a la app cuando se sube a Google Play (para desarrolladores de apps, consulta Cómo configurar configuraciones administradas para obtener más información).

Recuperas este esquema desde la app para mostrárselo a los administradores de clientes en tu consola de EMM, proporciona una IU en la que las diversas opciones definidas en el y permitir que los administradores preestablezcan los parámetros de configuración de la app. Por lo general, la configuración administrada resultante que establece el administrador se almacenan en el servidor EMM, que luego usa Reproducir la API de EMM para configurar Configuración administrada para el dispositivo o Managedconfigurationsforuser. Consulta Configuraciones administradas a través de Play para obtener más información.

Las configuraciones administradas se pueden aplicar a la app a través de la API de Play EMM (enfoque recomendado) o directamente desde el DPC (descrito en Aplicar configuraciones administradas) directamente desde el DPC). Cómo usar la API de Play EMM tiene varias ventajas, incluida una implementación sencilla, ya que permite usar la Biblioteca de compatibilidad de DPC para simplificar las tareas de DPC Además, la API de EMM de Play tiene las siguientes características:

  • Establece la configuración de forma atómica cuando se instala una app nueva, lo que garantiza que la app esté lista la primera vez que el usuario la inicie.
  • Te permite administrar la configuración por usuario, por lo que no debes supervisar el aprovisionamiento por dispositivo.

Aplica configuraciones administradas con el API de Play EMM

Para usar la API de Play EMM para configuraciones administradas, el DPC debe permitir Google Play para establecer configuraciones. La biblioteca de compatibilidad de DPC se encarga de esto. tarea por ti a través de un proxy de la configuración que envía Google Play.

Para usar Play API de EMM, descarga la biblioteca de compatibilidad de DPC y habilita la compatibilidad con configuraciones administradas en tu DPC.

Habilita la compatibilidad con Configuraciones administradas en tu DPC

Importa esta clase en tu DPC:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Inicializa la biblioteca de configuraciones administradas. En este ejemplo, “admin” es el ComponentName de DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Habilita las configuraciones administradas:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Con esta biblioteca inicializada en tu DPC, puedes usar el API de Google Play EMM en tu EMM consola y servidor para aplicar configuraciones administradas a apps aprobadas, en lugar de la codificación de estas tareas directamente en el DPC. Consulta Configuraciones administradas a través de Play para obtener más detalles.

Aplica configuraciones administradas directamente desde el DPC

Para cambiar los ajustes de configuración de una app directamente desde el DPC, llama al Método DevicePolicyManager.setApplicationRestrictions() y pasar parámetros para la app de DPC DeviceAdminReceiver, el nombre del paquete de la app de destino, y el Bundle que contiene la configuración administrada de la app según lo establecido por el administrador. Consulta Cómo se Interactúan el DPC y la consola de EMM y establece parámetros de configuración administrados para obtener más detalles. Sin embargo, Ten en cuenta que este enfoque alternativo a la aplicación de aplicaciones no se recomienda en implementaciones de Cuentas de Google Play administradas.

Aprovisionamiento de cuentas de Google Play administrado asistencia

La biblioteca de compatibilidad de DPC incluye compatibilidad para aprovisionar cuentas de Google Play administradas. Para usar esta compatibilidad, primero debes inicializar el archivo y, luego, puedes asegurarte de que entorno de trabajo y Agrega un cuenta de Google Play administrada.

Inicializa cuentas de Google Play administradas en tu DPC

Importa esta clase en tu DPC:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Inicializa la biblioteca de compatibilidad de aprovisionamiento. En este ejemplo, “administrador” el ComponentName de DeviceAdminReceiver.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Garantizar el entorno de trabajo para cuentas de Google Play administradas

Después de que el DPC aprovisione un dispositivo en el modo de propietario del perfil (ACTION_PROVISION_MANAGED_PROFILE) o en un dispositivo modo propietario (ACTION_PROVISION_MANAGED_DEVICE); asegúrate de que el dispositivo sea compatible con las cuentas de Google Play administradas llamando al siguiente número:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

La devolución de llamada informa el éxito o el fracaso de este proceso. Cuando se envía la devolución de llamada correctamente, se puede agregar una cuenta de Google Play administrado. Si si la devolución de llamada informa un error, solicita al usuario que se asegure de que el dispositivo tenga una conexión de red (por ejemplo, si falla la descarga). En otro informar el error a 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)
    }
}

Agrega una cuenta de Google Play administrado

El AccountManager del framework de Android puedes agregar una cuenta de Google Play administrada a un dispositivo. Para simplificar la interacción con AccountManager, usa la función auxiliar (que se muestra en el siguiente ejemplo) de la biblioteca de compatibilidad de DPC. La función maneja el token que devuelve el servidor de Google Play y facilita el aprovisionamiento la cuenta de Google Play administrado. La función se muestra cuando Google Play administrado La cuenta se encuentra en un estado válido:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token: el token de autenticación del usuario que genera el Reproducir la llamada Users.generateAuthenticationToken() a la API de EMM
  • accountAddedCallback: Devuelve la cuenta de Google Play administrada. que se agregó correctamente al dispositivo. Esta devolución de llamada debe incluir onAccountReady() y onFailure().

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).
        }
};
  • Para obtener más información sobre la API de administración de dispositivos, consulta Dispositivo Administración.
  • Para obtener más información sobre los métodos de aprovisionamiento de Android Enterprise, consulta Aprovisionar dispositivos en la Guía para desarrolladores de Android Enterprise
  • Para ver una muestra de GitHub que demuestre cómo crear un perfil de trabajo básico, consulta BasicManagedProfile.
  • Aquí encontrarás una muestra de GitHub en la que se demuestra cómo establecer parámetros de configuración en otras apps como una propietario del perfil, consulta AppRestrictionEnforcer.