Guía para desarrolladores de Microsoft Intune App SDK para Android
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 de APLICACIÓN o MAM) en su 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:
Objetivos 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 MAMActivity
Activity
.
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 MAM
sufijo ) 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
, ContentResolver
ContentProviderClient
y PackageManager
mientras que otras clases solo tienen uno o dos métodos encapsulados, por ejemplo, DownloadManager
, , PrintManager
PrintHelper
, View
, NotificationManager
DragEvent
y 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 la 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 en Administración de dispositivos. Del mismo modo, un usuario puede haber inscrito un dispositivo para La administración de dispositivos sin tener ninguna aplicación integrada en el 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 del Portal de empresa
Los registros del Portal de empresa 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 del 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 del 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 del Portal de empresa de una de las siguientes maneras:
- A través del 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 del 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 del Portal de empresa y ver diagnósticos de MAM.
- Llame
MAMPolicyManager.showDiagnostics(context)
a para mostrar la misma interfaz de usuario para recopilar registros del 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 del Portal de empresa:
- Inicie el Portal de empresa. No es necesario iniciar sesión.
- Seleccione el ... icono de menú.
- Seleccione Configuración.
- Desplácese hasta la configuración denominada "Directiva de administración".
- 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 AppCompatActivity
AndroidX.
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 el 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:
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.
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" />
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 Window
Android, 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.