SDK de la aplicación de Intune para Android: características de participación en la aplicación

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 se integra con el SDK de Intune App. 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 Planear la integración.

Fase 7: Características de participación en la aplicación

Objetivos de la etapa

  • Obtenga información sobre las características de participación en aplicaciones que ofrece el SDK de aplicaciones de Intune.
  • Integre las características de participación de la aplicación relevantes para su aplicación y sus usuarios.
  • Pruebe la integración de esas características.

¿Qué son las "Funciones de participación en aplicaciones"?

Este proceso de integración de SDK intenta minimizar la cantidad de código específico de la aplicación que los desarrolladores necesitan escribir. Al completar correctamente las etapas anteriores de la integración del SDK, la aplicación ahora aplica la mayoría de la configuración de directiva de protección de aplicaciones, como el cifrado de archivos, las restricciones de copiar y pegar, el bloqueo de capturas de pantalla y las restricciones de transferencia de datos.

Sin embargo, algunas configuraciones requieren que el código específico de la aplicación se aplique correctamente; Estas opciones de configuración se denominan características de participación de aplicaciones. Normalmente, el SDK no tiene suficiente contexto sobre el código de la aplicación o el escenario del usuario final para aplicar automáticamente esta configuración y, por tanto, depende de que los desarrolladores llamen a las API del SDK correctamente.

Las características de participación en la aplicación no son necesariamente opcionales. En función de las características existentes de la aplicación, es posible que estas características sean necesarias. Consulte Decisiones clave para la integración de SDK para obtener más información.

En las etapas anteriores de esta guía ya se describen varias características de participación de la aplicación:

En el resto de esta guía se describe el conjunto restante de características de participación de la aplicación:

  • Aplique la directiva que restringe el guardado de archivos o la apertura de archivos desde el almacenamiento local o en la nube.
  • Aplicar la directiva que restringe el contenido de las notificaciones.
  • Aplique la directiva que protege los datos de copia de seguridad.
  • Aplicar la directiva que restringe la captura de pantalla (si la aplicación tiene código de captura de pantalla personalizado).
  • Soporte técnico de App Protection CA.
  • Regístrese para recibir notificaciones del SDK.
  • Aplique temas de aplicación personalizados.
  • Use certificados de confianza de Intune, lo que garantiza una cadena de confianza para los puntos de conexión locales.

Participación en la aplicación Conceptos básicos de la característica

La interfaz AppPolicy contiene muchos métodos que informan a la aplicación si se permiten determinadas acciones.

La mayoría de las características de participación en aplicaciones implican:

  • Identificar el lugar correcto en el código de la aplicación para comprobar si se permite una acción.
  • Llamar a un AppPolicy método para comprobar si se permite una acción, en función de la directiva configurada actualmente.
  • Dependiendo del resultado, ya sea permitir que la acción se complete o modificar el comportamiento de la aplicación cuando se bloquea la acción.

Para recuperar una AppPolicy instancia, utilice uno de los métodos MAMPolicyManager, como getPolicy(final Context context) or .getPolicyForIdentityOID(final String oid)

Métodos informativos en AppPolicy

No todos los métodos están vinculados a una función de participación de AppPolicy la aplicación. Algunos métodos son informativos y proporcionan datos de la aplicación sobre qué directivas están configuradas actualmente, incluso si el SDK aplica automáticamente esas directivas. Estos métodos existen para ofrecer a la aplicación la oportunidad de presentar experiencias de usuario personalizadas cuando se configuran directivas específicas.

Ejemplo: Determinar si las capturas de pantalla están bloqueadas

Si la aplicación tiene un control que permite al usuario realizar una captura de pantalla, considere la posibilidad de deshabilitar u ocultar ese control si la Directiva de protección de aplicaciones bloquea las capturas de pantalla.

La aplicación puede comprobarlo llamando a MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Directiva para limitar la transferencia de datos entre aplicaciones y dispositivos o ubicaciones de almacenamiento en la nube

Muchas aplicaciones permiten al usuario final guardar datos o abrir datos desde el almacenamiento de archivos local o los servicios de almacenamiento en la nube. El SDK de aplicaciones de Intune permite a los administradores de TI protegerse contra la entrada y el filtrado de datos al restringir dónde pueden guardar y abrir datos las aplicaciones.

Nota:

Si la aplicación permite guardar en ubicaciones personales o en la nube directamente desde la aplicación o permite abrir datos directamente en la aplicación, debe implementar esta característica de participación de la aplicación SDK de aplicaciones de Intune** para permitir que los administradores de TI bloqueen este guardado y apertura.

Guardar en el dispositivo o almacenamiento en la nube

La getIsSaveToLocationAllowedForOID API permite que la aplicación sepa si se permite guardar en determinadas ubicaciones para una identidad determinada, en función de la directiva configurada:

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);

Para determinar si la aplicación debe implementar la comprobación, determine si admite la getIsSaveToLocationAllowedForOID salida de datos revisando la tabla siguiente:

service Parámetro: SaveLocation Valor enumerado Caso de uso OID asociado
ONEDRIVE La aplicación guarda datos en OneDrive. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
SHAREPOINT La aplicación guarda datos en SharePoint. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
BOX La aplicación guarda datos en Box. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
LOCAL La aplicación guarda datos en una ubicación de almacenamiento externo en el dispositivo que no es el almacenamiento privado de la aplicación. Esta ubicación de almacenamiento no se considera un servicio en la nube y siempre debe usarse con un null parámetro OID.
PHOTO_LIBRARY La aplicación está guardando datos en el almacenamiento de fotos local de Android. El almacenamiento de fotos local no se considera un servicio en la nube y siempre debe usarse con un null parámetro OID.
IMANAGE La aplicación está guardando datos en iManage. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
EGNYTE La aplicación está guardando datos en Egnyte. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
ACCOUNT_DOCUMENT La aplicación guarda datos en una ubicación asociada a una cuenta dentro de la aplicación y no es una de las ubicaciones en la nube específicas de esta tabla.

Use esta ubicación para determinar si se pueden pasar datos entre cuentas dentro de una aplicación de varias identidades.
OID para una cuenta usada para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
OTHER La aplicación guarda datos en una ubicación no especificada en esta tabla y que no cumple los criterios de ACCOUNT_DOCUMENT. No oid se evalúa para esta ubicación y debe ser null.

Siempre se permiten los Files colocados en el almacenamiento privado de aplicaciones que son necesarios para el funcionamiento de la aplicación o que se descargan temporalmente para su visualización; no es necesario comprobar getIsSaveToLocationAllowedForOID. Compruebe SaveLocation.LOCAL si hay

  1. Files saved outside private app storage.
  2. Files descargados en el almacenamiento privado de aplicaciones que no son necesarios para el funcionamiento de la aplicación (por ejemplo, cuando el usuario elige explícitamente descargar en el dispositivo).

Nota:

Al comprobar la directiva de guardado, oid debe ser el OID de la cuenta asociada al servicio en la nube en el que se está guardando (esta cuenta no es necesariamente la misma que la cuenta propietaria del documento que se está guardando).

Abrir datos desde una ubicación de almacenamiento local o en la nube

La getIsOpenFromLocationAllowedForOID API permite que la aplicación sepa si se permite la apertura desde determinadas ubicaciones para una identidad determinada, en función de la directiva configurada:

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);

Para determinar si la aplicación debe implementar la comprobación, determine si admite la getIsOpenFromLocationAllowedForOID entrada de datos revisando la tabla siguiente:

location Parámetro: OpenLocation Valor enumerado Caso de uso OID asociado
ONEDRIVE_FOR_BUSINESS La aplicación abre datos desde OneDrive. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
SHAREPOINT La aplicación abre datos desde SharePoint. OID de una cuenta que se utiliza tanto para la autenticación de servicios en la nube como para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
CAMERA La aplicación abre datos desde la cámara del dispositivo. Un null valor, porque la cámara del dispositivo no es un servicio en la nube.
LOCAL La aplicación abre datos desde una ubicación de almacenamiento externa en el dispositivo que no es el almacenamiento privado de la aplicación. Aunque el almacenamiento externo no es un servicio en la nube, se espera un oid parámetro porque indica la propiedad.

* Para los archivos etiquetados con identidad:oid Debe ser la identidad del propietario del archivo.
* Para los archivos sin etiqueta de identidad:oid debería ser null.
PHOTO_LIBRARY La aplicación abre datos desde el almacenamiento de fotos local de Android. El almacenamiento de fotos local no se considera un servicio en la nube y siempre debe usarse con un null parámetro OID.
ACCOUNT_DOCUMENT La aplicación abre datos desde una ubicación asociada a una cuenta dentro de la aplicación y no es una de las ubicaciones en la nube específicas de esta tabla.

Use esta ubicación para determinar si se pueden pasar datos entre cuentas dentro de una aplicación de varias identidades.
OID para una cuenta usada para la autenticación de Microsoft Entra. Si esta cuenta no existe o no se conoce el OID, use null.
OTHER La aplicación abre datos desde una ubicación no especificada en esta tabla y que no cumple los criterios de ACCOUNT_DOCUMENT. No oid se evalúa para esta ubicación y debe ser null.

Nota:

Al comprobar la directiva abierta, oid debe ser el OID de la cuenta asociada al archivo o servicio en la nube desde el que se abre (no necesariamente el mismo que la cuenta que abre el documento).

Sugerencia

Para mayor comodidad, el SDK proporciona el método AppPolicy.isOpenFromLocalStorageAllowed que toma un File parámetro para un archivo en el almacenamiento local. Para la aplicación de directivas, este método es funcionalmente idéntico a la llamada AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) , excepto que controla el análisis del propietario del oid archivo desde el Filearchivo .

Compartir cuadro de diálogo bloqueado

El SDK proporciona un cuadro de diálogo para notificar al usuario cuando la directiva MAM bloquea una acción de transferencia de datos.

El cuadro de diálogo debe mostrarse al usuario siempre que la llamada a la getIsSaveToLocationAllowedForOID API o getIsOpenFromLocationAllowedForOID resulte en el bloqueo de la acción de guardar/abrir. El cuadro de diálogo muestra un mensaje genérico y vuelve a la llamada Activity cuando se descarta.

Para mostrar el cuadro de diálogo, agregue el código siguiente:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Permitir el uso compartido de archivos

Si no se permite guardar en ubicaciones de almacenamiento públicas, la aplicación debería permitir al usuario ver los archivos descargándolos en el almacenamiento privado de la aplicación y, a continuación, abriéndolos con el selector del sistema.

Directiva para restringir el contenido dentro de las notificaciones

Para las aplicaciones de identidad única, el comportamiento predeterminado del SDK de aplicación de Intune intenta bloquear todas las notificaciones cuando la directiva de protección de aplicaciones restringe las notificaciones.

El comportamiento predeterminado del SDK es limitado. El SDK no puede respetar automáticamente el valor "Bloquear datos de la organización", que está pensado para quitar solo el contenido administrado de las notificaciones. En el caso de las aplicaciones de varias identidades, el SDK no puede determinar qué notificaciones contienen contenido administrado.

Si la aplicación muestra notificaciones y es de varias identidades o necesita respetar el valor "Bloquear datos de la organización", debe comprobar la directiva de restricción de notificaciones de la cuenta asociada a la notificación antes de mostrar la notificación.

Para determinar si se aplica la directiva, realice la siguiente llamada:

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();

La enumeración devuelta NotificationRestriction tiene los siguientes valores:

NotificationRestriction Enumeración Comportamiento esperado de la aplicación
BLOCKED La aplicación no debe mostrar ninguna notificación para la cuenta asociada a esta directiva. Para las aplicaciones de identidad única, el SDK de aplicaciones de Intune bloquea todas las notificaciones automáticamente y no se requiere ningún código adicional.
BLOCK_ORG_DATA La aplicación debe mostrar una notificación modificada que no contenga datos de la organización.
UNRESTRICTED La aplicación debería mostrar todas las notificaciones.

Si la aplicación no invoca getNotificationRestrictioncorrectamente , el SDK de MAM hace todo lo posible para restringir las notificaciones automáticamente solo para las aplicaciones de identidad única.

En este caso, BLOCK_ORG_DATA se trata igual que BLOCKED y la notificación no se muestra en absoluto.

Para un control más preciso, compruebe el valor de las notificaciones de getNotificationRestriction aplicación y modifíquelas adecuadamente.

Directiva para proteger los datos de copia de seguridad

El SDK de la aplicación de Intune puede bloquear la carga de datos en la característica de copia de seguridad y restauración integrada de Android. Para obtener más información sobre copia de seguridad y restauración en Android, consulte la guía de API de Android y los cambios introducidos en Android S / 12 en Cambiar a copia de seguridad y restauración.

Copia de seguridad automática para aplicaciones

A partir de Android M, Android proporciona copias de seguridad completas automáticas en Google Drive para aplicaciones, independientemente de la API de destino de la aplicación.

Intune le permite usar todas las características de copia de seguridad automática que proporciona Android, incluida la capacidad de definir reglas personalizadas en XML, con instrucciones de integración de Intune específicas para garantizar que se aplica la protección de datos.

Configuración del comportamiento de copia de seguridad en el manifiesto de la aplicación

De forma predeterminada, android:allowBackup se establece en true como se describe en habilitar y deshabilitar la copia de seguridad.

Si la aplicación no requiere la funcionalidad completa de copia de seguridad y restauración, establézcala android:allowBackup en false. En este caso, no es necesario realizar ninguna otra acción y los datos corporativos permanecen dentro de la aplicación.

Si la aplicación requiere la funcionalidad completa de copia de seguridad y restauración, establézcala android:allowBackup en true y realice los pasos siguientes:

  1. Si la aplicación no usa su propio personalizadoBackupAgent, use el MAMBackupAgent predeterminado para habilitar copias de seguridad completas automáticas que cumplan con la directiva de Intune. Coloque lo siguiente en el manifiesto de la aplicación:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. Opcional. Si implementa un personalizado BackupAgent, debe utilizar MAMBackupAgent o MAMBackupAgentHelper. Consulte las secciones siguientes. Considere la posibilidad de cambiar a MAMDefaultBackupAgent de Intune, descrito en el paso 1, que proporciona una copia de seguridad fácil en Android M y versiones posteriores.

  3. Cuando decida qué tipo de copia de seguridad completa debe recibir la aplicación (sin filtrar, filtrada o ninguna), establezca el atributo android:fullBackupContent en true, falseo un recurso XML en la aplicación.

  4. A continuación, debe copiar el valor de android:fullBackupContent en la etiqueta de com.microsoft.intune.mam.FullBackupContent metadatos y, para las aplicaciones que admiten el formato de configuración XML que se agrega en la API 31, en la etiqueta de com.microsoft.intune.mam.DataExtractionRules metadatos.

    • Ejemplo 1: si desea que la aplicación tenga copias de seguridad completas sin exclusiones, debe establecer las etiquetas de atributos y metadatos en true:

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • Ejemplo 2: si desea que la aplicación use sus BackupAgent copias de seguridad automáticas personalizadas y no participen en copias de seguridad automáticas completas, compatibles con la directiva de Intune, debe establecer las etiquetas de atributos y metadatos en false:

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • Ejemplo 3: Si desea que la aplicación tenga copias de seguridad completas de acuerdo con las reglas personalizadas definidas en un archivo XML, establezca el atributo y la etiqueta de metadatos en el mismo recurso XML:

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

Copia de seguridad de clave/valor

La opción de copia de seguridad de clave/valor está disponible para todas las API 8+ y carga los datos de la aplicación en el servicio de copia de seguridad de Android. La cantidad de datos por aplicación está limitada a 5 MB. Si usa la copia de seguridad de clave/valor, debe usar un BackupAgentHelper o un BackupAgent.

BackupAgentHelper

BackupAgentHelper es más fácil de implementar que BackupAgent tanto en términos de funcionalidad nativa de Android como de integración de Intune MAM. BackupAgentHelper permite al desarrollador registrar archivos completos y preferencias compartidas en y FileBackupHelperSharedPreferencesBackupHelper (respectivamente) que luego se agregan a BackupAgentHelper tras la creación. Siga estos pasos para usar BackupAgentHelper con MAM de Intune:

  1. Para usar la copia de seguridad de varias identidades con un BackupAgentHelper, siga la guía de Android para extender BackupAgentHelper.

  2. Haga que su clase amplíe el MAM equivalente de BackupAgentHelper, FileBackupHelper y SharedPreferencesBackupHelper.

Clase Android Equivalente de MAM
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Seguir estas directrices le permite realizar correctamente la copia de seguridad y la restauración de múltiples identidades.

BackupAgent

Un BackupAgent le permite ser mucho más explícito sobre los datos de los que se realiza una copia de seguridad. Dado que el desarrollador es responsable de la implementación, se requieren más pasos para garantizar una protección de datos adecuada de Intune. Dado que la mayor parte del trabajo recae en usted como desarrollador, la integración de Intune es algo más complicada.

Integrar MAM:

  1. Lea atentamente la guía de Android para Key /Value Backup y específicamente para extender BackupAgent para asegurarse de que su implementación de BackupAgent siga las pautas de Android.

  2. Haga que su clase amplíe MAMBackupAgent.

Copia de seguridad de varias identidades:

  1. Antes de comenzar la copia de seguridad, compruebe que el administrador de TI permite realizar copias de seguridad de los archivos o búferes de datos de los que tiene previsto realizar una copia de seguridad en escenarios de identidades múltiples. Úselo isBackupAllowed en MAMFileProtectionManager y MAMDataProtectionManager para determinar este comportamiento. Si no se permite hacer una copia de seguridad del archivo o búfer de datos, no debe incluirlo en la copia de seguridad.

  2. En algún momento durante la copia de seguridad, si desea realizar una copia de seguridad de las identidades de los archivos que comprobó en el paso 1, debe llamar backupMAMFileIdentity(BackupDataOutput data, File … files) con los archivos de los que planea extraer datos. Este método crea automáticamente nuevas entidades de copia de seguridad y las escribe en el BackupDataOutput ordenador. Estas entidades se consumen automáticamente al restaurar.

Restauración de varias identidades: En la guía de copia de seguridad de datos se especifica un algoritmo general para restaurar los datos de la aplicación y se proporciona un ejemplo de código en la sección Extender BackupAgent . Para realizar una restauración de varias identidades correcta, debe seguir la estructura general proporcionada en este ejemplo de código con especial atención a los siguientes puntos:

  1. Debe utilizar un while(data.readNextHeader())bucle * para recorrer las entidades de copia de seguridad.

  2. Debe llamar si data.skipEntityData()data.getKey() no coincide con la clave que escribió en onBackup. Sin este paso, es posible que las restauraciones no tengan éxito.

  3. Evite volver al consumir entidades de copia de seguridad en la while(data.readNextHeader())construcción *, porque en este caso se pierden las entidades que escribimos automáticamente.

  • Donde data es el nombre de variable local para el MAMBackupDataInput que recibe la aplicación tras la restauración.

Restricciones de captura de pantalla personalizadas

Si la aplicación contiene una característica de captura de pantalla personalizada que omite la restricción de nivel FLAG_SECURE de Android, debes comprobar la directiva de captura de Windowpantalla antes de permitir el acceso completo a la característica. Por ejemplo, si la aplicación usa un motor de representación personalizado para representar la vista actual en un archivo PNG, primero debes comprobar AppPolicy.getIsScreenCaptureAllowed().

Nota:

Si la aplicación no contiene ninguna característica de captura de pantalla personalizada o que no sea de Microsoft, no es necesario realizar ninguna acción para restringir las capturas de pantalla. La directiva de captura de pantalla se aplica automáticamente en el Window nivel para todas las aplicaciones integradas de MAM. Cualquier intento del sistema operativo u otra aplicación de capturar un Window en la aplicación se bloquea según sea necesario. Por ejemplo, si un usuario intenta capturar la pantalla de la aplicación a través de las características de captura de pantalla o grabación de pantalla integradas de Android, la captura se restringe automáticamente sin la participación de la aplicación.

Soporte técnico de App Protection CA

La CA de protección de aplicaciones (acceso condicional), también conocida como CA basada en aplicaciones, restringe el acceso a los recursos. Las directivas de protección de aplicaciones de Intune deben administrar la aplicación para poder acceder a estos recursos. Microsoft Entra ID aplica esta directiva al requerir que la aplicación se inscriba y sea administrada por las directivas de protección de aplicaciones de Intune antes de conceder un token para acceder a un recurso protegido por acceso condicional.

Nota:

Protección de aplicaciones La compatibilidad con CA requiere la versión 1.0.0 o posterior de la Biblioteca de autenticación de Microsoft (MSAL).

Controlar el incumplimiento de MSAL

Cuando la aplicación adquiere un token para una cuenta, la biblioteca MSAL puede devolver o lanzar un MsalIntuneAppProtectionPolicyRequiredException para indicar el incumplimiento de la administración de la directiva de protección de aplicaciones. Puede extraer más parámetros de la excepción para usarlos en la corrección del cumplimiento (consulte MAMComplianceManager). Una vez que la corrección se haya realizado correctamente, la aplicación puede volver a intentar la adquisición de tokens a través de MSAL.

MAMComplianceManager

La interfaz MAMComplianceManager se usa cuando se recibe el error necesario para la directiva de MSAL. Contiene el método [remediateCompliance] al que debe llamar para intentar poner la aplicación en un estado compatible. Puede obtener una referencia a lo MAMComplianceManager siguiente:

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

// make use of mgr

Se MAMComplianceManager garantiza que la instancia devuelta no será null.

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

El remediateCompliance() método intenta administrar la aplicación para que cumpla las condiciones de que Microsoft Entra ID conceda el token solicitado. Los primeros cuatro parámetros se pueden extraer de la excepción que recibe el método MSAL AuthenticationCallback.onError() . El último parámetro es un valor booleano que controla si una experiencia de usuario aparece durante el intento de cumplimiento.

remediateCompliance Muestra un cuadro de diálogo de progreso de bloqueo simple para que las aplicaciones no necesiten mostrar experiencias personalizadas durante esta operación. Este cuadro de diálogo aparece solo mientras la corrección de cumplimiento está en curso. No muestra el resultado final. La aplicación puede registrar un receptor para COMPLIANCE_STATUS la notificación para controlar el éxito o el error del intento de corrección de cumplimiento. Consulte Notificaciones de estado de cumplimiento para obtener más detalles.

remediateCompliance() podría iniciar una inscripción de MAM como parte del establecimiento del cumplimiento. La aplicación podría recibir una notificación de inscripción si ha registrado un receptor de notificaciones para las notificaciones de inscripción. El registro MAMServiceAuthenticationCallback de la aplicación tiene su acquireToken() método llamado para obtener un token para la inscripción. acquireToken() se llama antes de que la aplicación adquiera su propio token. Es posible que las tareas de contabilidad o creación de cuentas que realice la aplicación después de una adquisición exitosa de tokens aún no se hayan realizado. En este caso, la devolución de llamada debe poder adquirir un token.

Si no puede devolver un token de , se produce un error en el intento de corrección de acquireToken()cumplimiento.

Si llama updateToken más tarde con un token válido para el recurso solicitado, la corrección de cumplimiento se reanuda inmediatamente con el token proporcionado.

Nota:

La adquisición silenciosa de tokens aún es posible porque acquireToken() el usuario ya ha sido guiado para instalar el agente y registrar el dispositivo antes de que ocurra la MsalIntuneAppProtectionPolicyRequiredException excepción. Este proceso da como resultado que el agente tenga un token de actualización válido en su caché, lo que le permite adquirir el token solicitado de forma silenciosa.

Este es un ejemplo que recibe el error necesario para la directiva en el AuthenticationCallback.onError() método y llama a MAMComplianceManager para controlar el error.

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

Notificaciones del estado de cumplimiento

Si la aplicación se registra para recibir notificaciones de este tipo COMPLIANCE_STATUS, el sistema envía un MAMComplianceNotification para informar a la aplicación del estado final del intento de corrección de cumplimiento. Consulte Registro para recibir notificaciones del SDK para obtener más información sobre el registro.

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

El getComplianceStatus() método devuelve el resultado del intento de corrección de cumplimiento como un valor de la enumeración [MAMCAComplianceStatus].

Código de estado Explicación
UNKNOWN El estado es desconocido. Este estado podría indicar un motivo de error imprevisto. Puede encontrar más información en los registros del Portal de empresa.
COMPLIANT La corrección de cumplimiento se ha realizado correctamente y la aplicación ahora es compatible con la directiva. La adquisición del token MSAL debe volver a intentarse.
NOT_COMPLIANT El intento de subsanar el cumplimiento fracasó. La aplicación no es compatible y la adquisición del token MSAL no debe volver a intentarse hasta que se corrija la condición de error. Esto MAMComplianceNotification incluye información adicional del error.
SERVICE_FAILURE Error al intentar recuperar datos de cumplimiento del servicio de Intune. Puede encontrar más información en los registros del Portal de empresa.
NETWORK_FAILURE Error al conectar con el servicio de Intune. La aplicación debe volver a intentar su adquisición de tokens cuando se restablezca la conexión de red.
CLIENT_ERROR Se produjo un error en el intento de corregir el cumplimiento debido a un problema relacionado con el cliente, como la falta de un token de usuario o un token de usuario incorrecto. Esto MAMComplianceNotification incluye más información sobre el error.
PENDING Se produce un error en el intento de corregir el cumplimiento porque el servicio no envía la respuesta de estado antes de que expire el límite de tiempo. La aplicación debe volver a intentar la adquisición de tokens más tarde.
COMPANY_PORTAL_REQUIRED El Portal de empresa debe estar instalado en el dispositivo para que la corrección de cumplimiento se realice correctamente. Si ya está instalada, la aplicación debe reiniciarse. Un cuadro de diálogo pide al usuario que reinicie la aplicación.

Si el estado de cumplimiento es MAMCAComplianceStatus.COMPLIANT, la aplicación debe reiniciar su adquisición de tokens original (para su propio recurso).

Si se produce un error en el intento de corrección de cumplimiento, los getComplianceErrorTitle() métodos and getComplianceErrorMessage() devuelven cadenas localizadas que la aplicación puede mostrar al usuario final si así lo desea. La aplicación no puede resolver la mayoría de los casos de error. En general, se produce un error al crear la cuenta o iniciar sesión, y permitir que el usuario vuelva a intentarlo más tarde.

Si un error es persistente, los registros del Portal de empresa pueden ayudar a determinar la causa. El usuario final puede enviar los registros. Para obtener más información, consulte Carga y registros de correo electrónico.

Aquí hay un ejemplo de registro de un receptor usando una clase anónima para implementar la interfaz MAMNotificationReceiver:

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;

            // take appropriate action based on complianceNotification.getComplianceStatus()

            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

Nota:

Debe registrar el receptor de la notificación antes de llamar remediateCompliance() para evitar una condición de carrera que podría provocar la pérdida de la notificación.

Declaración de soporte para la CA de protección de aplicaciones

Una vez que la aplicación esté lista para controlar la corrección de la aplicación CA, puede indicar a Microsoft Identity que la aplicación está preparada para la aplicación CA. Para hacerlo en la aplicación MSAL, compile el cliente público con las capacidades de cliente de "protapp"

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

Una vez completados los pasos, continúe con la validación de la CA de protección de aplicaciones.

Notas de implementación

Nota:

El método de la MAMServiceAuthenticationCallback.acquireToken() aplicación debe pasar false para la forceRefresh marca a acquireTokenSilentAsync().

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

Nota:

Si desea mostrar una experiencia de usuario de bloqueo personalizada durante el intento de corrección, debe pasar false para el parámetro showUX a remediateCompliance(). Debe asegurarse de mostrar su experiencia de usuario y registrar su escucha de notificaciones primero antes de llamar remediateCompliance(). Esto evita una condición de carrera en la que la notificación podría perderse si remediateCompliance() falla rápidamente. Por ejemplo, el onCreate() método or onMAMCreate() de una subclase Activity es el lugar ideal para registrar el detector de notificaciones y, a continuación, llamar a remediateCompliance(). Los parámetros se remediateCompliance() pueden pasar a su experiencia de usuario como extras de intención. Cuando se recibe la notificación de estado de cumplimiento, puede mostrar el resultado o finalizar la actividad.

Nota:

remediateCompliance() Registra la cuenta e intenta la inscripción. Una vez que se adquiere el token principal, no es necesario igualar registerAccountForMAM() , pero no hay nada de malo en hacerlo. Por otro lado, si la aplicación no puede adquirir su token y desea quitar la cuenta de usuario, debe llamar unregisterAccountForMAM() para quitar la cuenta y evitar reintentos de inscripción en segundo plano.

Registrarse para recibir notificaciones del SDK

En la guía del SDK de aplicaciones de Intune se describen varios escenarios en los que es posible que se requiera que la aplicación se registre para recibir notificaciones del SDK, como:

En esta sección se describen todos los tipos de notificación que puede enviar el SDK, cuándo y por qué la aplicación querría escucharla y cómo implementar un receptor de notificaciones.

Tipos de notificaciones

Todas las notificaciones del SDK implementan la interfaz MAMNotification , que tiene una sola función, getType(), que devuelve una enumeración MAMNotificationType .

La mayoría de las notificaciones son instancias de MAMUserNotification , que proporcionan información específica de una sola identidad. El OID de la identidad se puede recuperar a través de la getUserOid() función y el UPN de la identidad se puede recuperar a través de getUserIdentity().

MAMEnrollmentNotification y MAMComplianceNotification amplían MAMUserNotificationaún más, que contiene resultados para los intentos de inscribir un usuario o dispositivo en el servicio MAM y resultados para los intentos de corregir el cumplimiento de la CA de protección de aplicaciones, respectivamente.

Tipo de notificación Clase de notificación Motivo de la notificación Aplicabilidad Sugerencias para el manejo Información de hilo
COMPLIANCE_STATUS MAMComplianceNotification Devuelve el resultado de un intento de corrección de cumplimiento. Las aplicaciones que implementan la CA de protección de aplicaciones deben controlar esto. No determinista
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Devuelve el resultado de un intento de inscripción. Todas las aplicaciones lo reciben. No determinista
MANAGEMENT_REMOVED MAMUserNotification La aplicación está a punto de dejar de estar administrada. Las aplicaciones que usan MAMDataProtectionManager deben controlar esto. Consulta MANAGEMENT_REMOVED. Nunca en la subproceso de la interfaz de usuario
REFRESH_APP_CONFIG MAMUserNotification Es posible que hayan cambiado los valores de configuración de la aplicación. Las aplicaciones que implementan la configuración de aplicaciones y almacenan en caché los datos de configuración de aplicaciones deben controlar esto. Las aplicaciones deben invalidar y actualizar los datos de configuración de aplicaciones almacenados en caché. No determinista
REFRESH_POLICY MAMUserNotification La directiva de protección de aplicaciones podría haber cambiado. Las aplicaciones que almacenan en caché la directiva de protección de aplicaciones deben controlar esto. Las aplicaciones deben invalidar y actualizar los datos de directiva de protección de aplicaciones almacenados en caché. No determinista
WIPE_USER_DATA MAMUserNotification El borrado está a punto de producirse (*). Las aplicaciones que usan MAMDataProtectionManager deben controlar este oWIPE_USER_AUXILIARY_DATA. Consulta Barrido selectivo. Nunca en la subproceso de la interfaz de usuario
WIPE_USER_AUXILIARY_DATA MAMUserNotification El borrado está a punto de producirse (*). Solo las aplicaciones de identidades múltiples lo reciben.
Las aplicaciones que usan MAMDataProtectionManager deben controlar este oWIPE_USER_DATA.
Consulta Barrido selectivo. Nunca en la subproceso de la interfaz de usuario
WIPE_COMPLETED MAMUserNotification Se ha completado el borrado. Opcional para todas las aplicaciones. Entregado después de WIPE_USER_DATA o WIPE_USER_AUXILIARY_DATA.
Si la aplicación notifica un error de su controlador de borrado, esta notificación no se enviará.
Nunca en la subproceso de la interfaz de usuario

(*) Las toallitas pueden producirse por muchas razones, por ejemplo:

  • La aplicación llamada unregisterAccountForMAM.
  • Un administrador de TI inició un borrado remoto.
  • No se cumplieron las directivas de acceso condicional necesarias para la Administración.

Advertencia

Una aplicación nunca debe registrarse para las WIPE_USER_DATA notificaciones de y WIPE_USER_AUXILIARY_DATA .

MANAGEMENT_REMOVED

La MANAGEMENT_REMOVED notificación informa a la aplicación de que una cuenta previamente administrada por directivas está a punto de dejar de estar administrada. Una vez que la cuenta no esté administrada, la aplicación ya no podrá leer los archivos cifrados de esa cuenta, leer los datos de la cuenta cifrada con MAMDataProtectionManager, interactuar con el portapapeles cifrado ni participar de otro modo en el ecosistema de aplicaciones administradas.

Esto no requiere borrar los datos del usuario ni cerrar la sesión del usuario (si fuera necesario un borrado, se enviaría una WIPE_USER_DATA notificación). Es posible que muchas aplicaciones no necesiten controlar esta notificación, pero las aplicaciones que usan MAMDataProtectionManager deben controlar esto. Consulte Protección de búfer de datos para obtener más información.

Cuando el SDK llama al receptor de MANAGEMENT_REMOVED la aplicación, se cumple lo siguiente:

  • El SDK ya ha descifrado los archivos cifrados previamente (pero no los búferes de datos protegidos) que pertenecen a la aplicación. Files de ubicaciones públicas en la tarjeta SD que no pertenecen directamente a la aplicación (por ejemplo, las carpetas Documentos o Descargas) no se descifran.

  • Cualquier archivo nuevo o búfer de datos protegidos que cree el método receptor (o cualquier otro código que se ejecute después de que se inicie el receptor) no está cifrado.

  • La aplicación sigue teniendo acceso a las claves de cifrado, por lo que operaciones como el descifrado de búferes de datos se realizan correctamente.

Cuando el receptor de la aplicación regresa, ya no tiene acceso a las claves de cifrado.

Implementación de MAMNotificationReceiver

Para registrarse para recibir notificaciones del SDK, la aplicación debe crear un MAMNotificationReceiver y registrarlo con MAMNotificationReceiverRegistry.

Para registrar el receptor, llame registerReceiver con su receptor y el tipo de notificación deseado en su Application.onCreate método:

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

La implementación de MAMNotificationReceiver de la aplicación debe incluir el onReceive(MAMNotification notification) método. Este método invoca individualmente para cada notificación recibida y debe devolver un boolean. Por lo general, este método siempre debe devolver true, a menos que la aplicación encuentre un error al responder a una notificación.

Al igual que con otros tipos de receptores Android, su aplicación tiene flexibilidad para manejar notificaciones:

  • Puede crear distintas implementaciones de MAMNotificationReceiver para distintos tipos de notificación. En este caso, asegúrese de registrar cada implementación y cada tipo de notificación por separado.
  • Puede usar una sola implementación de MAMNotificationReceiver que contiene lógica para responder a varios tipos de notificación distintos. En este caso, debe estar registrada para cada tipo de notificación a la que pueda responder.
  • Puede crear varias implementaciones de MAMNotificationReceiver que responden al mismo tipo de notificación. En este caso, ambos deben estar registrados en el mismo tipo de notificación.

Sugerencia

Es seguro bloquearlo MAMNotificationReceiver.onReceive porque su devolución de llamada no se ejecuta en el subproceso de la interfaz de usuario.

Temas personalizados

Se puede proporcionar un tema personalizado al SDK de la aplicación de Intune; este tema personalizado se aplica a todas las pantallas y diálogos del SDK. Si no se proporciona un tema, se usa el tema predeterminado del SDK.

Proporcionar un tema personalizado

Para proporcionar un tema, agregue la siguiente línea de código en el Application.onMAMCreate método:

MAMThemeManager.setAppTheme(R.style.AppTheme);

En el ejemplo, reemplace R.style.AppTheme por el tema de estilo que debe aplicar el SDK.

Administración de certificados raíz de confianza

Si la aplicación requiere certificados SSL/TLS emitidos por una entidad de certificación local o privada para proporcionar acceso seguro a sitios web y aplicaciones internos, el SDK de aplicaciones de Intune ha agregado compatibilidad para la administración de certificados de confianza con las clases de API MAMTrustedRootCertsManager y MAMCertTrustWebViewClient.

Nota:

MAMCertTrustWebViewClient admite Android 10 o posterior.

La Administración de certificados raíz de confianza proporciona soporte para:

  • SSLContext
  • SSLSocketFactory
  • Administrador de confianza
  • Vista web

Requisitos

Nota:

La administración de certificados raíz de confianza se puede usar independientemente de Microsoft Tunnel VPN Gateway, pero debe obtener una licencia de Microsoft MAM Tunnel para su uso.

Uso de certificados raíz de confianza de Intune para establecer anclajes de confianza

La administración de certificados raíz de confianza permite que la aplicación use certificados raíz de confianza de Intune en combinación con los certificados del dispositivo.

Las clases de API MAMTrustedRootCertsManager y MAMCertTrustWebViewClient usan los certificados raíz de confianza de Intune entregados a través de la directiva de App Configuration como una opción de reserva si los almacenes de certificados raíz de confianza del dispositivo no contienen los certificados raíz de confianza necesarios para establecer una conexión segura a los recursos locales. De este modo, la aplicación puede usar certificados de dispositivo e Intune para comprobar las conexiones seguras y la comunicación con fuentes de confianza.

Para mejorar su configuración de seguridad de red, una aplicación puede usar el archivo XML de configuración de seguridad de red. Certificados raíz de confianza La administración respeta esta seguridad adicional al comprobar si el XML de configuración de seguridad de red de la aplicación tiene alguna de estas características:

  • Anclajes de confianza personalizados con CA adicionales, como certificados autofirmados.
  • Reglas específicas del dominio para limitar las CA de confianza.
  • Conjuntos de anclajes para certificados de dominios específicos.

Nota:

Para obtener más información sobre la configuración de seguridad de red de Android, consulte Configuración de seguridad de red.

Si alguno de estos se aplica a un dominio que se está comprobando para la confianza, la Administración de certificados raíz de confianza omite las comprobaciones de confianza personalizadas para este dominio y deja que solo los administradores de confianza predeterminados de la plataforma realicen las comprobaciones.

Clase MAMTrustedRootCertsManager

Esta clase proporciona las siguientes API:

  • createSSLContextForOID(String oid, String protocol): crea un SSLContext objeto que usa certificados raíz de confianza para la identidad especificada y el protocolo SSL/TLS especificado. El objeto devuelto SSLContext de esta clase ya se ha inicializado correctamente con X509TrustManager objetos que utilizan los certificados raíz de confianza combinados del dispositivo y el servicio MAM.
  • createSSLSocketFactoryForOID(String oid, String protocol): crea un SSLSocketFactory objeto que usa certificados raíz de confianza para la identidad especificada y el protocolo SSL/TLS especificado. Se hace referencia al objeto devuelto SSLSocketFactory desde el mismo SSLContext objeto de esta clase.
  • createX509TrustManagersForOID(String oid): crea una matriz de X509TrustManager objetos que usan los certificados raíz de confianza combinados del dispositivo y el servicio MAM para la identidad especificada.

Nota:

Se espera que el oid parámetro sea el identificador de usuario (OID) de Microsoft Entra de un usuario concreto que ejecuta la aplicación. Si el identificador de usuario se desconoce de antemano, puede pasar un valor de null y MAM intenta detectar la identidad correcta del subproceso o proceso en el que se invocan estas API. La identidad debe establecerse correctamente en el proceso o subproceso para que MAM detecte la identidad. Para obtener más información acerca de cómo establecer la identidad activa en un proceso o subproceso, consulte Fase 5: Identidad múltiple.

Nota:

Cuando no se proporciona el protocol parámetro, la plataforma usa el protocolo SSL/TLS más admitido.

Estos son algunos ejemplos del uso de esta clase.

Ejemplo de uso de HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
Ejemplo de uso de OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

Clase MAMCertTrustWebViewClient

Esta clase proporciona una implementación personalizada de la clase android.webkit.WebViewClientAndroid. La clase proporciona una manera de controlar el error android.net.http.SslError.SSL_UNTRUSTED SSL en WebView.

Al controlar el error, la clase usa certificados raíz de confianza que configura Intune y proporciona el servicio MAM. Este enfoque comprueba la confiabilidad del host desde la dirección URL de destino que generó el error SSL en WebView. Si la implementación personalizada no controla el error SSL, el sistema invoca el comportamiento predeterminado heredado de la superclase.

Cuando use esta clase, cree una instancia de ella y, a continuación, llame WebView.setWebViewClient(WebViewClient) para registrarla con una WebView instancia.

Este es un ejemplo del uso de esta clase.

Ejemplo de uso de WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

Cumplimiento de privacidad de la App Store de China

Algunas tiendas de aplicaciones de China requieren que las aplicaciones muestren un cuadro de diálogo de consentimiento de privacidad a los usuarios antes de realizar operaciones que interactúen con otras aplicaciones en el dispositivo. Esto incluye el registro de receptores de transmisión que escuchan eventos de instalación o desinstalación de paquetes. El SDK de MAM hace esto para escuchar la presencia del Portal de empresa, donde reside la mayor parte de la lógica de MAM.

Si la aplicación se distribuye a través de tiendas de aplicaciones de China que tienen este requisito, use la siguiente integración para aplazar las operaciones de inicio sin conexión hasta que se obtenga el consentimiento de privacidad.

1. Agregar marca de manifiesto

Agregue los siguientes metadatos a los repositorios de AndroidManifest.xmlla aplicación:

<application>
    <meta-data
        android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
        android:value="true"/>
</application>

Nota:

Esta marca solo debe agregarse a los APK distribuidos a través de tiendas de aplicaciones de China que requieren consentimiento de privacidad antes de interactuar con otras aplicaciones. Para los APK distribuidos a través de otras tiendas, esta marca no debe incluirse.

2. Preparación de la señal después del cuadro de diálogo de privacidad

Después de que el usuario acepte el cuadro de diálogo de consentimiento de privacidad, llame al SDK para indicar que pueden continuar las operaciones de inicio sin conexión:

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
    .setOfflineStartupReady()

O en Java:

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
    .setOfflineStartupReady();

Comportamiento

El estado Listo se conserva en todos los inicios de la aplicación. Una vez setOfflineStartupReady() llamada, los inicios posteriores registrarán el receptor inmediatamente durante la inicialización de la aplicación.

Notas

  • El setOfflineStartupReady() método es idempotente; llamarlo varias veces es seguro.
  • Si el Portal de empresa ya está instalado (modo en línea), la llamada setOfflineStartupReady() no tiene ningún efecto ya que el receptor no es necesario.
  • Importante: Siempre debes llamar setOfflineStartupReady() después de que se acepte tu diálogo de privacidad.

Criterios de salida

Para obtener más información, consulte Pruebas rápidas con una directiva cambiante para facilitar las pruebas.

Validar las restricciones Guardar en y Abrir desde

Omita esta sección si no implementó la directiva para limitar la transferencia de datos entre aplicaciones y dispositivos o ubicaciones de almacenamiento en la nube.

Vuelva a familiarizarse con todos los escenarios en los que la aplicación puede guardar datos en servicios en la nube o datos locales y abrir datos de servicios en la nube o datos locales.

Para simplificar, en estas pruebas se supone que la aplicación solo incluye compatibilidad para guardar y abrir datos de OneDrive desde una única ubicación dentro de la aplicación. Sin embargo, debes validar cada combinación: cada ubicación de almacenamiento admitida en todos los lugares donde la aplicación permite guardar datos y cada ubicación abierta admitida en cada lugar donde la aplicación permite abrir datos.

Para realizar estas pruebas, instale la aplicación y el Portal de empresa de Intune; inicie sesión con una cuenta administrada antes de iniciar la prueba. Además:

  • Establece la directiva de la cuenta administrada como:
    • "Enviar datos de la organización a otras aplicaciones" establecido en "Aplicaciones administradas por directivas".
    • "Recibir datos de otras aplicaciones" establecido en "Aplicaciones administradas por directivas".
Escenario Condiciones previas Pasos
Guardar en, totalmente permitido Directiva "Guardar copias de datos de la organización" establecida en Permitir - Ve a la parte de la aplicación en la que puedes guardar datos en OneDrive.
- Intente guardar un documento en OneDrive con la misma cuenta administrada que inició sesión en la aplicación.
- Confirme que se permite el guardado.
Guardar en, exento - Directiva "Guardar copias de datos de la organización" establecida en Bloquear
- Directiva "Permitir que el usuario guarde copias en los servicios seleccionados" establecida solo en OneDrive
- Ve a la parte de la aplicación en la que puedes guardar datos en OneDrive.
- Intente guardar un documento en OneDrive con la misma cuenta administrada que inició sesión en la aplicación.
- Confirme que se permite el guardado.
- Si tu app lo permite, intenta guardar el archivo en una ubicación de almacenamiento en la nube diferente y confirma que está bloqueado.
Guardar en, bloqueado Directiva "Guardar copias de datos de la organización" establecida en Bloquear - Ve a la parte de la aplicación en la que puedes guardar datos en OneDrive.
- Intente guardar un documento en OneDrive con la misma cuenta administrada que inició sesión en la aplicación.
- Confirma que el guardado está bloqueado.
- Si tu app lo permite, intenta guardar el archivo en una ubicación de almacenamiento en la nube diferente y confirma que está bloqueado.
Abrir desde, totalmente permitido Directiva "Abrir datos en documentos de la organización" establecida en Permitir - Navega a la parte de tu aplicación donde puede abrir datos de OneDrive.
- Intenta abrir un documento desde OneDrive con la misma cuenta administrada que ha iniciado sesión en el almacenamiento de la aplicación.
- Confirme que se permite la apertura.
Abierto desde, exento - Directiva "Abrir datos en documentos de la organización" establecida en Bloquear
- Directiva "Permitir a los usuarios abrir datos de servicios seleccionados" establecida solo en OneDrive
- Navega a la parte de tu aplicación donde puede abrir datos de OneDrive.
- Intenta abrir un documento desde OneDrive con la misma cuenta administrada que ha iniciado sesión en el almacenamiento de la aplicación.
- Confirme que se permite la apertura.
- Si tu aplicación lo permite, intenta abrir otro archivo desde una ubicación de almacenamiento en la nube diferente y confirma que está bloqueado.
Abrir desde, bloqueado Directiva "Abrir datos en documentos de la organización" establecida en Bloquear - Navega a la parte de tu aplicación donde puede abrir datos de OneDrive.
- Intenta abrir un documento desde OneDrive con la misma cuenta administrada que ha iniciado sesión en el almacenamiento de la aplicación.
- Confirme que la apertura está bloqueada.
- Si tu aplicación lo permite, intenta abrir otro archivo desde una ubicación de almacenamiento en la nube diferente y confirma que está bloqueado.

Validar restricciones de notificación

Omita esta sección si no implementó la directiva para restringir el contenido dentro de las notificaciones.

En lo que respecta a la directiva de protección de aplicaciones, la aplicación puede activar tres tipos diferentes de notificaciones:

  1. Notificaciones que no contienen ningún dato de cuenta.
  2. Notificaciones que contienen datos que pertenecen a una cuenta administrada.
  3. Notificaciones que contienen datos que pertenecen a una cuenta no administrada.

Si la aplicación es de identidad única, solo las dos primeras son relevantes, ya que no se aplican protecciones si la cuenta única no está administrada.

Puede validar las restricciones de notificación desencadenando los tres tipos de notificaciones con diferentes valores de directiva configurados.

Para realizar estas pruebas, instale la aplicación y el Portal de empresa de Intune; inicie sesión con una cuenta administrada antes de iniciar la prueba. Si la aplicación es de varias identidades, inicie sesión también en la aplicación con una cuenta no administrada.

Escenario Condiciones previas Pasos
Contenido completo bloqueado Directiva "Notificaciones de datos de la organización" establecida en Bloquear - Haga que su aplicación active una notificación sin datos de cuenta.
- Confirma que la notificación no muestra ningún contenido.
- Activa tu app para que active una notificación con los datos de la cuenta administrada.
- Confirma que la notificación no muestra ningún contenido.
- Desencadene la aplicación para que active una notificación con los datos de la cuenta no administrada.
- Confirma que la notificación no muestra ningún contenido.
Contenido parcial bloqueado Directiva "Notificaciones de datos de la organización" establecida en Bloquear datos de la organización - Haga que su aplicación active una notificación sin datos de cuenta.
- Confirma que la notificación muestra todo su contenido.
- Activa tu app para que active una notificación con los datos de la cuenta administrada.
- Confirma que la notificación redacta el contenido de la cuenta administrada.
- Desencadene la aplicación para que active una notificación con los datos de la cuenta no administrada.
- Confirma que la notificación muestra todo su contenido.
No hay contenido bloqueado Directiva "Notificaciones de datos de la organización" establecida en Permitir - Haga que su aplicación active una notificación sin datos de cuenta.
- Confirma que la notificación muestra todo su contenido.
- Activa tu app para que active una notificación con los datos de la cuenta administrada.
- Confirma que la notificación muestra todo su contenido.
- Desencadene la aplicación para que active una notificación con los datos de la cuenta no administrada.
- Confirma que la notificación muestra todo su contenido.

Validación de copia de seguridad y restauración de datos

Omita esta sección si no implementó la directiva para proteger los datos de copia de seguridad.

Vuelva a familiarizarse con el contenido (archivos y pares clave-valor) que la aplicación configuró para la copia de seguridad. Debes validar que solo el contenido esperado forme parte de la restauración. El contenido adicional en la restauración puede provocar una pérdida de datos.

Para realizar estas pruebas, instale la aplicación y el Portal de empresa de Intune; inicie sesión con una cuenta administrada antes de iniciar la prueba. Si la aplicación es de varias identidades, inicie sesión también en la aplicación con una cuenta no administrada.

Siga las instrucciones oficiales de Android para probar la copia de seguridad. Estas instrucciones difieren para la copia de seguridad automática y las copias de seguridad de clave/valor, así que sígalas al pie de la letra.

Validar la captura de pantalla personalizada con la directiva

Omita esta sección si no implementó restricciones de Captura de pantalla personalizadas.

Si la aplicación tiene una característica que omite Windowel nivel FLAG_SECUREde Android, valide que esta característica esté bloqueada por las restricciones de captura de pantalla de la directiva de protección de aplicaciones.

Para realizar estas pruebas, instale la aplicación y el Portal de empresa de Intune; inicie sesión con una cuenta administrada antes de iniciar la prueba.

Escenario Condiciones previas Pasos
Captura de pantalla bloqueada Directiva "Captura de pantalla y Asistente de Google" establecida en Bloquear - Vaya a la parte de su aplicación que usa el código personalizado FLAG_SECURE .
- Intente usar esa función.
- Confirme que la función esté bloqueada.
Captura de pantalla permitida Directiva "Captura de pantalla y Asistente de Google" establecida en Permitir - Vaya a la parte de su aplicación que usa el código personalizado FLAG_SECURE .
- Intente usar esa función.
- Confirme que la función está permitida.

Validación de la CA de App Protection

Omita esta sección si no implementó la CA de soporte técnico de protección de aplicaciones.

Además de los pasos de validación típicos de crear y asignar una directiva de protección de aplicaciones a la aplicación y a la cuenta de prueba, también debe crear y asignar una directiva de acceso condicional de protección de aplicaciones a la cuenta de prueba. Consulte Configuración de directivas de acceso condicional basadas en aplicaciones con Intune para obtener más información.

Pasos de prueba:

  1. Desinstale Microsoft Authenticator y el Portal de empresa de Intune antes de realizar esta prueba.
  2. Instale la aplicación.
  3. Inicie sesión en la aplicación con la cuenta de prueba de destino tanto la directiva de protección de aplicaciones como la directiva de CA basada en aplicaciones.
  4. Confirme que la aplicación le pide que instale el Portal de empresa.
  5. Inicie sesión de nuevo.
  6. Confirma que la aplicación te pida que registres el dispositivo. Siga las indicaciones. Si la aplicación no solicita el registro aquí, confirme que el dispositivo de prueba había desinstalado primero otras aplicaciones habilitadas para SDK, el Portal de empresa y Authenticator. Si esto sigue sin preguntar, vuelva a visitar las instrucciones de implementación.
  7. Confirme que puede acceder a todos los datos de la aplicación después de registrarse.

Validación de receptores de notificación

Omita esta sección si no implementó el Registro para notificaciones desde el SDK.

Los pasos de validación dependen de los tipos de notificaciones para las que se registró la aplicación. Para todos los tipos de notificaciones, agregue registro para asegurarse de que el receptor se invoca correctamente.

MAM_ENROLLMENT_RESULT se puede desencadenar iniciando sesión en la aplicación con una cuenta de destino de la directiva de protección de aplicaciones.

Puede desencadenar REFRESH_APP_CONFIG y REFRESH_POLICY actualizar las respectivas directivas de protección de aplicaciones y directivas de App Configuration dirigidas a la cuenta de prueba y esperar a que el SDK reciba la directiva actualizada.

Sugerencia

Consulte Pruebas rápidas con políticas cambiantes para acelerar este proceso.

Puede desencadenar MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATA, y notificaciones WIPE_COMPLETEDemitiendo un borrado selectivo desde Microsoft Intune.

Validación de temas personalizados

Omita esta sección si no implementó Temas personalizados.

Puedes validar la compatibilidad con temas personalizados inspeccionando los colores en los cuadros de diálogo del SDK. El cuadro de diálogo más sencillo de comprobar es el de la pantalla de PIN de MAM.

Condiciones previas:

  • Establece la directiva de la cuenta administrada como:
    • "PIN de acceso" establecido en "Obligatorio".
  • Instalación de la aplicación y el Portal de empresa de Intune.

Pasos de prueba:

  1. Inicie la aplicación e inicie sesión con la cuenta de prueba.
  2. Confirme que aparece la pantalla PIN de MAM y tiene un tema basado en el tema personalizado que proporcionó al SDK.

Pasos siguientes

Si ha seguido esta guía en orden y ha completado todos los criterios de salida anteriormente en este artículo, la aplicación está ahora totalmente integrada con el SDK de aplicaciones de Intune y puede aplicar directivas de protección de aplicaciones. Si omitió cualquiera de las secciones anteriores de participación en aplicaciones, Fase 5: Multiidentidad y Fase 6: App Configuration, y no está seguro de si la aplicación debería admitir estas características, vuelva a visitar Decisiones clave para la integración del SDK.

La protección de aplicaciones es ahora un escenario central para la aplicación. Siga consultando esta guía y el Apéndice a medida que siga desarrollando su aplicación.