guía para desarrolladores de Microsoft Intune App SDK para Android

El SDK de aplicaciones Microsoft Intune para Android le permite incorporar directivas de protección de aplicaciones de Intune (también conocidas como directivas de APLICACIÓN o MAM) en la aplicación nativa de Java/Kotlin para Android. Una aplicación administrada por Intune es una que se integra con el SDK de aplicaciones 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.

Importante

Intune publica periódicamente las actualizaciones del SDK de aplicaciones de Intune. Se recomienda suscribirse a los repositorios del SDK de aplicaciones de Intune para obtener actualizaciones, de modo que pueda incorporar la actualización en el ciclo de versión de desarrollo de software y asegurarse de que las aplicaciones admiten la configuración más reciente de la directiva de protección de aplicaciones.

Planee realizar actualizaciones obligatorias del SDK de aplicaciones de Intune antes de cada versión principal del sistema operativo para asegurarse de que la aplicación sigue ejecutándose sin problemas, ya que las actualizaciones del sistema operativo pueden provocar cambios importantes. Si no actualiza a la versión más reciente antes de una versión principal del sistema operativo, puede correr el riesgo de encontrar un cambio importante o de no poder aplicar directivas de protección de aplicaciones a la aplicación.

Flujo de proceso

En el diagrama siguiente se proporciona el flujo de proceso del SDK de aplicaciones de Intune para Android:

Diagrama arquitectónico de alto nivel para Microsoft Intune.

Goals de fase

La guía contiene más detalles sobre la arquitectura del SDK de aplicaciones de Intune, información sobre pasos de integración poco comunes y otro contenido útil.

El SDK con mayor detalle

Reemplazos de clases y métodos

A través de las herramientas de compilación, el SDK de aplicaciones de Intune intenta minimizar la carga de integración de los desarrolladores de Android. Antes de las herramientas de compilación, los desarrolladores necesitaban realizar todos los reemplazos manualmente.

Nota:

Las aplicaciones ahora deben integrarse con las herramientas de compilación del SDK, que realizarán todos estos reemplazos automáticamente.

Las clases base de Android se reemplazan por sus respectivos equivalentes mam para habilitar la administración de Intune. Las clases del SDK residen entre la clase base de Android y la propia versión derivada de la aplicación de esa clase. Por ejemplo, una actividad de aplicación podría terminar con una jerarquía de herencia similar a: AppSpecificActivity extiende MAMActivityActivity. La capa MAM filtra las llamadas a las operaciones del sistema para proporcionar sin problemas a la aplicación una vista administrada del mundo.

Además de las clases base, algunas clases que la aplicación puede usar sin derivar de (por ejemplo MediaPlayer, ) también tienen equivalentes DE MAM necesarios, y también se deben reemplazar algunas llamadas a métodos. En la tabla siguiente se enumeran muchos de los reemplazos de MAM.

Clase base de Android Reemplazo del SDK de aplicaciones de Intune
android.app.Activity MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Application MAMApplication
android.app.Dialog MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Fragment MAMFragment
android.app.IntentService MAMIntentService
android.app.LauncherActivity MAMLauncherActivity
android.app.ListActivity MAMListActivity
android.app.ListFragment MAMListFragment
android.app.NativeActivity MAMNativeActivity
android.app.PendingIntent MAMPendingIntent
android.app.Service MAMService
android.app.TabActivity MAMTabActivity
android.app.TaskStackBuilder MAMTaskStackBuilder
android.app.backup.BackupAgent MAMBackupAgent
android.app.backup.BackupAgentHelper MAMBackupAgentHelper
android.app.backup.FileBackupHelper MAMFileBackupHelper
android.app.backup.SharePreferencesBackupHelper MAMSharedPreferencesBackupHelper
android.app.job.JobService MAMJobService
android.content.BroadcastReceiver MAMBroadcastReceiver
android.content.ContentProvider MAMContentProvider
android.os.Binder MAMBinder (solo es necesario si el enlazador no se genera a partir de una interfaz de lenguaje de definición de interfaz (AIDL) de Android)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPopupWindow
android.widget.TextView MAMTextView
android.widget.AutoCompleteTextView MAMAutoCompleteTextView
android.widget.CheckedTextView MAMCheckedTextView
android.widget.EditText MAMEditText
android.inputmethodservice.ExtractEditText MAMExtractEditText
android.widget.MultiAutoCompleteTextView MAMMultiAutoCompleteTextView
android.view.LayoutInflater MAMLayoutInflater
android.view.ViewGroup MAMViewGroup
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

Métodos cuyo nombre se ha cambiado

En muchos casos, un método disponible en la clase Android se ha marcado como final en la clase de reemplazo MAM. En este caso, la clase de reemplazo MAM proporciona un método con nombre similar (generalmente con MAMsufijo ) que debe invalidar en su lugar. Por ejemplo, al derivar de MAMActivity, en lugar de reemplazar onCreate() y llamar a super.onCreate(), Activity debe invalidar onMAMCreate() y llamar a super.onMAMCreate(). El compilador de Java debe aplicar las restricciones finales para evitar la invalidación accidental del método original en lugar del equivalente de MAM.

Servicios del sistema encapsulados

Para algunas clases de servicio del sistema, es necesario llamar a un método estático en una clase contenedora MAM en lugar de invocar directamente el método deseado en la instancia de servicio. Por ejemplo, una llamada a getSystemService(ClipboardManager.class).getPrimaryClip() debe convertirse en una llamada a MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). De nuevo, el complemento de compilación necesario realiza automáticamente estos reemplazos.

Clase Android Reemplazo del SDK de aplicaciones de Intune
android.content.ClipboardManager MAMClipboard
android.content.ContentProviderClient MAMContentProviderClientManagement
android.content.ContentResolver MAMContentResolverManagement
android.content.pm.PackageManager MAMPackageManagement
android.app.DownloadManager MAMDownloadManagement
android.print.PrintManager MAMPrintManagement
android.view.View MAMViewManagement
android.view.DragEvent MAMDragEventManagement
android.view.LayoutInflater MAMLayoutInflaterManagement
android.app.NotificationManager MAMNotificationManagement
android.app.blob.BlobStoreManager MAMBlobStoreManager
android.app.blob.BlobStoreManager.Session MAMBlobStoreManager.Session

Algunas clases tienen la mayoría de sus métodos encapsulados, por ejemplo, , ClipboardManager, ContentResolverContentProviderClienty PackageManager mientras que otras clases solo tienen uno o dos métodos encapsulados, por ejemplo, DownloadManager, , PrintManagerPrintHelper, View, NotificationManagerDragEventy NotificationManagerCompat.

Inscripción de MDM y MAM

Como se describe en La fase 4 de Registro e inscripción, el SDK de aplicaciones de Intune "inscribirá" las cuentas que registra la aplicación para que la cuenta esté protegida con la directiva. La cuenta se administra después de que esta inscripción se realice correctamente y ahora se deben aplicar directivas MAM a esta cuenta.

El término "inscripción" también puede hacer referencia al proceso iniciado por el usuario final para habilitar Administración de dispositivos (MDM). La inscripción de MDM es completamente independiente de la inscripción de directivas de App Protection.

Una aplicación integrada con SDK puede tener una cuenta inscrita para la directiva de Protección de aplicaciones sin que esa cuenta se inscriba para Administración de dispositivos. Del mismo modo, un usuario puede haber inscrito un dispositivo para Administración de dispositivos sin tener ninguna aplicación integrada en SDK con cuentas inscritas para la directiva de Protección de aplicaciones.

Normalmente, cuando los desarrolladores y administradores hacen referencia a la inscripción, se refieren a la inscripción de MDM, ya que la inscripción de directivas de Protección de aplicaciones es prácticamente invisible tanto para los desarrolladores como para los usuarios finales. Consulta Inscribir dispositivos Android para obtener más información sobre la inscripción de MDM.

Sugerencias de integración

Descripción de los registros de Portal de empresa

Portal de empresa registros contienen información que los ingenieros de Microsoft usan para las investigaciones de problemas. Algunos de los registros también pueden ser útiles para los desarrolladores que integran el SDK.

En concreto, el archivo DiagnosticsInfo-scrubbed.log contiene información sobre qué aplicaciones administra MAM y los detalles de la directiva MAM en la PolicyDB Information sección . Cada aplicación administrada tiene una entrada en la PolicyDB Information sección . Aquí debe buscar el nombre del paquete de la aplicación para confirmar que la directiva MAM está dirigida correctamente a la aplicación. Si no ve el nombre del paquete de la aplicación aquí, indica que la cuenta que ha iniciado sesión no tiene aplicada la directiva MAM.

Para obtener una descripción de cada configuración de directiva mam, consulte Configuración de directivas de protección de aplicaciones Android en Microsoft Intune. Para obtener una descripción de cómo se mostrará esta configuración en los registros de Portal de empresa, consulte Revisión de los registros de protección de aplicaciones cliente. Cuando la directiva mam no se aplica según lo esperado, se recomienda comprobar los registros de Portal de empresa o la interfaz de usuario de diagnóstico, comprobar que la aplicación se administra mediante la directiva MAM y confirmar que la configuración de la directiva tiene valores esperados.

Puede recopilar registros de Portal de empresa de una de las siguientes maneras:

  • A través de la Portal de empresa
    • Abrir la aplicación Portal de empresa
    • Seleccione el menú de tres puntos en la esquina superior derecha.
    • Seleccione Configuración.
    • En Registros de diagnóstico, seleccione Guardar registros.
    • Siga el símbolo del sistema para elegir el directorio de salida para guardar los registros de Portal de empresa.
    • Use adb shell pull el comando para extraer los registros del dispositivo Android a la máquina local.
  • [Use Microsoft Edge para Android para acceder a los registros de aplicaciones administradas]. Esto mostrará la interfaz de usuario para recopilar registros de Portal de empresa y ver diagnósticos de MAM.
  • Llame MAMPolicyManager.showDiagnostics(context) a para mostrar la misma interfaz de usuario para recopilar registros de Portal de empresa.

Pruebas rápidas con cambio de directiva

A medida que desarrolla y prueba la integración de la aplicación del SDK de aplicaciones de Intune, puede cambiar con frecuencia la configuración de la directiva de protección de aplicaciones para el usuario de prueba.

De forma predeterminada, las aplicaciones integradas se protegerán con el servicio Intune para obtener una directiva actualizada cada 30 minutos, cuando están activas. Puede evitar esta espera y forzar un registro a través de la Portal de empresa:

  1. Inicie el Portal de empresa. No es necesario iniciar sesión.
  2. Seleccione el ... icono de menú.
  3. Seleccione Configuración.
  4. Desplácese hasta la configuración denominada "Directiva de administración".
  5. Presione el botón Sincronizar.

Esto programará inmediatamente un check-in y recuperará la directiva actualizada destinada a la aplicación y la cuenta.

Solución de problemas de migración de AndroidX

Si ha integrado el SDK de aplicaciones de Intune antes de aprovechar AndroidX, es posible que se produzca un error como este al migrar a AndroidX:

incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar

Estos errores pueden producirse porque la aplicación hace referencia a las clases de soporte técnico heredadas del SDK. Las clases de soporte técnico mam encapsulan las clases de soporte técnico de Android que se han movido en AndroidX. Para combatir estos errores, reemplace todas las referencias de clase de soporte de MAM por sus equivalentes de AndroidX. Esto se puede lograr quitando primero las dependencias de la biblioteca de soporte técnico de MAM de los archivos de compilación de Gradle. Las líneas en cuestión tendrán un aspecto similar al siguiente:

implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"

A continuación, corrija los errores en tiempo de compilación resultantes reemplazando todas las referencias a las clases MAM de los com.microsoft.intune.mam.client.support.v7 paquetes y com.microsoft.intune.mam.client.support.v4 por sus equivalentes de AndroidX. Por ejemplo, las referencias a MAMAppCompatActivity deben cambiarse a la propiedad de AppCompatActivityAndroidX. Como se ha explicado anteriormente, el complemento o herramienta de compilación mam reescribirá automáticamente las clases en las bibliotecas AndroidX con los equivalentes de MAM adecuados en tiempo de compilación.

Limitaciones y casos especiales

Inscripción predeterminada

La aplicación puede registrarse alternativamente para las directivas de Protección de aplicaciones a través de un proceso simplificado denominado inscripción predeterminada. Esta característica es principalmente para admitir aplicaciones privadas de línea de negocio que no han integrado MSAL.

Advertencia

La inscripción predeterminada incluye importantes inconvenientes y no se recomienda. Las aplicaciones que aprovechan la inscripción predeterminada no admiten el acceso condicional, no se benefician del inicio de sesión único con los servicios de Microsoft y no se pueden usar en cuentas que no son de Intune. Si la aplicación se envía a una tienda de aplicaciones pública, no se admite la inscripción predeterminada.

La inscripción predeterminada obligará al usuario final a instalar la Portal de empresa y a completar un flujo de inscripción de MAM antes de permitir que los usuarios entren en la aplicación.

Nota:

La inscripción predeterminada es compatible con la nube soberana.

Habilite la inscripción predeterminada con los pasos siguientes:

  1. Si la aplicación integra MSAL o necesita habilitar el inicio de sesión único, configure MSAL. Si no es así, puede omitir este paso.

  2. Habilite la inscripción predeterminada agregando el siguiente valor en el manifiesto bajo la <application> etiqueta :

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Habilite la directiva MAM necesaria agregando el siguiente valor en el manifiesto bajo la <application> etiqueta :

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

Procesos aislados

El SDK de aplicaciones de Intune no puede aplicar protecciones a procesos aislados. La compatibilidad con procesos aislados (android:isolatedProcess) requiere la adición de la etiqueta de metadatos siguiente.

Advertencia

Al agregar estos metadatos, la aplicación declara que el proceso aislado no puede exponer los datos de la organización. La aplicación es responsable de garantizarlo.

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

Restricciones de captura de pantalla personalizada

Si la aplicación contiene una característica de captura de pantalla personalizada que omite la restricción de nivel FLAG_SECURE de WindowAndroid, debes comprobar la directiva de captura de pantalla antes de permitir el acceso total 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 debe comprobar AppPolicy.getIsScreenCaptureAllowed().

Si la aplicación no contiene ninguna característica de captura de pantalla personalizada o de terceros, 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 de todas las aplicaciones integradas de MAM.

Los intentos del sistema operativo u otra aplicación de capturar un Window elemento en la aplicación se bloquearán según sea necesario. Por ejemplo, si un usuario intenta capturar la pantalla de la aplicación a través de la captura de pantalla integrada de Android o las características de grabación de pantalla, la captura se restringirá automáticamente sin la participación de la aplicación.

Limitaciones de cumplimiento de directivas

  • Usar solucionadores de contenido: la directiva de Intune de "transferencia o recepción" puede bloquear o bloquear parcialmente el uso de un solucionador de contenido para acceder al proveedor de contenido en otra aplicación. Esto hará que ContentResolver los métodos devuelvan null o generen un valor de error (por ejemplo, openOutputStream se producirá FileNotFoundException si se bloquea). La aplicación puede determinar si un error al escribir datos a través de un solucionador de contenido fue causado por la directiva (o podría deberse a una directiva) mediante la llamada:

    MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
    

    o si no hay ninguna actividad asociada:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    En este segundo caso, las aplicaciones de varias identidades deben tener cuidado para establecer la identidad del subproceso correctamente (o pasar una identidad explícita a una getPolicyForIdentity llamada).

Servicios exportados

El archivo AndroidManifest.xml incluido en el SDK de aplicaciones de Intune contiene MAMNotificationReceiverService, que debe ser un servicio exportado para permitir que el Portal de empresa envíe notificaciones a una aplicación administrada. El servicio comprueba al autor de la llamada para asegurarse de que solo el Portal de empresa puede enviar notificaciones.

Limitaciones de reflexión

Algunas de las clases base mam (por ejemplo, MAMActivity, MAMDocumentsProvider) contienen métodos (basados en las clases base de Android originales) que usan tipos de parámetro o de valor devuelto que solo están presentes por encima de determinados niveles de API. Por este motivo, es posible que no siempre sea posible usar la reflexión para enumerar todos los métodos de los componentes de la aplicación. Esta restricción no se limita a MAM, es la misma restricción que se aplicaría si la propia aplicación implementase estos métodos desde las clases base de Android.

Robolectric

No se admite la prueba del comportamiento del SDK de aplicaciones de Intune en Robolectric. Hay problemas conocidos al ejecutar el SDK en Robolectric debido a comportamientos presentes en Robolectric que no imitan con precisión los en dispositivos o emuladores reales.

Si necesita probar la aplicación en Robolectric, la solución alternativa recomendada es mover la lógica de la clase de aplicación a un asistente y generar el apk de pruebas unitarias con una clase de aplicación que no herede de MAMApplication.