SDK de la aplicación de Intune para Android: MAM Integration Essentials

El SDK de aplicaciones de Microsoft Intune para Android le permite incorporar directivas de protección de aplicaciones de Intune (también conocidas como directivas MAM) en su aplicación nativa de Android Java/Kotlin. Una aplicación administrada por Intune es aquella que está integrada con el SDK de la aplicación de Intune. Los administradores de Intune pueden implementar fácilmente directivas de protección de aplicaciones en la aplicación administrada por Intune cuando Intune administra activamente la aplicación.

Nota:

Esta guía se divide en varias etapas distintas. Comience por revisar la Etapa 1: Planifique la integración.

Fase 4: Fundamentos de la integración de MAM

Objetivos de la etapa

  • Habilitar el modo estricto de MAM.
  • Regístrese para recibir notificaciones críticas desde el SDK.
  • Implemente y registre una devolución de llamada de autenticación para proporcionar tokens de Microsoft Entra de MSAL al SDK.
  • Registre nuevas cuentas para la administración de MAM después de autenticarse con MSAL.
  • Anule el registro de cuentas al cerrar sesión para eliminar los datos corporativos.
  • (Recomendado) Incorpore el registro MAM en la aplicación.
  • (Recomendado) Obtén información sobre cómo usar el cuadro de diálogo de diagnóstico de SDK.

Información previa

Ahora que ha descargado el SDK de la aplicación de Intune, integrado en la compilación y realizado correctamente reemplazos de clases y métodos, es hora de realizar los cambios de código esenciales para empezar a aplicar la configuración de directiva de protección de aplicaciones para las cuentas protegidas por MAM.

En esta fase se explica cómo conectarse al registro del SDK, invocar un cuadro de diálogo de diagnóstico, habilitar el modo estricto de MAM para identificar posibles errores de integración, registrarse para recibir notificaciones del SDK y, lo que es más importante, cómo registrar una cuenta para que MAM de Intune empiece a recibir directiva.

Modo estricto de MAM

El modo estricto de MAM puede identificar posibles errores en la integración del SDK de aplicaciones de Intune de la aplicación. Estos errores de integración pueden provocar errores en la aplicación correcta de la directiva de protección de aplicaciones y dejar los datos corporativos desprotegidos. Como resultado, se requiere el uso del modo estricto de MAM.

El modo estricto de MAM busca anomalías en el uso que haga la aplicación de las API de MAM y de las API de plataforma restringidas por MAM. Siguiendo un patrón vago después de StrictMode de Android, MAM Strict Mode ejecuta un conjunto predefinido de comprobaciones que generan errores de tiempo de ejecución cuando fallan. El modo estricto de MAM no está pensado para dejarse habilitado en las compilaciones de producción; En su lugar, úsalo en las compilaciones internas de desarrollo, depuración y software de prueba de la aplicación.

Para habilitar el modo estricto de MAM, llame al siguiente método al principio de la inicialización de la aplicación (por ejemplo): Application.onCreate

MAMStrictMode.enable();

Cuando se produce un error en la comprobación del modo estricto de MAM, intente determinar si se trata de un problema real que se puede solucionar en la aplicación o si es un falso positivo. Si cree que es un falso positivo o no está seguro, informe al equipo de MAM de Intune. Esto nos permitirá asegurarnos de que estamos de acuerdo con la determinación de falso positivo e intentar mejorar la detección para futuras versiones. Para suprimir falsos positivos, deshabilite la comprobación con errores siguiendo las instrucciones siguientes.

Manejo de infracciones

Cuando se produce un error en una comprobación, ejecuta un MAMStrictViolationHandler. El controlador predeterminado lanza un Error, que se espera que bloquee la aplicación. Esto es para hacer que los errores sean lo más ruidosos posible y encaja con la intención de que el modo estricto no se habilite en las compilaciones de producción.

Si la aplicación desea controlar las infracciones de forma diferente, puede proporcionar su propio controlador llamando al siguiente método donde handler implementa MAMStrictViolationHandler:

MAMStrictMode.global().setHandler(handler);

Supresión de comprobaciones

Si se produce un error en una comprobación en una situación en la que la aplicación no hace nada incorrecto, notifícalo como se mencionó anteriormente. Mientras tanto, puede ser necesario deshabilitar la comprobación que encuentra un falso positivo, al menos mientras se espera un SDK actualizado. La comprobación que falló se mostrará en el error generado por el controlador predeterminado o se pasará a un controlador personalizado, si se establece.

Aunque las supresiones se pueden realizar globalmente, es preferible deshabilitar temporalmente por subproceso en el sitio de llamada específico. Los ejemplos siguientes muestran varias formas de deshabilitar MAMStrictCheck.IDENTITY_NO_SUCH_FILE (que se genera si se intenta proteger un archivo que no existe).

Per-Thread Supresión temporal

Este es el mecanismo de supresión preferido.

try (StrictScopedDisable disable = MAMStrictMode.thread().disableScoped(MAMStrictCheck.IDENTITY_NO_SUCH_FILE)) {
    // Perform the operation which raised a violation here
}
// The check is no longer disabled once the block exits

Per-Thread Supresión permanente

MAMStrictMode.thread().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Supresión global (en todo el proceso)

MAMStrictMode.global().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Registrarse para recibir notificaciones del SDK

El SDK de la aplicación de Intune emite muchos tipos diferentes de notificaciones para informar a las aplicaciones de las operaciones de administración urgentes. Su aplicación puede registrarse y tomar medidas al recibir cualquiera de estas notificaciones.

Por ejemplo, cada vez que un administrador de TI emite un comando de borrado selectivo para un dispositivo, el servicio de Intune envía una notificación al SDK, que se pasa a la aplicación como WIPE_USER_DATA. La aplicación puede escuchar esta notificación y controlar qué datos se borran; o puede basarse en el comportamiento de borrado predeterminado del SDK.

Muchas de las notificaciones son opcionales. En función de las funciones del SDK que use la aplicación, es posible que se requieran algunas notificaciones. Consulte Registro para recibir notificaciones del SDK en la Fase 7: Características de participación en la aplicación para obtener más información sobre cómo registrarse para las notificaciones, qué notificaciones entrega el SDK y cómo controlar tipos de notificación específicos.

Registro para la directiva de protección de aplicaciones

Cuando los administradores crean directivas de protección de aplicaciones, orientan estas directivas a cuentas específicas de su organización. En el cliente, el SDK necesita saber qué cuenta usa la aplicación para poder recuperar la directiva de esa cuenta y aplicar la configuración de forma apropiada. La aplicación es responsable de proporcionar al SDK esta información de cuenta. Este proceso se denomina registro.

Siempre que la aplicación agregue una nueva cuenta, debe registrar la cuenta con el SDK, incluso si otras cuentas ya están registradas. La aplicación puede registrar varias cuentas. Sin embargo, actualmente solo se puede inscribir una cuenta o tener aplicada la directiva de protección de aplicaciones. En Android, esta limitación de una sola cuenta administrada es para todo el dispositivo.

Registro vs inscripción

El registro es el proceso en el que la aplicación informa al SDK de que se está usando una nueva cuenta. El SDK contiene funciones que la aplicación debe llamar para registrar y anular el registro de cuentas.

La inscripción es el proceso en el que el SDK registra la cuenta registrada con el servicio Intune para que pueda aplicar la directiva de la cuenta. La aplicación no necesita llamar a ninguna función para la inscripción. El SDK controla completamente la inscripción después de registrar una cuenta.

Si una cuenta ya está inscrita para la aplicación, cuando registra otra, incluso si esa cuenta está destinada a directivas de protección de aplicaciones, esa segunda cuenta no se inscribirá y no se aplicará la directiva.

Nota:

El término "inscripción" también puede hacer referencia a la inscripción de MDM en todo el dispositivo Obtén más información en el apéndice de inscripción a MDM y MAM.

Implementación del registro

Precaución

Si la aplicación no integra MSAL (muy recomendable), consulte Inscripción predeterminada en el Apéndice en lugar de continuar esta sección.

La aplicación debe realizar tres cambios de código para registrar correctamente una cuenta:

  1. La aplicación debe implementar y registrar una instancia de la interfaz MAMServiceAuthenticationCallback o MAMServiceAuthenticationCallbackExtended . La instancia de devolución de llamada debe registrarse en el onCreate() método (or onMAMCreate()) de la subclase Application.

  2. Cuando se crea una cuenta y el usuario inicia sesión correctamente con MSAL, la aplicación debe llamar a registerAccountForMAM.

  3. Cuando se quita una cuenta, la aplicación debe llamar a unregisterAccountForMAM para quitar la cuenta de la administración de Intune.

    Precaución

    La llamada puede iniciar un borrado para eliminar por completo los datos corporativos de la cuenta.

Todas las API de autenticación y registro necesarias se pueden encontrar en la interfaz MAMEnrollmentManager . Se puede obtener una referencia a la MAMEnrollmentManager siguiente manera:

MAMEnrollmentManager mgr = MAMComponents.get(MAMEnrollmentManager.class);

// make use of mgr

Se garantiza que la MAMEnrollmentManager instancia devuelta no será nula. Los métodos de la API se dividen en dos categorías: autenticación y registro de cuentas.

MAMEnrollmentManager y autenticación

El SDK se comunica frecuentemente con el servicio de Intune: para inscribir cuentas registradas, para obtener actualizaciones de la configuración de la directiva de protección de aplicaciones y para obtener acciones administrativas pendientes, como borrar selectivamente datos protegidos dentro de la aplicación. Para comunicarse correctamente con el servicio de Intune, el SDK requiere tokens de acceso nuevos de las aplicaciones que tienen MSAL integrado.

Si el SDK no puede recuperar un token nuevo, no podrá comunicarse con el servicio de Intune, lo que puede retrasar la recuperación y el cumplimiento de la nueva configuración de directiva o las acciones del administrador. Es fundamental que la aplicación complete estos pasos para garantizar una aplicación de directiva sin problemas.

En la fase 2, integró MSAL en la aplicación para la autenticación y la adquisición de tokens de acceso. Aquí, implementará una devolución de llamada de autenticación para permitir que el SDK solicite los tokens necesarios.

MAMEnrollmentManager tiene los siguientes métodos de autenticación:

interface MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String resourceId);
}
interface MAMServiceAuthenticationCallbackExtended extends MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String tenantId, String authority, String resourceId);
}
void registerAuthenticationCallback(MAMServiceAuthenticationCallback callback);
void updateToken(String upn, String aadId, String resourceId, String token);

Nota:

El aadId parámetro de estos métodos hace referencia al id. de usuario de Microsoft Entra, anteriormente conocido como id. de AAD y también conocido como OID.

  1. La aplicación debe implementar la interfaz MAMServiceAuthenticationCallback o la interfaz MAMServiceAuthenticationCallbackExtended para permitir que el SDK solicite un token de Microsoft Entra para la cuenta y el id. de recurso especificados. La instancia de devolución de MAMEnrollmentManager llamada se debe proporcionar llamando a su método registerAuthenticationCallback . Es posible que se necesite un token al principio del ciclo de vida de la aplicación para los reintentos de inscripción o las comprobaciones de actualización de la directiva de protección de aplicaciones, por lo que la devolución de llamada debe registrarse en el onCreate() método (or onMAMCreate()) de la subclase de la aplicación Application .

  2. El acquireToken método debe adquirir el token de acceso para el identificador de recurso solicitado para la cuenta dada. Si no puede adquirir el token solicitado, debería devolver null.

    Sugerencia

    Asegúrese de que la aplicación utiliza los resourceId parámetros y se aadId pasan para acquireToken() adquirir el token correcto. El upn parámetro es solo para uso informativo; no debe usarse para identificar una cuenta sin considerar también el aadId. Se resourceId debe usar para generar los alcances adecuados y se aadId debe usar para transmitir la cuenta correcta. Si se devuelven tokens para la cuenta incorrecta o el recurso incorrecto, podrían causar retrasos o errores en la inscripción de la aplicación y en la recuperación de directivas. Si la aplicación necesita la autoridad de Microsoft Entra para adquirir el token correctamente, implemente la MAMServiceAuthenticationCallbackExtended interfaz.

    class MAMAuthCallback implements MAMServiceAuthenticationCallbackExtended {
        public String acquireToken(String upn, String aadId,
                    String tenantId, String authority, String resourceId) {
            final String[] scopes = {resourceId + "/.default"};
    
            final IAccount account = getAccount(aadId);
            if (account == null) {
                // Log error or warning here about: "no account found for " + aadId
                return null;
            }
    
            AcquireTokenSilentParameters params =
                new AcquireTokenSilentParameters.Builder()
                        .forAccount(account)
                        .fromAuthority(account.getAuthority())
                        .withScopes(Arrays.asList(scopes))
                        .withCallback(callback)
                        .build();
    
            return mMsalClientApplication.acquireTokenSilent(params);
        }
    
        private static IAccount getAccount(String aadId) throws InterruptedException, MsalException {
          IAccount account = null;
    
          if (mMsalClientApplication instanceof IMultipleAccountPublicClientApplication) {
              IMultipleAccountPublicClientApplication multiAccountPCA =
                      (IMultipleAccountPublicClientApplication) mMsalClientApplication;
    
              account = multiAccountPCA.getAccount(aadId);
          } else {
              ISingleAccountPublicClientApplication singleAccountPCA =
                      (ISingleAccountPublicClientApplication) mMsalClientApplication;
    
              ICurrentAccountResult accountResult = singleAccountPCA.getCurrentAccount();
              if (accountResult != null) {
                  account = accountResult.getCurrentAccount();
                  // make sure this is the correct user
                  if (account != null && !account.getId().equals(aadId))
                      account = null;
              }
          }
          return account;
      }
    }
    
  3. En caso de que la aplicación no pueda proporcionar un token cuando el SDK llame acquireToken() , por ejemplo, si se produce un error en la autenticación silenciosa y es un momento inconveniente para mostrar una interfaz de usuario, la aplicación puede proporcionar un token más adelante llamando al método updateToken . El mismo UPN, Microsoft Entra ID e ID de recurso solicitados por la llamada acquireToken() anterior deben pasarse a updateToken(), junto con el token que finalmente se adquirió. El upn parámetro es solo para fines informativos y generalmente el SDK de MAM lo ignora. La aplicación debe llamar a este método tan pronto como sea posible después de devolver un valor nulo de la devolución de llamada proporcionada.

    Advertencia

    No llame updateToken() desde dentro de la implementación de acquireToken(). updateToken() debe usarse en el caso de que acquireToken() no se pueda adquirir un token.

    Nota:

    El SDK llamará acquireToken() periódicamente para obtener el token, por lo que la llamada updateToken() no es estrictamente necesaria. Sin embargo, se recomienda encarecidamente, ya que puede ayudar a que las inscripciones y las comprobaciones de las directivas de protección de aplicaciones se completen de manera oportuna.

Notas de implementación de autenticación

  • Se recomienda a las aplicaciones adquirir tokens de Microsoft Entra antes de llamar aregisterAccountForMAM. Después de registrar una cuenta, las aplicaciones recibirán una devolución de acquireToken() llamada al método de la registrada MAMServiceAuthenticationCallbacken un subproceso diferente. Proporcionar un token válido en esa devolución de llamada permite que la inscripción continúe. La aplicación obtiene el resultado de la inscripción mediante notificación.

  • Si la aplicación no devuelve un token de Microsoft Entra válido, el resultado final del intento de inscripción será AUTHORIZATION_NEEDED. Si la aplicación recibe este resultado a través de una notificación, se recomienda acelerar el proceso de inscripción adquiriendo el token para la cuenta y el recurso solicitados previamente a acquireToken y llamando al método updateToken para iniciar el proceso de inscripción de nuevo.

  • También se llamará a la aplicación registrada MAMServiceAuthenticationCallback para adquirir un token para las comprobaciones periódicas de actualización de la directiva de protección de aplicaciones. Si la aplicación no puede proporcionar un token cuando se le solicita, no recibirá una notificación, pero debe intentar adquirir un token y llamar updateToken() en el siguiente momento conveniente para acelerar el proceso de protección. Si no se proporciona un token, es posible que se llame a la devolución de llamada en el siguiente intento de comprobación.

  • La compatibilidad con nubes soberanas requiere proporcionar la autoridad.

  • Si MAMServiceAuthenticationCallbackExtended se implementa la interfaz, no es necesario implementar MAMServiceAuthenticationCallback el método heredadoacquireToken(), ya que la MAMServiceAuthenticationCallbackExtended interfaz proporciona una implementación predeterminada.

MAMEnrollmentManager y registro

Siempre que la aplicación agregue una cuenta, debe registrar la cuenta con el SDK. Del mismo modo, siempre que la aplicación quite una cuenta, debe anular el registro de esa cuenta para indicar que la aplicación ya no debe aplicar la directiva para esa cuenta. Si la cuenta se inscribió en el servicio MAM, se anulará la inscripción de la cuenta y se borrará la aplicación.

MAMEnrollmentManager tiene los siguientes métodos de registro de cuenta:

void registerAccountForMAM(String upn, String aadId, String tenantId);
void registerAccountForMAM(String upn, String aadId, String tenantId, String authority);
void unregisterAccountForMAM(String upn, String aadId);
Result getRegisteredAccountStatus(String upn, String aadId);
  1. Para registrar una cuenta para la administración, la aplicación debe llamar a registerAccountForMAM(). Una cuenta se identifica por su UPN y su identificador de usuario de Microsoft Entra. El id. del espacio empresarial también es necesario para asociar los datos de inscripción con el inquilino de Microsoft Entra de la cuenta. También se puede proporcionar la autoridad de la cuenta para permitir la inscripción en nubes soberanas específicas; para obtener más información, consulte Registro de Sovereign Cloud. El SDK puede intentar inscribir la aplicación para la cuenta determinada en el servicio MAM; Si se produce un error en la inscripción, volverá a intentarlo periódicamente hasta que la inscripción se realice correctamente o se anule el registro de la cuenta. El período de reintento suele ser de 12 a 24 horas. El SDK proporciona el estado de los intentos de inscripción de forma asincrónica mediante notificaciones.

  2. El mejor momento para llamar registerAccountForMAM es después de que el usuario haya iniciado sesión en la aplicación y se haya autenticado correctamente con MSAL. El identificador de usuario de Microsoft Entra, el identificador de inquilino y la autoridad de la cuenta se devuelven desde la llamada de autenticación MSAL como parte de la IAccount relación con el IAuthenticationResultarchivo

    • La cuenta proviene del IAuthenticationResult.getAccount() método y contiene la información pertinente de la cuenta.
    • El id. de AAD (también conocido como id. de Microsoft Entra ID u OID) proviene del IAccount.getId() método.
    • El identificador de inquilino procede del IAccount.getTenantId() método.
    • La autoridad proviene del IAccount.getAuthority() método.
  3. Para anular el registro de una cuenta de la administración de Intune, la aplicación debe llamar a unregisterAccountForMAM(). Si la cuenta se ha inscrito y se administra correctamente, el SDK anula la inscripción de la cuenta y borra sus datos. Se detendrán los reintentos de inscripción periódicos para la cuenta. El SDK proporciona el estado de las solicitudes de anulación de inscripción de forma asincrónica a través de la notificación.

Notas de implementación de registro

  • Los métodos de registro son idempotentes. Por ejemplo, registerAccountForMAM solo registrará una cuenta e intentará inscribir la aplicación si la cuenta aún no está registrada, y unregisterAccountForMAM solo anulará el registro de una cuenta si está registrada actualmente. Las llamadas posteriores son no-ops, por lo que no hay nada de malo en llamar a estos métodos más de una vez.

  • No hay ninguna garantía de que cada llamada de registro o anulación de registro tenga una notificación de resultado correspondiente. Por ejemplo, si registerAccountForMAM() se llama a una cuenta que ya está registrada, es posible que la notificación no se vuelva a enviar para esa identidad. Como alternativa, el SDK puede enviar notificaciones incluso cuando la aplicación no haya llamado a estos métodos, ya que el SDK puede intentar periódicamente realizar inscripciones en segundo plano, y las anulaciones de inscripción pueden desencadenarse mediante solicitudes de borrado recibidas del servicio de Intune.

  • Los métodos de registro se pueden llamar para cualquier número de cuentas diferentes, pero actualmente solo una cuenta puede inscribirse correctamente. Si se registran varias cuentas con licencia para Intune y dirigidas con la directiva de protección de aplicaciones al mismo tiempo o casi, no hay ninguna garantía de cuál ganará la carrera.

  • Puede consultar MAMEnrollmentManager para ver si una cuenta determinada está registrada y obtener su estado actual mediante el método getRegisteredAccountStatus . Si la cuenta proporcionada no está registrada, este método devuelve un valor nulo. Si la cuenta está registrada, este método devuelve el estado de la cuenta como uno de los miembros de la enumeración MAMEnrollmentManager.Result .

Registro de Sovereign Cloud

Azure admite varias nubes aisladas físicamente, conocidas como nubes soberanas o nacionales. Si la aplicación tiene reconocimiento de nube soberana, debe proporcionar el authority parámetro a registerAccountForMAM().

Guía de MSAL

Para MSAL, establézcalo multiple_clouds_supportedtrue en el archivo de configuración de MSAL.

{
  "multiple_clouds_supported": true,
}

Códigos de resultado y estado del registro

Cuando una cuenta se registra por primera vez, comienza en el PENDING estado, lo que indica que el intento inicial de inscripción en el servicio MAM no está completo. Una vez finalizado el intento de inscripción, se enviará una notificación con uno de los códigos de resultado de la tabla siguiente. Además, el método getRegisteredAccountStatus devuelve el estado de la cuenta para que la aplicación siempre pueda determinar si esa cuenta tiene directivas de protección de aplicaciones. Si se produce un error en el intento de inscripción, el estado de la cuenta puede cambiar con el tiempo a medida que el SDK vuelva a intentar la inscripción en segundo plano.

Código resultado Explicación
AUTHORIZATION_NEEDED Este resultado indica que la instancia MAMServiceAuthenticationCallback registrada de la aplicación no proporcionó un token o que el token proporcionado no era válido. La aplicación debe adquirir un token válido y llamar a updateToken si es posible.
NOT_LICENSED La cuenta no tiene licencia para Intune o el intento de ponerse en contacto con el servicio MAM de Intune ha fallado. La aplicación debe continuar en un estado no administrado (normal) y el usuario no debe estar bloqueado. Las inscripciones se volverán a intentar periódicamente en caso de que la cuenta obtenga una licencia en el futuro.
ENROLLMENT_SUCCEEDED El intento de inscripción se ha realizado correctamente o la cuenta ya está inscrita. En el caso de una inscripción correcta, se envía una notificación de actualización de directiva antes de esta notificación. Debe permitirse el acceso a los datos corporativos.
ENROLLMENT_FAILED Error en el intento de inscripción. Se pueden encontrar más detalles en los registros del dispositivo. La aplicación no debería permitir el acceso a datos corporativos en este estado, ya que anteriormente se determinó que la cuenta tiene licencia para Intune. Todas las aplicaciones deben asegurarse de que el acceso a los datos corporativos no está autorizado, hasta ENROLLMENT_SUCCEEDED que la aplicación lo obtenga.
WRONG_USER Solo una cuenta por dispositivo puede inscribir una aplicación con el servicio MAM. Este resultado indica que la cuenta para la que se entregó este resultado (la segunda cuenta) está destinada con la directiva MAM, pero ya hay una cuenta diferente inscrita. Dado que la directiva MAM no se puede aplicar para la segunda cuenta, la aplicación no debe permitir el acceso a los datos de esta cuenta (posiblemente quitando la cuenta de la aplicación) a menos que la inscripción para esta cuenta se realice correctamente más adelante. Al mismo tiempo que se entrega este WRONG_USER resultado, MAM ofrece al usuario final dos opciones para remediar: (1) quitar la cuenta inscrita existente para que la segunda cuenta pueda inscribirse, o (2) quitar la segunda cuenta (intentada) para que el aviso deje de aparecer mientras la cuenta existente permanece inscrita. Si el usuario elige la opción (1), será posible inscribir la segunda cuenta poco tiempo después. Si el usuario elige la opción (2), MAM anula el registro de la segunda cuenta localmente e informa UNENROLLMENT_SUCCEEDED de esa cuenta a través de la notificación de resultado de inscripción estándar. Debido a que la segunda cuenta nunca se inscribió, no se realiza ningún borrado selectivo y no se entrega ninguna notificación de borrado. MAM también detiene el reintento de inscripción de esa cuenta, por lo que el mensaje ya no vuelve a aparecer. Mientras la segunda cuenta permanezca registrada (es decir, el usuario no ha elegido la opción (2)), MAM reintenta la inscripción periódicamente.
UNENROLLMENT_SUCCEEDED La anulación de la inscripción se realizó correctamente.
UNENROLLMENT_FAILED Error en la solicitud de anulación de inscripción. Se pueden encontrar más detalles en los registros del dispositivo. En general, esto no se producirá siempre y cuando la aplicación pase un UPN válido (ni nulo ni vacío). No hay una corrección directa y confiable que la aplicación pueda tomar. Si se recibe este valor al anular el registro de un UPN válido, informe de que se trata de un error al equipo de MAM de Intune.
PENDING El intento de inscripción inicial de la cuenta está en curso. La aplicación puede bloquear el acceso a los datos corporativos hasta que se conozca el resultado de la inscripción, pero no es necesaria para hacerlo.
COMPANY_PORTAL_REQUIRED La cuenta tiene licencia para Intune, pero la aplicación no se puede inscribir hasta que la aplicación del Portal de empresa se instale en el dispositivo. El SDK de la aplicación de Intune intenta bloquear el acceso a la aplicación para la cuenta determinada e indica al usuario que instale la aplicación del Portal de empresa. Al enviar esta notificación a la aplicación, el SDK de la aplicación de Intune mostrará una interfaz de usuario sin bloqueo sobre la actividad actual si la actividad es visible actualmente para el usuario o si se llama a la próxima vezonResume. Si el usuario cancela esta interfaz de usuario sin bloqueo, el SDK de la aplicación de Intune mostrará una interfaz de usuario de bloqueo la próxima vez onCreate que se llame para una actividad y se administre la identidad actual (consulte a continuación para obtener más información sobre la solución de problemas).

El registro debe inicializarse temprano para obtener el máximo valor de los datos registrados. Application.onMAMCreate() suele ser el mejor lugar para inicializar el registro.

Para recibir registros MAM en la aplicación, cree un controlador de Java y agréguelo a MAMLogHandlerWrapper. Esto se invoca en el controlador de aplicaciones para cada mensaje de publish() registro.

/**
 * Global log handler that enables fine grained PII filtering within MAM logs.
 * To start using this you should build your own log handler and add it via
 * MAMComponents.get(MAMLogHandlerWrapper.class).addHandler(myHandler, false);
 * You may also remove the handler entirely via
 * MAMComponents.get(MAMLogHandlerWrapper.class).removeHandler(myHandler);
 */
public interface MAMLogHandlerWrapper {
    /**
     * Add a handler, PII can be toggled.
     * @param handler handler to add.
     * @param wantsPII if PII is desired in the logs.
     */
    void addHandler(final Handler handler, final boolean wantsPII);

    /**
     * Remove a handler.
     * @param handler handler to remove.
     */
    void removeHandler(final Handler handler);
}

Nota:

PII significa "información de identificación personal" y puede incluir datos como nombres de usuario y UPN. Se recomienda encarecidamente que excluya dicha información personal en sus propios registros de producción. Consulte la Directiva de privacidad de Microsoft para obtener más detalles.

La aplicación Portal de empresa de Intune tiene varias opciones para recopilar información de diagnóstico. El Portal de empresa incluye una interfaz de usuario que:

  • Permite a los usuarios finales recopilar registros del Portal de empresa.
  • Muestra metadatos del dispositivo y la cuenta.
  • Incluye información por aplicación sobre la directiva MAM actual.

Interfaz de usuario de diagnóstico de IntuneInformación de la aplicación de Intune

Para obtener una explicación detallada de los datos incluidos en los registros del Portal de empresa y en la interfaz de usuario de diagnóstico, vea Descripción de los registros del Portal de empresa en el Apéndice.

Sugerencia

Si estás probando con una cuenta que debería tener aplicada la directiva de MAM, pero los diagnósticos no muestran ninguna directiva para el nombre de paquete de la aplicación, consulta la sección Solución de problemas a continuación.

Las aplicaciones pueden iniciar esta interfaz de usuario de diagnóstico invocando MAMPolicyManager.showDiagnostics(context). Los usuarios finales también pueden iniciar la consola de diagnóstico del Portal de empresa a través de Microsoft Edge, escribiendo about:intunehelp en la barra de direcciones. Esta es una característica opcional que puede ayudar en la depuración.

Esta información de diagnóstico solo está disponible cuando el Portal de empresa está instalado en el dispositivo. Aparecerá un cuadro de diálogo de advertencia cada vez que showDiagnostics se llame sin el Portal de empresa instalado.

Criterios de salida

En este punto de la integración, la aplicación ahora puede recibir y aplicar la directiva de protección de aplicaciones. Ejecute las siguientes pruebas para validar la integración.

Primera prueba de aplicación de directiva

Ejecute primero la siguiente prueba para familiarizarse con la experiencia completa del usuario final de la aplicación de directivas en la aplicación:

  1. Cree una directiva de protección de aplicaciones Android en el Centro de administración de Microsoft Intune (consulte Creación de una directiva de protección de aplicaciones Android de prueba en la fase 1 para obtener más información). Para esta prueba, configure la directiva:
    • En Protección de datos, establezca "Captura de pantalla y Asistente de Google" en "Bloquear".
    • En Requisitos de acceso, deje la configuración predeterminada. En particular, "PIN para acceso" debe ser "Requerir".
  2. Asegúrese de que la directiva de protección de aplicaciones está dirigida a su aplicación. Es probable que necesite agregar manualmente el nombre del paquete en el asistente para la creación de directivas.
  3. Asigne la directiva de protección de aplicaciones a un grupo de usuarios que contenga la cuenta de prueba.
  4. En un dispositivo Android de prueba, desinstala otras aplicaciones integradas en SDK, como Microsoft Outlook, Teams, OneDrive y Office. Además, desinstale la aplicación Portal de empresa de Intune y la aplicación Microsoft Authenticator.
    • Sugerencia

      La desinstalación de otras aplicaciones integradas en el SDK te garantiza que estás probando exclusivamente la integración de tu propia aplicación.

  5. Instale la aplicación.
  6. Inicie sesión en la aplicación con la cuenta de prueba de destino de la directiva de protección de aplicaciones.
  7. Confirme que se le pide que instale el Portal de empresa de Intune desde Google Play.
    • Nota:

      Si el dispositivo de prueba no tiene la aplicación Google Play Store, confirme que se le solicita que instale el Portal de empresa de Intune desde otra tienda de aplicaciones o un sitio web de Microsoft.

  8. Instale el Portal de empresa. No es necesario iniciar el Portal de empresa ni iniciar sesión en el Portal de empresa.
  9. Vuelva a la aplicación e inicie sesión de nuevo, si es necesario.
  10. Confirme que aparece una pantalla Obtener acceso. Esto indica que el SDK ha recuperado correctamente la directiva para esta cuenta.
  11. Se le pedirá que establezca un PIN de aplicación. Crear un PIN.
  12. Navega por la aplicación e intenta hacer capturas de pantalla. Dado que el SDK tiene directiva, esto debe bloquearse de forma coherente en cualquier pantalla.
  13. Cierre la sesión de la cuenta administrada de la aplicación.
  14. Si es posible sin iniciar sesión, navegue por la aplicación e intente tomar capturas de pantalla. Ahora que se ha quitado la cuenta, esto no debería bloquearse.

Esta es una prueba mínima para confirmar que la aplicación ha registrado correctamente la cuenta, ha registrado la devolución de llamada de autenticación y ha anulado el registro de la cuenta. Ejecute las siguientes pruebas para validar más a fondo cómo otras configuraciones de directiva de protección de aplicaciones modifican el comportamiento de la aplicación.

Pruebas de protección de datos

Las siguientes pruebas cubren opciones específicas de protección de datos configuradas dentro de la Directiva de protección de aplicaciones. Al cambiar la configuración de la directiva de protección de aplicaciones en el Centro de administración de Microsoft Intune, el cliente no se actualizará inmediatamente. Consulte Pruebas rápidas con política cambiante para obtener consejos sobre cómo acelerar las pruebas.

Para estas pruebas:

  1. Instale la aplicación.
  2. Instale el Portal de empresa de Intune.
  3. Instale otra aplicación administrada, destinada con la misma directiva que la aplicación, que pueda copiar y pegar datos (como Microsoft Office).
  4. Instale (o reutilice) cualquier aplicación no administrada que pueda copiar y pegar datos.
  5. Inicie sesión en la aplicación con la cuenta administrada de prueba.
  6. Inicie sesión en la otra aplicación administrada con la cuenta de prueba administrada.
Escenario Configuración de directiva de protección de aplicaciones Pasos de prueba
Captura de pantalla "Captura de pantalla y Asistente de Google" establecido en "Bloquear" 1. Vaya a todas las páginas de la aplicación.
2. Intente realizar una captura de pantalla en cada página.
3. Confirma que las capturas de pantalla están bloqueadas o que la imagen guardada está completamente en blanco.
Copiar texto "Restringir cortar, copiar y pegar entre otras aplicaciones" establecido en "aplicaciones administradas por directivas" 0. Si la aplicación no tiene texto para copiar, omite.
1. Vaya a todas las páginas de la aplicación que tengan texto copiable.
2. Copie el texto.
3. Cambiar a la aplicación no administrada.
4. Intenta pegar en la aplicación no administrada.
5. Confirme que la pasta está bloqueada.
6. Vaya a la otra aplicación administrada.
7. Intente pegar en la aplicación administrada.
8. Confirme que se permite pegar.
Pegar texto "Restringir cortar, copiar y pegar entre otras aplicaciones" establecido en "aplicaciones administradas por directivas" 0. Si la aplicación no tiene ninguna entrada de texto para pegar, omitir.
1. Cambiar a la aplicación no administrada.
2. Copie el texto de la aplicación no administrada.
3. Vaya a todas las páginas de la aplicación que tengan entradas de texto.
5. Intenta pegar desde la aplicación no administrada.
5. Confirme que la pasta está bloqueada.
6. Cambiar a la otra aplicación administrada.
7. Copie el texto de la otra aplicación administrada.
7. Vaya a todas las páginas de la aplicación que tengan entradas de texto.
8. Intente pegar desde la otra aplicación administrada.
9. Confirme que se permite pegar.
Impresión "Impresión de datos de organización" establecida en "Bloquear" 0. Si tu aplicación no tiene páginas o documentos que se puedan imprimir, omite.
1. Vaya a todas las páginas de la aplicación que invocan la función de impresión de Android.
2. Intente imprimir desde cada página.
3. Confirme que la impresión está bloqueada.
Restricción de contenido web de Microsoft Edge "Restringir la transferencia de contenido web con otras aplicaciones" establecido en "Microsoft Edge" 0. Si la aplicación no representa vínculos web, omita.
1. Vaya a todas las páginas de la aplicación que pueden mostrar vínculos web o tener una entrada de texto que se convierte en vínculos web en los que se puede hacer clic.
2. Seleccione el vínculo web para cada página.
3. Confirma que se te pide instalar Microsoft Edge y que el vínculo web no se abre en otro explorador.
Teclado restringido "Teclados aprobados" establecido en "Obligatorio"
"Seleccionar teclados para aprobar" establecido en solo un paquete de teclado que el dispositivo no tiene instalado actualmente
0. Si la aplicación no tiene ninguna entrada de texto, omita.
1. Vaya a todas las páginas de la aplicación que tengan entradas de texto.
2. Seleccione la entrada de texto para que aparezca el teclado del dispositivo.
3. Confirma que se te pide que instales el teclado aprobado configurado y que el teclado del dispositivo actual no se abre.

Pruebas de transferencia de datos

La configuración de transferencia de datos es un subconjunto de las características de protección de datos de la Directiva de protección de aplicaciones que controlan los datos que entran y salen de las aplicaciones administradas. La mayoría de las aplicaciones que admiten el envío o la recepción de datos de otras aplicaciones también tienen la capacidad de guardar datos y abrir datos desde el almacenamiento local o en la nube. Si la aplicación tiene estas funcionalidades, tendrás que implementar compatibilidad adicional. Consulte Directiva para limitar la transferencia de datos entre aplicaciones y dispositivos o ubicaciones de almacenamiento en la nube para obtener más información.

La aplicación puede importar datos activamente de otras aplicaciones, como Microsoft Outlook adjuntando un archivo de Microsoft OneDrive. La aplicación también puede recibir datos de forma pasiva de otras aplicaciones, como Microsoft Office que abre un documento desde datos adjuntos de Microsoft Outlook. La configuración de directiva "recibir datos de otras aplicaciones" cubre ambos escenarios.

Para estas pruebas:

  1. Instale la aplicación.
  2. Instale el Portal de empresa de Intune.
  3. Instale otra aplicación administrada, destinada con la misma directiva que la aplicación, que pueda enviar y recibir datos (como Microsoft Outlook).
  4. Instale (o reutilice) cualquier aplicación no administrada que pueda enviar y recibir datos.
  5. Inicie sesión en la aplicación con la cuenta administrada de prueba.
  6. Inicie sesión en la otra aplicación administrada con la cuenta de prueba administrada.
Escenario Configuración de directiva de protección de aplicaciones Pasos de prueba
Enviar datos a otras aplicaciones "Enviar datos de la organización a otras aplicaciones" establecido en "Aplicaciones administradas por directivas" 0. Si la aplicación no puede enviar datos a otras aplicaciones, omita.
1. Navegue hasta donde la aplicación puede enviar datos.
2. Intentar enviar datos.
3. Confirme que está limitado a enviar datos solo a otras aplicaciones administradas. Debería ver un selector de aplicaciones solo con aplicaciones administradas.
Importar datos de otras aplicaciones "Recibir datos de otras aplicaciones" establecido en "Aplicaciones administradas por directivas" 0. Si la aplicación no puede importar datos de otras aplicaciones, omita.
1. Vaya a donde la aplicación puede importar datos de otras aplicaciones.
2. Intente importar datos.
3. Confirme que está limitado a importar datos solo desde otras aplicaciones administradas. Debería ver un selector de aplicaciones solo con aplicaciones administradas.
Recibir datos de una aplicación no administrada "Recibir datos de otras aplicaciones" establecido en "Aplicaciones administradas por directivas" 0. Si la aplicación no puede recibir datos de otras aplicaciones, omita.
1. Cambiar a la aplicación no administrada.
2. Navegue hasta donde pueda enviar datos.
3. Intente enviar datos de la aplicación no administrada a la aplicación.
4. Confirme que la aplicación no puede recibir datos de la aplicación no administrada.
Recibir datos de aplicaciones administradas "Recibir datos de otras aplicaciones" establecido en "Aplicaciones administradas por directivas" 0. Si la aplicación no puede recibir datos de otras aplicaciones, omita.
1. Cambiar a la otra aplicación administrada.
2. Navegue hasta donde pueda enviar datos.
3. Intente enviar datos de la otra aplicación administrada a la aplicación.
4. Confirme que la aplicación puede recibir datos de la otra aplicación administrada.

Otras configuraciones de protección de datos

La siguiente configuración de protección de datos no se aplicará hasta que su aplicación realice cambios adicionales. No es necesario probar esta configuración en esta etapa. Consulte la Etapa 7: Funciones de participación en la aplicación para obtener más detalles.

Escenario Configuración de directiva de protección de aplicaciones Debe implementar el apoyo si...
Guardar copias de datos Guardar copias de los datos de la organización La aplicación puede guardar datos en el almacenamiento local o en la nube.
Apertura de datos desde el almacenamiento Abrir datos en documentos de la organización La aplicación puede abrir datos desde el almacenamiento local o en la nube.
Contenido de notificación administrado Notificaciones de datos de la organización La aplicación incluye datos de usuario dentro de las notificaciones.
Copia de seguridad y restauración Copia de seguridad de datos de la organización en servicios de copia de seguridad de Android La aplicación comparte los datos de usuario con la característica de copia de seguridad de Android.

Pruebas de lanzamiento condicionales

La configuración de inicio condicional es un subconjunto de características de la Directiva de protección de aplicaciones que restringen el acceso a la aplicación en función de criterios configurables para todo el dispositivo o específicos de la aplicación. Esta configuración incluye tanto condiciones (como "versión mínima del sistema operativo") como acciones (como "bloquear acceso"). Las acciones de inicio condicionales pueden ser:

  • Advertir: el usuario final ve un cuadro de diálogo de advertencia cuando su dispositivo o aplicación no cumple los criterios. Seguirán teniendo acceso a todos los datos de la aplicación.
  • Bloquear el acceso: el usuario final ve un cuadro de diálogo de advertencia cuando su dispositivo o aplicación no cumple los criterios. No se les permitirá entrar en la aplicación y acceder a los datos de la aplicación hasta que cumplan los criterios o quiten la cuenta administrada de la aplicación.
  • Borrar datos: todos los datos corporativos asociados a la cuenta administrada se borrarán cuando el dispositivo o la aplicación no cumplan los criterios. El usuario no tendrá la oportunidad de cumplir los criterios antes de que se quiten los datos.

Algunas opciones de inicio condicional se pueden configurar con varios valores y acciones. Por ejemplo:

  • Versión mínima del sistema operativo, valor de "10.0", acción establecida en "Advertir".
  • Versión mínima del sistema operativo, valor de "9.0", acción establecida en "Bloquear acceso"
  • Versión mínima del sistema operativo, valor de "8.0", acción establecida en "Borrar datos".

Al completar los pasos de integración en esta etapa, la aplicación ahora admite todas las características de inicio condicional. Familiarízate con la funcionalidad de inicio condicional cambiando los elementos de directiva de modo que el dispositivo de prueba:

  • Pasa todas las opciones de inicio condicional configuradas.
  • Falla una configuración de inicio condicional establecida en la acción "Advertir".
  • Falla una configuración de inicio condicional establecida en la acción "Bloquear acceso".
  • Falla una configuración de inicio condicional establecida en la acción "Borrar datos".

Solución de problemas

Solución de problemas de pruebas de aplicación de primera directiva

Siguiendo los pasos anteriores de la primera prueba de aplicación de directivas , puede encontrarse con los siguientes comportamientos inesperados:

Después de iniciar sesión con una cuenta administrada, no se me pide que instale el Portal de empresa (paso 7)

En primer lugar, visite el centro de administración de Intune y compruebe que la directiva de protección de aplicaciones está dirigida a la cuenta de prueba.

En segundo lugar, verifique nuevamente su código fuente para las llamadas y registerAccountForMAM la implementación de MAMServiceAuthenticationCallback. Si no se llama al primero en el momento adecuado y/o el segundo no proporcionó correctamente un token válido, no verá el mensaje del Portal de empresa.

Por último, busque en los registros (o en la depuración) el código de resultado del registro o llame getRegisteredAccountStatus explícitamente a la cuenta. Los códigos como NOT_LICENSED pueden indicar problemas de configuración con la cuenta de prueba.

No he visto la pantalla Obtener acceso después de iniciar sesión (paso 10)

Si el Portal de empresa no se instaló anteriormente, es posible que deba reanudar o reiniciar completamente la aplicación para ver la pantalla Obtener acceso y aplicar correctamente la directiva. Este es un resultado esperado en función de cómo las aplicaciones integradas en SDK aprovechan el código dentro de la aplicación del Portal de empresa.

Si sigue sin ver la pantalla Obtener acceso, incluso después de reiniciar la aplicación y volver a iniciar sesión, es posible que el SDK no pueda inscribir la cuenta o recuperar la directiva para la cuenta. Compruebe la implementación del MAMServiceAuthenticationCallbackarchivo .

No vi la pantalla para establecer o introducir un PIN de aplicación después de iniciar sesión (paso 11)

¿Hay otras aplicaciones integradas en SDK en el dispositivo de prueba? El PIN de la aplicación se comparte entre todas las aplicaciones administradas y el SDK tiene un temporizador global para evitar que se pida a los usuarios finales el PIN en cada inicio o reanudación de aplicaciones administradas.

En caso contrario, visite el centro de administración de Intune y compruebe que la directiva de protección de aplicaciones tiene habilitado el PIN de aplicación y está dirigida a la cuenta de prueba.

Como último recurso, reiniciar el dispositivo restablecerá el temporizador del PIN. Si no se muestra la pantalla del PIN después de reiniciar el dispositivo, es probable que no esté configurado correctamente en la directiva.

He visto la pantalla Obtener acceso, pero las capturas de pantalla siguen permitidas (paso 12)

Mientras se recupera la directiva, se aplica la directiva incorrecta. En primer lugar, visite el centro de administración de Intune y compruebe que la directiva de protección de aplicaciones deshabilita las capturas de pantalla y está dirigida a la cuenta de prueba. En segundo lugar, usa la consola de diagnóstico (descrita anteriormente) para comprobar la directiva que se ha desplegado para la aplicación. Si ambas directivas confirman que las capturas de pantalla deben bloquearse, verifique la configuración del complemento de compilación de Gradle para asegurarse de que se realicen reemplazos de MAM.

Mi aplicación pareció bloquearse o cerrarse después de cerrar la sesión (paso 13)

Al anular el registro de una cuenta que se inscribió anteriormente y cuya directiva se aplicaba, el SDK borrará los datos asociados a esa cuenta. Se espera que el proceso de la aplicación termine.

Las capturas de pantalla siguen bloqueadas incluso después de cerrar la sesión (paso 14)

Compruebe el código fuente para ver si hay llamadas a unregisterAccountForMAM(). Si la directiva se sigue aplicando después de cerrar la sesión, es probable que la cuenta no se haya cancelado correctamente su registro y su inscripción.

Solución de problemas de pruebas de protección de datos

Siguiendo los pasos anteriores de las pruebas de protección de datos , puede encontrarse con los siguientes comportamientos inesperados:

Mi aplicación no recibe ni aplica ninguna directiva

En primer lugar, confirme que la directiva de protección de aplicaciones está dirigida a un grupo que contiene la cuenta de prueba. Consulte Cómo validar la configuración de la directiva de protección de aplicaciones en Microsoft Intune para obtener más información.

En segundo lugar, compruebe la información de diagnóstico del cliente para confirmar que el SDK ha recibido la directiva configurada. Si no lo ha hecho, inspeccione la implementación de la aplicación y MAMServiceAuthenticationCallback las llamadas a registerAccountForMAM. Compruebe también los registros o la depuración para comprobar el MAMEnrollmentManager.Resultarchivo

Mi aplicación puede compartir datos con una aplicación no administrada

Confirme que "Enviar datos de la organización a otras aplicaciones" esté establecido en "Aplicaciones administradas por directivas". Compruebe el Centro de administración de Microsoft Intune para confirmar que la directiva está configurada y dirigida correctamente. Compruebe la información de diagnóstico del cliente para confirmar que el SDK ha recibido la directiva configurada.

A continuación, si la directiva está configurada y recuperada correctamente, comprueba si se está aplicando alguna directiva: Mi aplicación no recibe ni aplica ninguna directiva.

Mi aplicación no puede compartir datos con otra aplicación administrada

Confirme la configuración de la directiva de protección de aplicaciones destinada tanto a la aplicación como a la otra aplicación administrada. Se recomienda que la misma directiva se dirija a ambas aplicaciones. La directiva destinada a la aplicación debe tener "Enviar datos de la organización a otras aplicaciones" establecido en "Aplicaciones administradas por directivas". Compruebe la directiva dirigida a la otra aplicación; si tiene "Recibir datos de otras aplicaciones" establecido en "Ninguno", este comportamiento es normal.

Mi aplicación puede recibir datos de una aplicación no administrada

Confirme que "Recibir datos de otras aplicaciones" esté establecido en "Aplicaciones administradas por directivas". Compruebe el Centro de administración de Microsoft Intune para confirmar que la directiva está configurada y dirigida correctamente. Compruebe la información de diagnóstico del cliente para confirmar que el SDK ha recibido la directiva configurada.

A continuación, si la directiva está configurada y recuperada correctamente, comprueba si se está aplicando alguna directiva: Mi aplicación no recibe ni aplica ninguna directiva.

Mi aplicación no puede recibir datos de otra aplicación administrada

Confirme la configuración de la directiva de protección de aplicaciones destinada tanto a la aplicación como a la otra aplicación administrada. Se recomienda que la misma directiva se dirija a ambas aplicaciones. La directiva destinada a la aplicación debe tener "Recibir datos de otras aplicaciones" establecido en "Aplicaciones administradas por directivas". Compruebe la directiva dirigida a la otra aplicación; si tiene "Enviar datos de la organización a otras aplicaciones" establecido en "Ninguno", este comportamiento es normal.

Pasos siguientes

Una vez que haya completado todos los criterios de salida anteriores, la aplicación ahora está correctamente integrada como identidad única y puede aplicar todas las directivas básicas de protección de aplicaciones. Las secciones siguientes, Fase 5: Multiidentidad, Fase 6: App Configuration y Fase 7: Participación en la aplicación Las características pueden o no ser necesarias, en función del soporte de directiva de protección de aplicaciones deseado de la aplicación. Si no está seguro de si alguna de estas secciones se aplica a la aplicación, vuelva a visitar Decisiones clave para la integración del SDK.