Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Esta guía se divide en varias fases distintas. Para empezar, revise Planear la integración.
Objetivos de fase
- Descargue el SDK de Intune App.
- Obtenga información sobre los archivos que se incluyen en el SDK de la aplicación de Intune.
- Haga referencia al SDK de Intune App en la aplicación.
- Confirme que el SDK de la aplicación de Intune está correctamente incluido en la compilación.
- Registre nuevas cuentas para la administración de MAM después de autenticarse con MSAL.
- Para quitar datos corporativos, anule el registro de cuentas al cerrar la sesión.
- (Recomendado) Incorporación del inicio de sesión de MAM en la aplicación.
Requisitos previos
Necesita un equipo macOS con Xcode 16.0 o posterior.
La aplicación debe tener como destino iOS 16.0 o posterior.
Revise los términos de licencia de Intune App SDK para iOS. Imprima y conserve una copia de los términos de licencia de los registros. Al descargar y usar el SDK de Intune App para iOS, acepta dichos términos de licencia. Si no los acepta, no use el software.
Descargue los archivos del SDK de Intune App para iOS en GitHub.
Qué hay en el repositorio del SDK
IntuneMAMSwift.xcframework: el marco dinámico del SDK de aplicaciones de Intune. Se recomienda vincular este marco a la aplicación o extensiones para habilitar Intune administración de aplicaciones cliente. Sin embargo, es posible que algunos desarrolladores prefieran las ventajas de rendimiento del marco estático (IntuneMAMStatic.xcframework).
IntuneMAMStatic.xcframework: el marco estático del SDK de aplicaciones de Intune. Los desarrolladores pueden optar por vincular el marco estático en lugar del marco dinámico. Dado que el código ejecutable de un marco estático se inserta directamente en el binario de aplicación o extensión en tiempo de compilación, hay algunas ventajas de rendimiento en tiempo de inicio para usar la biblioteca estática. Sin embargo, si la aplicación incluye extensiones, vincular el marco estático a la aplicación y las extensiones da como resultado un tamaño de agrupación de aplicaciones mayor. El código ejecutable se inserta en cada archivo binario de aplicación o extensión. Por el contrario, al usar el marco dinámico, las aplicaciones y extensiones pueden compartir el mismo Intune binario del SDK, lo que da como resultado un tamaño de aplicación más pequeño.
IntuneMAMSwiftStub.xcframework: el marco de código auxiliar swift del SDK de Intune aplicación. Este marco es una dependencia necesaria de IntuneMAMSwift.xcframework e IntuneMAMStatic.xcframework, que las aplicaciones o extensiones deben vincular.
IntuneMAMConfigurator: herramienta que se usa para configurar info.plist de la aplicación o extensión con los cambios mínimos necesarios para la administración de Intune. En función de la funcionalidad de la aplicación o la extensión, es posible que deba realizar más cambios manuales en Info.plist.
libIntuneMAMSwift.xcframework: biblioteca estática Intune App SDK. Esta variante del SDK de iOS de Intune MAM está en desuso y se quita en una actualización futura. Se recomienda no vincular la biblioteca estática y, en su lugar, vincular la aplicación o las extensiones al marco dinámico (IntuneMAMSwift.xcframework) o al marco estático (IntuneMAMStatic.xcframework) mencionado anteriormente.
IntuneMAMResources.bundle: agrupación de recursos que contiene recursos en los que se basa el SDK. La agrupación de recursos solo es necesaria para las aplicaciones que integran la biblioteca estática en desuso (libIntuneMAMSwift.xcframework) y la quita en una actualización futura.
Funcionamiento del SDK de Intune App
El objetivo del SDK de Intune App para iOS es agregar funcionalidades de administración a las aplicaciones de iOS con cambios mínimos en el código. Cuanto menos cambie el código, menos tiempo de comercialización, pero sin afectar a la coherencia y estabilidad de la aplicación móvil.
Flujo de proceso
En el diagrama siguiente se proporciona el flujo de procesos Intune App SDK para iOS:
Compilación del SDK en la aplicación móvil
Importante
Intune publica periódicamente las actualizaciones del SDK de Intune App. Compruebe periódicamente el SDK de aplicaciones de Intune para iOS para ver si hay actualizaciones e incorpore en el ciclo de lanzamiento de desarrollo de software para asegurarse de que las aplicaciones admiten la configuración de directiva de protección de aplicaciones más reciente.
Para habilitar el SDK de Intune App, siga estos pasos:
Vincular o
IntuneMAMSwift.xcframeworkIntuneMAMStatic.xcframeworkal destino: arrastre la agrupación xcframework a la lista Marcos, Bibliotecas y Contenido incrustado del destino del proyecto. Repita estos pasos paraIntuneMAMSwiftStub.xcframework. En la aplicación principal, seleccione "Insertar & inicio de sesión" en la columna "Insertar" para ambas xcframeworks agregadas. En el caso de las extensiones, seleccione "No insertar".
Agregue estos marcos de iOS al proyecto:
- MessageUI.framework
- Security.framework
- CoreServices.framework
- SystemConfiguration.framework
- libsqlite3.tbd
- libc++.tbd
- ImageIO.framework
- LocalAuthentication.framework
- AudioToolbox.framework
- QuartzCore.framework
- WebKit.framework
- MetricKit.framework
Habilite el uso compartido de cadenas de claves (si aún no está habilitado) eligiendo Funcionalidades en cada destino de proyecto y habilitando el modificador Uso compartido de llaves . El uso compartido de llaves es necesario para que continúe con el paso siguiente.
Nota:
El perfil de aprovisionamiento debe admitir nuevos valores de uso compartido de cadenas de claves. Los grupos de acceso de cadena de claves deben admitir un carácter comodín. Para comprobarlo, abra el archivo .mobileprovision en un editor de texto, busque la cadena de claves-access-groups y asegúrese de que tiene un carácter comodín. Por ejemplo:
<key>keychain-access-groups</key> <array> <string>YOURBUNDLESEEDID.*</string> </array>Después de habilitar el uso compartido de llaves, siga los pasos para crear un grupo de acceso independiente en el que el SDK de Intune App almacene sus datos. Puede crear un grupo de acceso de cadena de claves mediante la interfaz de usuario o mediante el archivo de derechos. Si usa la interfaz de usuario para crear el grupo de acceso a la cadena de claves, asegúrese de seguir estos pasos:
Si la aplicación móvil no tiene ningún grupo de acceso de cadena de claves definido, agregue el identificador de agrupación de la aplicación como primer grupo.
Agregue el grupo
com.microsoft.intune.mamde cadenas de claves compartidas a los grupos de acceso existentes. El SDK de Intune App usa este grupo de acceso para almacenar datos.Agregue
com.microsoft.adalcachea los grupos de acceso existentes.
Nota:
Si configuró MSAL para usar un grupo de acceso de cadena de claves personalizado en lugar del valor predeterminado de
com.microsoft.adalcache, no es necesario especificar este grupo de acceso de cadena de claves aquí. En su lugar, especifique el grupo de cadena de claves personalizado. También debe configurar Intune para usar el mismo grupo de acceso personalizado a través de la configuración ADALCacheKeychainGroupOverride del diccionario Info.plist de IntuneMAMSettings.Si va a editar el archivo de derechos directamente, en lugar de usar la interfaz de usuario de Xcode para crear los grupos de acceso de cadena de claves, anteponga los grupos de acceso de cadena de claves con
$(AppIdentifierPrefix)(Xcode controla esto automáticamente). Por ejemplo:$(AppIdentifierPrefix)com.microsoft.intune.mam$(AppIdentifierPrefix)com.microsoft.adalcache
Nota:
Un archivo de derechos es un archivo XML que es único para la aplicación móvil. Se usa para especificar permisos y funcionalidades especiales en la aplicación de iOS. Si la aplicación no tenía previamente un archivo de derechos, la habilitación del uso compartido de cadenas de claves (paso 3) debería haber provocado que Xcode generara uno para la aplicación. Asegúrese de que el identificador de agrupación de la aplicación es la primera entrada de la lista.
Incluya cada protocolo al
UIApplication canOpenURLque pasa la aplicación en laLSApplicationQueriesSchemesmatriz del archivo Info.plist de la aplicación. Para cada protocolo enumerado en esta matriz, agregue una copia del protocolo anexado-intunemama la matriz. Además, agregue estos valores a la matriz:http-intunemam,https-intunemam, ,microsoft-edge-https-intunemammicrosoft-edge-http-intunemam, ,zipssmart-ns, ,wanderalacoonsecurity, ,skycurelookoutwork-ase, ,betteractiveshield,smsec,mvisionmobile, yintunemam-mtdscmx. Si la aplicación usa el protocolo mailto: , agregue tambiénms-outlook-intunemama la matriz. Guarde los cambios antes de continuar con el paso siguiente.Si la aplicación se queda sin espacio en su lista LSApplicationQueriesSchemes, puede quitar los esquemas "-intunemam" para las aplicaciones que también se sabe que implementan el SDK Intune MAM. Cuando la aplicación quita "scheme-intunemam" de la lista LSApplicationQueriesSchemes,
canOpenURL()puede devolver respuestas incorrectas para esos esquemas. Para solucionar este problema, llame a[IntuneMAMPolicy isURLAllowed:url isKnownManagedAppScheme:YES]ese esquema en su lugar. Esta llamada devuelveNOsi la directiva impide que se abra la dirección URL. Si devuelve true, la aplicación puede llamar acanOpenURL()con una identidad vacía para determinar si se puede abrir la dirección URL. Por ejemplo:BOOL __block canOpen = NO; if([policy isURLAllowed:urlForKnownManagedApp isKnownManagedAppScheme:YES]) { [[IntuneMAMPolicyManager instance] setCurrentThreadAccountId:"" forScope:^{ canOpen = [[UIApplication sharedApplication] canOpenURL:urlForKnownManagedApp]; }]; }Si la aplicación ya no usa FaceID, asegúrese de que la clave Info.plist de NSFaceIDUsageDescription esté configurada con un mensaje predeterminado. Este paso es necesario para que iOS pueda informar al usuario de cómo piensa usar FaceID la aplicación. Una configuración de directiva de protección de aplicaciones Intune permite que FaceID se use como método para el acceso a la aplicación cuando lo configura el administrador de TI.
Use la herramienta IntuneMAMConfigurator que se incluye en el repositorio del SDK para finalizar la configuración de Info.plist de la aplicación. La herramienta tiene tres parámetros:
Propiedad Cómo utilizarlo -Yo <Path to the input plist>- e <Path to the entitlements file>- o (Opcional) <Path to the output plist>Si no se especifica el parámetro '-o', el archivo de entrada se modifica localmente. La herramienta es idempotente y debe volver a ejecutarse cada vez que realice cambios en info.plist o derechos de la aplicación. También debe descargar y ejecutar la versión más reciente de la herramienta al actualizar el SDK de Intune, en caso de que los requisitos de configuración de Info.plist hayan cambiado en la versión más reciente.
Nota:
Si tiene una aplicación SwiftUI, asegúrese de que UISceneConfigurations el diccionario del UIApplicationSceneManifest archivo Info.pist no falta ni está vacío. El error al configurar esta configuración puede impedir que el SDK de Intune proteja la aplicación a pesar de que las directivas de protección de aplicaciones se aplican correctamente.
Si no tiene un valor específico establecido para UISceneConfigurations , puede usar esta configuración predeterminada:
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
Configuración y funcionalidades de compilación de Xcode
La aplicación debe tener "Strip Swift Symbols" (STRIP_SWIFT_SYMBOLS) y "Enable Bitcode" (ENABLE_BITCODE) establecido en NO en la configuración de compilación de Xcode. Si la aplicación incluye la funcionalidad "Seguridad mejorada" disponible en Xcode 26+, debe deshabilitar las opciones "Autenticar punteros" y "Habilitar memoria de plataforma de solo lectura".
Integración de una extensión de proveedor de archivos
Las extensiones del proveedor de archivos tienen ciertos requisitos de memoria que podrían dificultar la integración del SDK completo. Para que sea más fácil, hay una biblioteca libIntuneMAMSwiftFileProvider.xcframeworkestática , que es una versión eliminada del SDK específicamente para las extensiones del proveedor de archivos. Tenga en cuenta que esta biblioteca es para la parte que no es de la interfaz de usuario de la extensión FileProvider. Debe integrar el SDK completo en la extensión de interfaz de usuario del proveedor de archivos.
Para integrar una de estas bibliotecas con la extensión Proveedor de archivos, siga los pasos para integrar el SDK como una biblioteca estática. Asegúrese de incluir ContainingAppBundleId la configuración.
Integración de una extensión del proveedor de archivos no replicado
La aplicación usa un proveedor de archivos no replicado si implementa el protocolo NSFileProviderExtension. Todos los proveedores de archivos creados antes de iOS 16.0 no se replican.
En - startProvidingItemAtURL:completionHandler: compruebe si debe cifrar archivos mediante [[Instancia de IntuneMAMPolicy]shouldFileProviderEncryptFiles]. Use encryptFile:forAccountId: API en IntuneMAMFileProtectionManager para el cifrado de archivos real. Además, comparta una copia del archivo cuando se requiera el cifrado, ya que no desea almacenar una copia cifrada del archivo en el almacenamiento en la nube.
En - importDocumentAtURL:toParentItemIdentifier:completionHandler: compruebe si el archivo está cifrado mediante la API isFileEncrytped: en IntuneMAMFileProtectionManager. Si es así, descifre mediante decryptFile:toCopyPath: API de IntuneMAMFileProtectionManager. En las aplicaciones de varias identidades, compruebe también la API canReceiveSharedFile: en IntuneMAMPolicy del propietario de destino para determinar si el propietario puede recibir el archivo.
Integración de una extensión del proveedor de archivos replicados
La aplicación usa un proveedor de archivos replicados si implementa el protocolo NSFileProviderReplicatedExtension (agregado en iOS 16.0).
En - fetchContentsForItemWithIdentifier:version:request:completionHandler: compruebe si debe cifrar los archivos mediante [[Instancia de IntuneMAMPolicy]shouldFileProviderEncryptFiles]. Use la API encryptFile:forAccountId: en IntuneMAMFileProtectionManager para el cifrado de archivos real. Comparta una copia del archivo cuando sea necesario el cifrado, ya que no desea almacenar una copia cifrada del archivo en el almacenamiento en la nube.
En - createItemBasedOnTemplate:fields:contents:options:request:completionHandler: compruebe si el archivo está cifrado mediante la API isFileEncrypted: en IntuneMAMFileProtectionManager. Si es así, descifre mediante decryptFile:toCopyPath: API de IntuneMAMFileProtectionManager. En las aplicaciones de varias identidades, compruebe también la API canReceiveSharedFile: en IntuneMAMPolicy del propietario de destino para determinar si el propietario puede recibir el archivo.
En cualquier lugar donde el proveedor de archivos replicado cree y pase un NSFileProviderItem al sistema, llame a la API protectFileProviderItem:forAccountId: de IntuneMAMFileProtectionManager con la identidad del propietario del elemento. En función de dónde se cree y persista el objeto NSFileProviderItem dentro de la extensión, es posible que tenga que hacerlo en cada uno de los métodos de protocolo de NSFileProviderReplicatedExtension.
Configuración de la configuración del SDK de Intune App
Puede usar el diccionario IntuneMAMSettings en el archivo Info.plist de la aplicación para configurar y configurar el SDK de Intune App. Si el diccionario IntuneMAMSettings no se ve en el archivo Info.plist, debe crearlo.
En el diccionario IntuneMAMSettings, puede definir las siguientes opciones admitidas para configurar el SDK de aplicación de Intune.
En las secciones anteriores se tratan algunas de estas configuraciones y otras no se aplican a todas las aplicaciones.
| Configuración | Tipo | Definición | ¿Necesario? |
|---|---|---|---|
| ADALClientId | Cadena | Identificador de cliente Microsoft Entra de la aplicación. | Necesario para todas las aplicaciones. |
| ADALAuthority | Cadena | La entidad de Microsoft Entra de la aplicación en uso. Debe usar su propio entorno donde se configuran las cuentas de Microsoft Entra. Para obtener más información, consulte Opciones de configuración de la aplicación. | Obligatorio si la aplicación es una aplicación de línea de negocio personalizada creada para su uso dentro de una sola organización o Microsoft Entra inquilino. Si este valor está ausente, se usa la entidad de Microsoft Entra común (solo se admite para aplicaciones multiinquilino). |
| ADALRedirectUri | Cadena | El URI de redireccionamiento Microsoft Entra de la aplicación. | ADALRedirectUri o ADALRedirectScheme son necesarios para todas las aplicaciones. |
| ADALRedirectScheme | Cadena | Esquema de redireccionamiento de Microsoft Entra ID de la aplicación. Esto se puede usar en lugar de ADALRedirectUri si el URI de redireccionamiento de la aplicación tiene el formato scheme://bundle_id. |
ADALRedirectUri o ADALRedirectScheme son necesarios para todas las aplicaciones. |
| ADALLogOverrideDisabled | Booleano | Especifica si el SDK enruta todos los registros de MSAL (incluidas las llamadas de MSAL desde la aplicación, si existe) a su propio archivo de registro. El valor predeterminado es NO. Establezca en SÍ si la aplicación establece su propia devolución de llamada de registro de MSAL. | Opcional. |
| ADALCacheKeychainGroupOverride | Cadena | Especifica el grupo de cadenas de claves que se va a usar para la caché de MSAL, en lugar de "com.microsoft.adalcache". El sistema lo anteponga automáticamente en tiempo de ejecución. |
Opcional. |
| AppGroupIdentifiers | Matriz de cadenas | Matriz de grupos de aplicaciones de la sección de derechos com.apple.security.application-groups de la aplicación. |
Obligatorio si la aplicación usa grupos de aplicaciones. |
| ContainingAppBundleId | Cadena | Especifica el identificador de agrupación de la aplicación contenedora de la extensión. | Necesario para las extensiones de iOS. |
| AutoEnrollOnLaunch | Booleano | Especifica si la aplicación debe intentar inscribirse automáticamente al iniciarse si se detecta una identidad administrada existente y aún no lo ha hecho. El valor predeterminado es NO. Nota: Si no se encuentra ninguna identidad administrada o no hay ningún token válido disponible en la memoria caché de MSAL, se produce un error en la inscripción de forma silenciosa a menos que MAMPolicyRequired sea SÍ. |
Opcional. El valor predeterminado es NO. |
| MAMPolicyRequired | Booleano | Especifica si se bloquea el inicio de la aplicación si no tiene una directiva de protección de aplicaciones Intune. El valor predeterminado es NO. Nota: Las aplicaciones no se pueden enviar al App Store con este valor establecido en SÍ. Al establecerlo en SÍ, AutoEnrollOnLaunch también debe ser SÍ. |
Opcional. El valor predeterminado es NO. |
| MAMPolicyWarnAbsent | Booleano | Especifica si la aplicación advierte al usuario durante el inicio si no hay ninguna directiva de protección de aplicaciones Intune. Nota: Los usuarios pueden continuar después de descartar la advertencia. |
Opcional. El valor predeterminado es NO. |
| MultiIdentity | Booleano | Especifica si la aplicación es compatible con varias identidades. Para obtener más información, consulte la documentación de varias identidades. | Opcional. El valor predeterminado es NO. |
| MultiIdentityCancelDisabled | Booleano | Deshabilita el botón Cancelar en Intune pantallas de interfaz de usuario de inicio condicional en aplicaciones de varias identidades. Si no se establece en SÍ, la aplicación debe controlar el código de IntuneMAMSwitchIdentityResultCanceled error. Consulte Cambiar identidades. |
Opcional. El valor predeterminado es NO. |
| SafariViewControllerBlockedOverride | Booleano | Deshabilita los enlaces SafariViewController de Intune para habilitar la autenticación de MSAL a través de SFSafariViewController, SFAuthSession o ASWebAuthSession. Nota: Solo aparece un botón de actividad configurado si la vista no está administrada y se establece en SÍ. |
Opcional. El valor predeterminado es NO. Advertencia: Puede provocar pérdida de datos si se usa incorrectamente. |
| SplashIconFile SplashIconFile~ipad |
Cadena | Especifica el archivo de icono de presentación (inicio) de Intune. | Opcional. |
| SplashDuration | Número | Tiempo mínimo en segundos que se muestra la pantalla de inicio de Intune. El valor predeterminado es 1.5. | Opcional. |
| BackgroundColor | Cadena | Especifica el color de fondo de Intune componentes de la interfaz de usuario del SDK. Acepta #XXXXXX o un valor hexadecimal sin el signo de libra. |
Opcional. El valor predeterminado es el color de fondo del sistema. |
| ForegroundColor | Cadena | Especifica el color de primer plano o texto de los componentes de la interfaz de usuario.
#XXXXXX Acepta o hexadecimal sin signo de libra. |
Opcional. El valor predeterminado es el color de la etiqueta del sistema. |
| AccentColor | Cadena | Especifica el color de énfasis de los componentes de la interfaz de usuario (botones, resaltado de cuadro pin).
#XXXXXX Acepta o hexadecimal sin signo de libra. |
Opcional. El valor predeterminado es azul del sistema. |
| SecondaryBackgroundColor | Cadena | Especifica el color de fondo secundario para las pantallas MTD.
#XXXXXX Acepta o hexadecimal sin signo de libra. |
Opcional. El valor predeterminado es blanco. |
| SecondaryForegroundColor | Cadena | Especifica el color de primer plano secundario para las pantallas MTD.
#XXXXXX Acepta o hexadecimal sin signo de libra. |
Opcional. El valor predeterminado es gris. |
| SupportsDarkMode | Booleano | Especifica si los colores de la interfaz de usuario siguen el modo oscuro del sistema cuando no se establecen colores explícitos. | Opcional. El valor predeterminado es SÍ. |
| MAMTelemetryDisabled | Booleano | Especifica si la telemetría se envía al back-end. | Opcional. El valor predeterminado es NO. |
| MAMTelemetryUsePPE | Booleano | Envía telemetría al back-end de PPE. Útil para probar aplicaciones para que los datos no se combinen con los datos del cliente. | Opcional. El valor predeterminado es NO. |
| MaxFileProtectionLevel | Cadena | Especifica el máximo NSFileProtectionType compatible con la aplicación. Invalida la directiva si el servicio envía un nivel superior.Valores posibles: NSFileProtectionComplete, NSFileProtectionCompleteUnlessOpen, NSFileProtectionCompleteUntilFirstUserAuthentication, NSFileProtectionNone.Notar: Con NSFileProtectionComplete, la aplicación pierde el acceso a los archivos protegidos aproximadamente 10 segundos después de que el dispositivo se bloquee, lo que puede interrumpir componentes como bases de datos locales. Las aplicaciones con interfaz de usuario de pantalla de bloqueo deben usar NSFileProtectionCompleteUntilFirstUserAuthentication. |
Opcional. Valores predeterminados de NSFileProtectionComplete. |
| OpenInActionExtension | Booleano | Establézcalo en SÍ para abrir en extensiones de acción. Consulte Uso compartido de datos a través de UIActivityViewController. | Opcional. |
| TreatAllWebViewsAsUnmanaged | Booleano | Trata todas las vistas web como no administradas para la aplicación de cortar, copiar y pegar. Consulte Visualización de contenido web. | Opcional. El valor predeterminado es NO. |
| WebViewHandledURLSchemes | Matriz de cadenas | Esquemas de direcciones URL controlados por webview de la aplicación. | Obligatorio si WebView controla los vínculos o la navegación de JavaScript. |
| DocumentBrowserFileCachePath | Cadena | Si usa UIDocumentBrowserViewController, establezca una ruta de acceso (relativa al directorio principal de la aplicación) para los archivos administrados descifrados. |
Opcional. Valores predeterminados de /Documents/. |
| VerboseLoggingEnabled | Booleano | Habilita el registro detallado. | Opcional. El valor predeterminado es NO. |
| FinishLaunchingAtStartup | Booleano | Necesario cuando se usa [BGTaskScheduler registerForTaskWithIdentifier:]; debe ser SÍ. |
Opcional. El valor predeterminado es NO. |
| ValuesToScrubFromLogging | Matriz de cadenas | Valores de configuración de la aplicación que se deben quitar de los registros. También se puede establecer a través de valuesToScrubFromLogging en IntuneMAMSettings. |
Opcional. |
Recepción de la directiva de protección de aplicaciones
Información general
Para recibir Intune directiva de protección de aplicaciones, las aplicaciones deben iniciar una solicitud de inscripción con el servicio Intune MAM. Las aplicaciones se pueden configurar en el centro de administración de Intune para recibir la directiva de protección de aplicaciones con o sin inscripción de dispositivos. Administración de aplicaciones móviles (MAM), permite que las aplicaciones se administren mediante Intune sin necesidad de que el dispositivo se inscriba en Intune administración de dispositivos móviles (MDM). En ambos casos, es necesario inscribirse con el servicio Intune MAM para recibir la directiva.
Importante
El SDK de aplicaciones de Intune para iOS usa claves de cifrado de 256 bits cuando las directivas de protección de aplicaciones habilitan el cifrado. Todas las aplicaciones deben tener una versión actual del SDK para permitir el uso compartido de datos protegidos.
Aplicaciones que ya usan ADAL o MSAL
Nota:
Autenticación de Azure AD Biblioteca (ADAL) y Azure Graph API de AD están en desuso. Para obtener más información, consulte Actualizar las aplicaciones para que usen la Biblioteca de autenticación de Microsoft (MSAL) y la API de Microsoft Graph.
Las aplicaciones que ya usan MSAL deben llamar al registerAndEnrollAccountId método en la IntuneMAMEnrollmentManager instancia después de que el usuario se haya autenticado correctamente:
/*
* This method adds the account to the list of registered accounts.
* An enrollment request starts immediately.
* @param accountId The Entra object ID of the account to be registered with the SDK
*/
(void)registerAndEnrollAccountId:(NSString *_Nonnull)accountId;
Al iniciar sesión correctamente, MSAL devuelve el resultado en el objeto MSALResult. Use tenantProfile.identifier en MSALResult como parámetro accountId para la API.
Al llamar al registerAndEnrollAccountId método , el SDK registra la cuenta de usuario e intenta inscribir la aplicación en nombre de esta cuenta. Si se produce un error en la inscripción por cualquier motivo, el SDK reintenta automáticamente la inscripción 24 horas más tarde. Con fines de depuración, la aplicación puede recibir notificaciones, a través de un delegado, sobre los resultados de las solicitudes de inscripción.
Una vez invocada esta API, la aplicación puede seguir funcionando de la forma normal. Si la inscripción se realiza correctamente, el SDK notifica al usuario que es necesario reiniciar la aplicación. En ese momento, el usuario puede reiniciar inmediatamente la aplicación.
[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822"];
Aplicaciones que no usan ADAL o MSAL
Las aplicaciones que no inician sesión en el usuario mediante ADAL o MSAL pueden seguir recibiendo la directiva de protección de aplicaciones del servicio Intune MAM llamando a la API para que el SDK controle esa autenticación. Las aplicaciones deben usar esta técnica cuando no han autenticado a un usuario con Microsoft Entra ID, pero todavía necesitan recuperar la directiva de protección de aplicaciones para ayudar a proteger los datos. Un ejemplo es si se usa otro servicio de autenticación para el inicio de sesión de la aplicación o si la aplicación no admite el inicio de sesión en absoluto. Para ello, la aplicación puede llamar al loginAndEnrollAccount método en la IntuneMAMEnrollmentManager instancia de :
/**
* Creates an enrollment request, which starts immediately.
* If no token can be retrieved for the identity, the user is prompted
* to enter their credentials, after which enrollment is retried.
* @param identity The UPN of the account to be logged in and enrolled.
*/
(void)loginAndEnrollAccount: (NSString *)identity;
Al llamar a este método, el SDK solicita al usuario las credenciales si no se encuentra ningún token existente. A continuación, el SDK intenta inscribir la aplicación con el servicio Intune MAM en nombre de la cuenta de usuario proporcionada. Se puede llamar al método con "nil" como identidad. En ese caso, el SDK se inscribe con el usuario administrado existente en el dispositivo (si MDM) o solicita al usuario un nombre de usuario si no se encuentra ningún usuario existente.
Si se produce un error en la inscripción, la aplicación debería considerar la posibilidad de volver a llamar a esta API en un momento futuro, en función de los detalles del error. La aplicación puede recibir notificaciones, a través de un delegado, sobre los resultados de las solicitudes de inscripción.
Una vez invocada esta API, la aplicación puede seguir funcionando con normalidad. Si la inscripción se realiza correctamente, el SDK notifica al usuario que es necesario reiniciar la aplicación.
Una vez administrada la aplicación, es necesario consultar el valor del identificador de objeto Microsoft Entra mediante enrolledAccountId en IntuneMAMEnrollmentManager. Úselo para todas las API del SDK de MAM que la aplicación usa para esta cuenta inscrita.
Ejemplo:
[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];
Permitir Intune controlar la autenticación y la inscripción en el inicio
Si quieres que el SDK de Intune controle toda la autenticación con ADAL/MSAL y la inscripción antes de que la aplicación termine de iniciarse, y la aplicación siempre requiere directivas de protección de aplicaciones, no tienes que usar loginAndEnrollAccount la API. Puede establecer la siguiente configuración en SÍ en el diccionario IntuneMAMSettings de info.plist de la aplicación.
| Configuración | Tipo | Definición |
|---|---|---|
| AutoEnrollOnLaunch | Booleano | Especifica si la aplicación debe intentar inscribirse automáticamente al iniciarse si se detecta una identidad administrada existente y aún no lo ha hecho. El valor predeterminado es NO. Nota: Si no se encuentra ninguna identidad administrada o no hay ningún token válido para la identidad disponible en la memoria caché de ADAL/MSAL, se produce un error en el intento de inscripción sin solicitar credenciales a menos que la aplicación también establezca MAMPolicyRequired en SÍ. |
| MAMPolicyRequired | Booleano | Especifica si se bloquea el inicio de la aplicación si la aplicación no tiene una directiva de protección de aplicaciones Intune. El valor predeterminado es NO. Nota: Las aplicaciones no se pueden enviar al App Store con MAMPolicyRequired establecido en SÍ. Al establecer en MAMPolicyRequiredSÍ, AutoEnrollOnLaunch también debe establecerse en SÍ. |
Si eliges esta opción para tu aplicación, no tienes que controlar el reinicio de la aplicación después de la inscripción.
Anulación del registro de cuentas de usuario
Antes de que un usuario haya iniciado sesión en una aplicación, la aplicación debe anular el registro del usuario del SDK. Este proceso garantiza lo siguiente:
Los reintentos de inscripción ya no se producen para la cuenta del usuario.
Protección de aplicaciones directiva se quita.
Los datos corporativos se eliminan si la aplicación inicia un borrado selectivo (opcional).
Antes de que el usuario haya iniciado sesión, la aplicación debe llamar al método siguiente en la IntuneMAMEnrollmentManager instancia:
/*
* This method removes the provided account from the list of
* registered accounts. Once removed, if the account enrolled
* the application, the account is un-enrolled.
* @note In the case where an un-enroll is required, this method blocks
* until the Intune APP AAD token is acquired, then returns. This method must be called before
* the user is removed from the application (so that required AAD tokens are not purged
* before this method is called).
* @param accountId The object ID of the account to be removed.
* @param doWipe If YES, a selective wipe if the account is un-enrolled
*/
(void)deRegisterAndUnenrollAccountId:(NSString *)accountId withWipe:(BOOL)doWipe;
Se debe llamar a este método antes de eliminar los tokens de Microsoft Entra de la cuenta de usuario. El SDK necesita los tokens de Microsoft Entra de la cuenta de usuario para realizar solicitudes específicas al servicio Intune MAM en nombre del usuario.
Si la aplicación elimina los datos corporativos del usuario por su cuenta, la doWipe marca se puede establecer en false. De lo contrario, la aplicación puede hacer que el SDK inicie un borrado selectivo. Esta acción da como resultado una llamada al delegado de borrado selectivo de la aplicación.
Ejemplo:
[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822" withWipe:YES];
Notificaciones de estado, resultado y depuración
La aplicación puede recibir notificaciones de estado, resultado y depuración sobre las siguientes solicitudes al servicio MAM de Intune:
- Solicitudes de inscripción
- Solicitudes de actualización de directivas
- Solicitudes de anulación de inscripción
Las notificaciones se presentan a través de métodos delegados en IntuneMAMEnrollmentDelegate.h:
/**
* Called when an enrollment request operation is completed.
* @param status status object containing debug information
*/
(void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
/**
* Called when a MAM policy request operation is completed.
* @param status status object containing debug information
*/
(void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
/**
* Called when a un-enroll request operation is completed.
* @Note: when a user is un-enrolled, the user is also de-registered with the SDK
* @param status status object containing debug information
*/
(void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
Estos métodos delegados devuelven un IntuneMAMEnrollmentStatus objeto que tiene la siguiente información:
- AccountId (id. de objeto) de la cuenta asociada a la solicitud
- La identidad (UPN) de la cuenta asociada a la solicitud
- Código de estado que indica el resultado de la solicitud
- Cadena de error con una descripción del código de estado
- Objeto
NSError. Este objeto se define enIntuneMAMEnrollmentStatus.h, junto con los códigos de estado específicos que se pueden devolver.
Código de ejemplo
A continuación se muestran implementaciones de ejemplo de los métodos delegados:
- (void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"enrollment result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
- (void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"policy check-in result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
- (void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"un-enroll result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
Reinicio de la aplicación
Cuando una aplicación recibe directivas MAM por primera vez, debe reiniciarse para aplicar los enlaces necesarios. Para notificar a la aplicación que es necesario reiniciar, el SDK proporciona un método delegado en IntuneMAMPolicyDelegate.h.
- (BOOL) restartApplication
El valor devuelto de este método indica al SDK si la aplicación debe controlar el reinicio necesario:
Si se devuelve true, la aplicación debe controlar el reinicio.
Si se devuelve false, el SDK reinicia la aplicación una vez devuelto este método. El SDK muestra inmediatamente un cuadro de diálogo que indica al usuario que reinicie la aplicación.
Nota:
Las aplicaciones maui de .NET no requieren un reinicio.
Criterios de salida
Después de configurar el complemento de compilación o de integrar la herramienta de línea de comandos en el proceso de compilación, compruebe que se ejecuta correctamente:
- Asegúrese de que la compilación se compila y compila correctamente.
- Inicie la aplicación compilada, inicie sesión con un usuario Microsoft Entra que no tenga como destino la directiva de Protección de aplicaciones y confirme que la aplicación funciona según lo previsto.
- Cierre la sesión y repita esta prueba con un usuario de Microsoft Entra que tenga como destino la directiva de Protección de aplicaciones y confirme que la aplicación se administra ahora mediante Intune y se reinicia.
En este momento de la integración, la aplicación ahora puede recibir y aplicar la directiva de Protección de aplicaciones. Ejecute las siguientes pruebas para validar la integración.
Primera prueba de aplicación de directiva
Ejecute primero la siguiente prueba para familiarizarse con la experiencia completa del usuario final de la aplicación de directivas dentro de la aplicación:
- Cree una directiva de protección de aplicaciones de iOS en el centro de administración de Microsoft Intune. Para esta prueba, configure la directiva:
- En Requisitos de acceso, deje la configuración predeterminada. En concreto, "PIN para el acceso" debe ser "Requerir".
- Asegúrese de que la directiva de Protección de aplicaciones está destinada a la aplicación. Es posible que tenga que agregar manualmente el identificador de agrupación de la aplicación en el Asistente para la creación de directivas.
- Asigne la directiva de Protección de aplicaciones a un grupo de usuarios que contenga la cuenta de prueba.
- Instale la aplicación.
- Inicie sesión en la aplicación con la cuenta de prueba destinada a la directiva de Protección de aplicaciones.
- Confirme que se le solicita una pantalla administrada Intune y confirme que la solicitud reinicia la aplicación. Esta pantalla indica que el SDK recupera correctamente la directiva de esta cuenta.
- Cree un PIN cuando se le pida que establezca un PIN de aplicación.
- Cierre la sesión de la cuenta administrada de la aplicación.
- Navegue por la aplicación y confirme que la aplicación funciona según lo esperado si es posible sin iniciar sesión.
Esta lista de pasos es una prueba *sin sistema operativo para confirmar que la aplicación registra correctamente la cuenta, registra la devolución de llamada de autenticación y anula el registro de la cuenta. Ejecute las siguientes pruebas para validar más exhaustivamente cómo modifican el comportamiento de la aplicación otras configuraciones de directiva de Protección de aplicaciones.
Pasos siguientes
Después de completar todos los criterios de salida, continúe con La fase 4: Características de participación de la aplicación.