Cómo migrar dispositivos existentes a AMAPI

Los dispositivos que ya administra tu DPC personalizado se pueden migrar a Android Device Policy (ADP) y aprovechar la Android Management API.

Requisitos previos

  • El dispositivo ya está administrado por tu EMM con un DPC personalizado.
  • Tu DPC personalizado está integrado con el SDK de AMAPI.
  • El dispositivo está inscrito en la API de EMM de Google Play.
  • El dispositivo pertenece a una empresa de cuentas de Google Play administrado.
  • El dispositivo ejecuta Android 9 o una versión posterior.
  • En el caso de los perfiles de trabajo en dispositivos empresariales, el dispositivo debe ejecutar Android 11 o una versión posterior.

Cómo realizar la integración con el SDK de AMAPI en tu DPC personalizado

El proceso de migración requiere que la aplicación DPC personalizada integre el SDK de AMAPI. Puedes encontrar más información sobre esta biblioteca y cómo agregarla a tu aplicación en la guía de integración del SDK de AMAPI.

Pasos para migrar un dispositivo

  1. Configura una política que se usará en el dispositivo después de que se migre a AMAPI. Para obtener la mejor experiencia del usuario, esta política debe ser equivalente a la que ya aplica tu DPC en el dispositivo. La política en AMAPI debe pertenecer a la misma empresa a la que ya pertenece el dispositivo en la API de EMM de Play. Ten en cuenta que una empresa determinada tiene el mismo nombre en AMAPI y en la API de EMM de Play.
  2. Llama a enterprises.migrationTokens.create para crear un token de migración para el dispositivo.
  3. Envía el value de este token de migración a tu DPC personalizado.
  4. Asegúrate de que Android Device Policy esté instalado en el dispositivo con la API de EMM de Play.
  5. Usa DpcMigrationClientFactory para crear un DpcMigrationClient.
  6. En DpcMigrationClient, llama al migrateDeviceManagementToAndroidManagementApi método. Esto completa la migración.
  7. El deviceState cambia a ACTIVE y recibirás un mensaje STATUS_REPORT a través del canal de Pub/Sub.

Una vez que se completa la migración, la app que realiza la llamada pierde sus privilegios de propietario del dispositivo o propietario del perfil, ya que se transfieren a Android Device Policy. Este proceso se puede representar con el siguiente diagrama de secuencia:

Diagrama de secuencia de la migración del DPC

Nota: El dispositivo debe estar conectado a Internet para iniciar la migración. El proceso está diseñado para ser resistente a las desconexiones de red durante el proceso de migración, de modo que las operaciones clave que requieren conectividad de red se realicen antes de que se produzca la transferencia real de los derechos de propietario del dispositivo o propietario del perfil de tu DPC a Android Device Policy.

Token de migración

El servidor de EMM solicita un token de migración para indicar la intención de migrar un dispositivo en particular que administra un DPC personalizado. Un token de migración se puede usar hasta que la migración se complete correctamente o hasta que venza.

Integración de DPC personalizado

Primero, debes crear un DpcMigrationRequest, pasar el token y, si es necesario, la lista de redes Wi-Fi configuradas a su compilador:

// Create a DpcMigrationRequest
DpcMigrationRequest request =
        DpcMigrationRequest.builder()
            .setMigrationToken(token)
            .build();

Luego, puedes obtener un DpcMigrationClient y comenzar el proceso de migración con migrateDeviceManagementToAndroidManagementApi:

// Create a DpcMigrationClient
DpcMigrationClient dpcMigrationClient = DpcMigrationClientFactory.create(context);
try {
  // Use helper function to retrieve Admin component name
  var adminComponentName = getAdminComponent(context);

  ListenableFuture<DpcMigrationAttempt> futureAttempt =
          dpcMigrationClient.migrateDeviceManagementToAndroidManagementApi(
              new ComponentName(context, DpcMigrationNotificationReceiver.class),
              adminComponentName,
              request);
  // handle futureAttempt
} catch (RuntimeException e) {
  // send failure feedback: "Error: " + e
}

Cómo configurar un NotificationReceiverService y hacer un seguimiento de la migración

Implementa un NotificationReceiverService en tu DPC personalizado.

El proceso de migración se rastrea en el dispositivo a través de un DpcMigrationAttempt.

Puedes usar directamente el que devuelve migrateDeviceManagementToAndroidManagementApi o usar los métodos getMigrationAttempt y listMigrationAttempts para obtener y enumerar los intentos de migración.

// Passing an empty name, we retrieve the last attempt
var request = GetDpcMigrationAttemptRequest.builder().build();

var attempt = client.getMigrationAttempt(request);

De forma opcional, puedes configurar un DpcMigrationListener usando tu NotificationReceiverService para escuchar las actualizaciones de estado de DpcMigrationAttempt.

// DpcMigrationNotificationReceiver for callback handling
public class DpcMigrationNotificationReceiver extends NotificationReceiverService
    implements DpcMigrationListener {

  @Override
  protected DpcMigrationListener getDpcMigrationListener() {
    return this;
  }

  @Override
  public void onMigrationStateChanged(DpcMigrationAttempt migrationAttempt) {
    // send success feedback
  }
}

Cómo controlar las redes Wi-Fi

Si hay redes Wi-Fi administradas por el DPC personalizado, la política ONC de AMAPI debe coincidir con la configuración de estas redes para que AMAPI comience a administrarlas sin problemas. La interacción de la migración de DPC con la administración de Wi-Fi varía según el modo de administración.

Dispositivos completamente administrados y perfiles de trabajo en dispositivos empresariales

Durante la migración, Android Device Policy supone que cualquier red Wi-Fi configurada en la política que tenga el mismo SSID y tipo de seguridad que una red Wi-Fi configurada en el dispositivo es idéntica a la red Wi-Fi configurada correspondiente. Por lo tanto, las redes Wi-Fi configuradas por el DPC personalizado no se modifican después de la migración hasta que haya un cambio en la política ONC correspondiente a la red. Sin embargo, si se desinstala el DPC personalizado después de la migración, las redes Wi-Fi configuradas por el DPC personalizado se quitan automáticamente. Android Device Policy continúa aplicando la política y, si alguna de estas redes está configurada en la política, las redes configuradas en la política se agregan como de costumbre.

Perfil de trabajo en un dispositivo personal

Por motivos técnicos, el DPC personalizado debe quitar las redes Wi-Fi configuradas por el DPC personalizado para que Android Device Policy comience a administrar estas redes Wi-Fi. El SDK de AMAPI se encarga de esto y quita esas redes Wi-Fi antes de transferir la propiedad del DPC personalizado a Android Device Policy pero requiere que el DPC personalizado pase información sobre estas redes en DpcMigrationRequest. Después de la migración, las redes configuradas en la política se agregarán de forma normal, por lo que se recomienda que las redes agregadas por el DPC personalizado también se configuren en la política.

Debes tener en cuenta algunos puntos:

  • Si la red activa es una red Wi-Fi configurada por el DPC personalizado, el dispositivo puede estar sin conexión brevemente durante la migración.
  • Solo las redes Wi-Fi configuradas por el DPC personalizado deben pasar en DpcMigrationRequest. De lo contrario, la migración falla si el SDK de AMAPI no puede quitar una red (p.ej., una red Wi-Fi agregada por el usuario).
  • Las redes Wi-Fi deben pasar en DpcMigrationRequest solo cuando el DPC personalizado es propietario de un perfil en un dispositivo de propiedad personal. De lo contrario, la migración falla.
  • Por motivos técnicos, Android 12 es un caso excepcional en el que se ignoran las redes que pasan en DpcMigrationRequest y se quitan automáticamente todas las redes Wi-Fi configuradas por el DPC personalizado. Además, es un requisito que el DPC personalizado tenga el ACCESS_WIFI_STATEpermiso en Android 12 para los perfiles de trabajo en dispositivos de propiedad personal. De lo contrario, la migración falla.

Advertencias

Estas son algunas advertencias relacionadas con esta función.

ID específico de la empresa

En el caso de los perfiles de trabajo en Android 12 y versiones posteriores, el ID específico de la empresa, al que se puede acceder desde DevicePolicyManager.getEnrollmentSpecificId no cambia en el momento de la migración. Sin embargo, si se vuelve a crear un perfil de trabajo administrado por Android Device Policy en el dispositivo (por ejemplo, después de borrar el anterior o después de restablecer la configuración de fábrica del dispositivo), el ID específico de la empresa cambiará en ese momento.

Perfiles de trabajo en dispositivos completamente administrados

Esta función no es compatible con dispositivos completamente administrados que tienen un perfil de trabajo que ejecuta Android 9 o 10. No se debe intentar migrar estos dispositivos y, independientemente de si se genera un error, estos dispositivos no son compatibles con la migración de DPC.

Comando RESET_PASSWORD

Si el dispositivo tiene una contraseña de bloqueo de pantalla, el comando RESET_PASSWORD se realizará correctamente solo después de que el usuario confirme sus credenciales (p.ej., vuelva a ingresar su PIN) después de la migración. Si el dispositivo no tiene una contraseña de bloqueo de pantalla, se puede usar el comando RESET_PASSWORD inmediatamente después de la migración.