第 3 阶段:将 Intune SDK 集成到 iOS 应用

注意

本指南分为几个不同的阶段。 首先查看“ 规划集成”。

阶段目标

  • 下载 Intune App SDK。
  • 了解 Intune App SDK 中包含哪些文件。
  • 在应用程序中引用 Intune App SDK。
  • 确认 Intune App SDK 已正确包含在版本中。
  • 使用 MSAL 进行身份验证后,注册用于 MAM 管理的新帐户。
  • 若要删除公司数据,请在注销时注销帐户
  • (建议的) 将 MAM 日志记录合并到应用中。

先决条件

  • 需要一台装有 Xcode 16.0 或更高版本的 macOS 计算机。

  • 应用必须面向 iOS 16.0 或更高版本。

  • 查看适用于 iOS 的 Intune 应用 SDK 许可条款。 打印并保留许可条款副本作为记录。 下载并使用适用于 iOS 的 Intune 应用 SDK,即表示你同意此类许可条款。 如果您不接受,则不要使用该软件。

  • GitHub 上下载适用于 iOS 的 Intune 应用 SDK 的文件。

SDK 存储库中的内容

  • IntuneMAMSwift.xcframework:Intune App SDK 动态框架。 建议将此框架链接到应用/扩展,以启用 Intune 客户端应用程序管理。 但是,某些开发人员可能更喜欢 IntuneMAMStatic.xcframework) (静态框架的性能优势。

  • IntuneMAMStatic.xcframework:Intune 应用 SDK 静态框架。 开发人员可能会选择链接静态框架,而不是动态框架。 由于静态框架中的可执行代码在生成时直接嵌入到应用/扩展二进制文件中,因此使用静态库在启动时具有一些性能优势。 但是,如果应用包含任何扩展,则将静态框架链接到应用和扩展将导致应用程序包大小变大。 可执行代码嵌入到每个应用/扩展二进制文件中。 相比之下,使用动态框架时,应用和扩展可以共享相同的 Intune SDK 二进制文件,从而缩小应用大小。

  • IntuneMAMSwiftStub.xcframework:Intune 应用 SDK Swift 存根框架。 此框架是 IntuneMAMSwift.xcframework 和 IntuneMAMStatic.xcframework 的必需依赖项,应用/扩展必须链接它们。

  • IntuneMAMConfigurator:用于使用 Intune 管理所需的最少更改来配置应用或扩展的 Info.plist 的工具。 根据应用或扩展的功能,可能需要对 Info.plist 进行更多手动更改。

  • libIntuneMAMSwift.xcframework:Intune 应用 SDK 静态库。 在将来的更新中,将弃用和删除 Intune MAM iOS SDK 的此变体。 建议不要链接静态库,而是将应用/扩展链接到上述 IntuneMAMSwift.xcframework) (动态框架或 IntuneMAMStatic.xc) framework (静态框架。

  • IntuneMAMResources.bundle:包含 SDK 依赖的资源的资源捆绑包。 只有将已弃用的静态库集成 (libIntuneMAMSwift.xcframework) 并在将来的更新中删除它的应用才需要资源捆绑包。

Intune 应用 SDK 的工作原理

适用于 iOS 的 Intune App SDK 的目标是以最少的代码更改向 iOS 应用程序添加管理功能。 代码更改的次数越少,上市时间就越短,但不会影响移动应用程序的一致性和稳定性。

进程流

下图提供了适用于 iOS 的 Intune 应用 SDK 进程流:

Microsoft Intune 的高级体系结构图。

将 SDK 构建到移动应用中

重要

Intune 定期发布 Intune 应用 SDK 的更新。 定期检查适用于 iOS 的 Intune 应用 SDK 是否更新,并合并到软件开发发布周期中,以确保应用支持最新的应用保护策略设置。

若要启用 Intune 应用 SDK,请执行以下步骤:

  1. 链接IntuneMAMSwift.xcframeworkIntuneMAMStatic.xcframework到目标:将 xcframework 捆绑包拖动到项目目标的框架、库和嵌入内容列表。 对 重复 IntuneMAMSwiftStub.xcframework这些步骤。 对于主应用,请在添加的两个 xcframework 的“嵌入”列中选择“嵌入 & 签名”。 对于任何扩展,请选择“不嵌入”。

    Intune 应用 SDK iOS 框架:Xcode 框架、库和嵌入内容示例

  2. 将这些 iOS 框架添加到项目中:

    • MessageUI.framework
    • Security.framework
    • CoreServices.framework
    • SystemConfiguration.framework
    • libsqlite3.tbd
    • libc++.tbd
    • ImageIO.framework
    • LocalAuthentication.framework
    • AudioToolbox.framework
    • QuartzCore.framework
    • WebKit.framework
    • MetricKit.framework
  3. 如果尚未启用密钥链共享 (,则) 选择每个项目目标中的 “功能” 并启用 密钥链共享 开关。 需要密钥链共享才能继续下一步。

    注意

    预配配置文件需要支持新的密钥链共享值。 密钥链访问组应支持通配符。 您可以通过在文本编辑器中打开 .mobileprovision 文件,搜索 keychain-access-groups 并确保您有通配符来检查这一点。 例如:

    <key>keychain-access-groups</key>
    <array>
    <string>YOURBUNDLESEEDID.*</string>
    </array>
    
  4. 启用密钥链共享后,请按照步骤创建单独的访问组,Intune 应用 SDK 在其中存储其数据。 可以使用 UI 或权利文件创建密钥链访问组。 如果使用 UI 创建密钥链访问组,请确保按照以下步骤操作:

    1. 如果移动应用未定义任何密钥链访问组,请将应用的捆绑包 ID 添加为 第一个 组。

    2. 将共享密钥链组 com.microsoft.intune.mam 添加到现有访问组。 Intune 应用 SDK 使用此访问组来存储数据。

    3. 添加到 com.microsoft.adalcache 现有访问组。

      Intune App SDK iOS:密钥链共享

      注意

      如果将 MSAL 配置为使用自定义密钥链访问组而不是默认的 com.microsoft.adalcache,则无需在此处指定此密钥链访问组。 请改为指定自定义密钥链组。 还应通过 IntuneMAMSettings Info.plist 字典中的 ADALCacheKeychainGroupOverride 设置将 Intune 配置为使用相同的自定义访问组。

    4. 如果直接编辑权利文件,而不是使用 Xcode UI 创建密钥链访问组,请在密钥链访问组前附加 ($(AppIdentifierPrefix) Xcode 处理此操作会自动) 。 例如:

      • $(AppIdentifierPrefix)com.microsoft.intune.mam
      • $(AppIdentifierPrefix)com.microsoft.adalcache

      注意

      权利文件是移动应用程序特有的 XML 文件。 它用于在 iOS 应用中指定特殊权限和功能。 如果你的应用以前没有权利文件,则在步骤 3) 启用密钥链共享 (应该会导致 Xcode 为你的应用生成一个。 确保应用的捆绑包 ID 是列表中的第一个条目。

  5. 将应用传递到 UIApplication canOpenURL 的每个协议包含在应用的 Info.plist 文件的数组中 LSApplicationQueriesSchemes 。 对于此数组中列出的每个协议,将附加到 -intunemam 数组中的协议的副本。 此外,将以下值添加到数组中:http-intunemam、、https-intunemammicrosoft-edge-https-intunemammvisionmobilebetteractiveshieldskycuresmsecscmxmicrosoft-edge-http-intunemamzipsintunemam-mtdsmart-nslacoonsecuritywanderalookoutwork-ase和 。 如果应用使用 mailto: 协议,请也添加到 ms-outlook-intunemam 数组中。 在继续下一步之前,请保存更改。

    如果应用在其 LSApplicationQueriesSchemes 列表中的空间不足,它可以删除已知也实现 Intune MAM SDK 的应用的“-intunemam”方案。 当应用从 LSApplicationQueriesSchemes 列表中删除“scheme-intunemam”时, canOpenURL() 可能会返回这些方案的错误响应。 若要解决此问题,请改为调用 [IntuneMAMPolicy isURLAllowed:url isKnownManagedAppScheme:YES] 该方案。 如果策略阻止打开 URL,则此调用将返回 NO 。 如果返回 true,则应用可以使用空标识进行调用 canOpenURL() ,以确定是否可以打开该 URL。 例如:

    BOOL __block canOpen = NO;
    if([policy isURLAllowed:urlForKnownManagedApp isKnownManagedAppScheme:YES])
    {
        [[IntuneMAMPolicyManager instance] setCurrentThreadAccountId:"" forScope:^{
        canOpen = [[UIApplication sharedApplication] canOpenURL:urlForKnownManagedApp];
        }];
    }
    
  6. 如果应用尚未使用 FaceID,请确保使用默认消息配置了 NSFaceIDUsageDescription Info.plist 密钥 。 此步骤是必需的,以便 iOS 可以让用户知道该应用打算如何使用 FaceID。 Intune 应用保护策略设置允许 IT 管理员配置 FaceID 作为应用访问方法。

  7. 使用 SDK 存储库 中包含的 IntuneMAMConfigurator 工具完成对应用的 Info.plist 的配置。 该工具具有三个参数:

    属性 如何使用
    - 我 <Path to the input plist>
    - e <Path to the entitlements file>
    - o (可选) <Path to the output plist>

    如果未指定 '-o' 参数,将就地修改输入文件。 该工具是幂等的,每当对应用的 Info.plist 或权利进行更改时,都应重新运行。 更新 Intune SDK 时,还应下载并运行该工具的最新版本,以防最新版本中 Info.plist 配置要求发生更改。

注意

如果你有 SwiftUI 应用,请确保 UISceneConfigurations Info.pist 文件中的字 UIApplicationSceneManifest 典没有缺失或为空。 如果未能配置此设置,可能会阻止 Intune SDK 保护你的应用,尽管已成功应用应用保护策略。 如果没有为 , UISceneConfigurations 则可以使用此默认配置:

<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>

Xcode 生成设置和功能

应用程序应具有“Strip Swift Symbols” (STRIP_SWIFT_SYMBOLS) 和“Enable Bitcode” (ENABLE_BITCODE) 在 Xcode 生成设置中设置为 NO。 如果你的应用程序包含 Xcode 26+ 中提供的“增强的安全性”功能,则必须禁用“验证指针”和“启用只读平台内存”选项。

集成文件提供程序扩展

文件提供程序扩展具有一定的内存要求,这可能会使集成完整 SDK 变得困难。 为了方便起见,有一个静态库 libIntuneMAMSwiftFileProvider.xcframework,它是专门用于文件提供程序扩展的 SDK 精简版本。 请注意,此库用于 FileProvider 扩展的非 UI 部分。 需要将完整的 SDK 集成到文件提供程序 UI 扩展中。

若要将这些库之一与文件提供程序扩展集成,请按照将 SDK 集成为静态库的步骤进行操作。 确保包含 ContainingAppBundleId 设置。

集成非复制的文件提供程序扩展

如果应用实现 NSFileProviderExtension 协议,则其正在使用非复制文件提供程序。 不会复制 iOS 16.0 之前创建的所有文件提供程序。

在 - startProvidingItemAtURL:completionHandler 中:检查是否应使用 [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles] 加密文件。 使用 IntuneMAMFileProtectionManager 中的 encryptFile:forAccountId: API 进行实际文件加密。 此外,当需要加密时共享文件的副本,因为您不希望在云存储中存储文件的加密副本。

在 - importDocumentAtURL:toParentItemIdentifier:completionHandler 中:是否使用 IntuneMAMFileProtectionManager 中的 isFileEncrytped: API 检查文件是否加密。 如果是,请使用 IntuneMAMFileProtectionManager 的 decryptFile:toCopyPath: API 对其进行解密。 在多标识应用中,还要针对目标所有者的 IntuneMAMPolicy 中的 canReceiveSharedFile: API 检查,以确定所有者是否可以接收文件。

集成复制的文件提供程序扩展

如果应用实现了 iOS 16.0) 中添加的 NSFileProviderReplicatedExtension 协议 (则该应用正在使用复制的文件提供程序。

在 - fetchContentsForItemWithIdentifier:version:request:completionHandler 中:检查是否应使用 [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles] 加密文件。 使用 IntuneMAMFileProtectionManager 中的 encryptFile:forAccountId: API 进行实际文件加密。 当需要加密时,共享文件副本,因为你不希望在云存储中存储文件的加密副本。

在 - createItemBasedOnTemplate:fields:contents:options:request:completionHandler 中:是否使用 IntuneMAMFileProtectionManager 中的 isFileEncrypted: API 检查文件是否加密。 如果是,请使用 IntuneMAMFileProtectionManager 的 decryptFile:toCopyPath: API 对其进行解密。 在多标识应用中,还要针对目标所有者的 IntuneMAMPolicy 中的 canReceiveSharedFile: API 检查,以确定所有者是否可以接收文件。

无论在复制的文件提供程序创建 NSFileProviderItem 并将其传递给系统的位置,请使用项的所有者标识调用 IntuneMAMFileProtectionManager 的 protectFileProviderItem:forAccountId: API。 根据在扩展中创建和持久化 NSFileProviderItem 对象的位置,可能需要在每个 NSFileProviderReplicatedExtension 的协议方法中执行此操作。

配置 Intune 应用 SDK 的设置

可以使用应用程序的 Info.plist 文件中的 IntuneMAMSettings 字典设置和配置 Intune 应用 SDK。 如果 Info.plist 文件中未显示 IntuneMAMSettings 字典,则应创建该字典。

在 IntuneMAMSettings 字典下,可以定义以下受支持的设置来配置 Intune 应用 SDK。

前面的部分介绍了其中一些设置,有些设置不适用于所有应用。

Setting 类型类型 定义 是否必需?
ADALClientId String 应用的 Microsoft Entra 客户端标识符。 所有应用都需要。
ADALAuthority String 正在使用应用的 Microsoft Entra 机构。 应使用配置了 Microsoft Entra 帐户的自己的环境。 有关详细信息,请参阅 应用程序配置选项 如果应用是为在单个组织/Microsoft Entra 租户中使用而构建的自定义业务线应用程序则为必需。 如果不存在此值,则使用通用Microsoft Entra机构 (仅支持多租户应用) 。
ADALRedirectUri String 应用的 Microsoft Entra 重定向 URI。 所有应用都需要 ADALRedirectUri 或 ADALRedirectScheme。
ADALRedirectScheme String 应用的 Microsoft Entra ID 重定向方案。 如果应用程序的重定向 URI 格式为 scheme://bundle_id,则这可用于代替 ADALRedirectUri。 所有应用都需要 ADALRedirectUri 或 ADALRedirectScheme。
ADALLogOverrideDisabled 布尔值 指定 SDK 是否将所有 MSAL 日志 (包括来自应用的 MSAL 调用(如果有) )路由到其自己的日志文件。 默认为否。 如果应用设置自己的 MSAL 日志回调,则设置为 YES。 可选。
ADALCacheKeychainGroupOverride String 指定要用于 MSAL 缓存的密钥链组,而不是 "com.microsoft.adalcache"。 系统在运行时自动添加此前缀。 可选。
AppGroupIdentifiers 字符串数组 应用的权利 com.apple.security.application-groups 部分中的应用组数组。 如果应用使用应用程序组则为必需。
ContainingAppBundleId String 指定扩展的包含应用程序的捆绑包 ID。 对于 iOS 扩展是必需的。
AutoEnrollOnLaunch 布尔值 指定如果检测到现有托管标识但尚未这样做,应用是否应尝试在启动时自动注册。 默认为否。

注意: 如果未找到托管标识或在 MSAL 缓存中没有可用的有效令牌,则注册将以无提示方式失败,除非 MAMPolicyRequired 为“是”。
可选。 默认为否。
MAMPolicyRequired 布尔值 指定如果应用没有 Intune 应用保护策略,是否阻止其启动。 默认为否。

注意:将此设置为“是”时,无法将应用提交到 App Store。 设置为 YES 时, AutoEnrollOnLaunch 也应为 YES。
可选。 默认为否。
MAMPolicyWarnAbsent 布尔值 指定如果没有 Intune 应用保护策略,应用是否在启动期间警告用户。

注意: 消除警告后,用户仍可以继续。
可选。 默认为否。
MultiIdentity 布尔值 指定应用是否可感知多重身份。 有关更多信息,请参阅 多身份文档 可选。 默认为否。
MultiIdentityCancelDisabled 布尔值 在多标识应用程序中的 Intune 条件启动 UI 屏幕上禁用“取消”按钮。 如果未设置为“是”,则应用必须处理 IntuneMAMSwitchIdentityResultCanceled 故障代码。 请参阅 切换标识 可选。 默认为否。
SafariViewControllerBlockedOverride 布尔值 禁用 Intune 的 SafariViewController 挂钩,以通过 SFSafariViewController、SFAuthSession 或 ASWebAuthSession 启用 MSAL 身份验证。

注意: 仅当视图不受管理且该视图设置为“是”时,才会显示配置的活动按钮。
可选。 默认为否。

警告: 如果使用不当,可能会导致数据泄露。
SplashIconFile
SplashIconFile~ipad
String 指定启动) 图标文件 (启动Intune。 可选。
SplashDuration 数字 显示 Intune 启动屏幕的最短时间(以秒为单位)。 默认为 1.5。 可选。
BackgroundColor String 指定 Intune SDK UI 组件的背景色。 接受 #XXXXXX 或不带井号的十六进制值。 可选。 默认为系统背景色。
ForegroundColor String 指定 UI 组件的前景色/文本颜色。 接受或 #XXXXXX 不带井号的十六进制。 可选。 默认为系统标签颜色。
AccentColor String 指定 UI 组件 (按钮、PIN 框突出显示) 的强调色。 接受或 #XXXXXX 不带井号的十六进制。 可选。 默认为系统蓝色。
SecondaryBackgroundColor String 指定 MTD 屏幕的辅助背景色。 接受或 #XXXXXX 不带井号的十六进制。 可选。 默认为白色。
SecondaryForegroundColor String 指定 MTD 屏幕的辅助前景色。 接受或 #XXXXXX 不带井号的十六进制。 可选。 默认为灰色。
SupportsDarkMode 布尔值 指定在未设置显式颜色时,UI 颜色是否遵循系统深色模式。 可选。 默认为 YES。
MAMTelemetryDisabled 布尔值 指定是否将遥测发送到后端。 可选。 默认为否。
MAMTelemetryUsePPE 布尔值 将遥测发送到 PPE 后端。 对于测试应用非常有用,使数据不会与客户数据混合。 可选。 默认为否。
MaxFileProtectionLevel String 指定应用支持的最大值 NSFileProtectionType 。 如果服务发送更高级别,则替代策略。

可能值: NSFileProtectionCompleteNSFileProtectionCompleteUnlessOpenNSFileProtectionCompleteUntilFirstUserAuthenticationNSFileProtectionNone

注意: 使用 ,应用会 NSFileProtectionComplete在设备锁定后 ~10 秒失去对受保护文件的访问权限,这可能会破坏本地数据库等组件。 具有锁屏界面 UI 的应用应使用 NSFileProtectionCompleteUntilFirstUserAuthentication.
可选。 默认为 NSFileProtectionComplete
OpenInActionExtension 布尔值 对于“在操作中打开”扩展,设置为“是”。 请参阅 通过 UIActivityViewController 共享数据 可选。
TreatAllWebViewsAsUnmanaged 布尔值 将所有 WebView 视为非托管,以便强制执行剪切/复制/粘贴。 请参阅 显示 Web 内容 可选。 默认为否。
WebViewHandledURLSchemes 字符串数组 由应用的 WebView 处理的 URL 方案。 如果 WebView 处理链接或 JavaScript 导航,则为必需。
DocumentBrowserFileCachePath String 如果使用 UIDocumentBrowserViewController,则设置相对于解密的托管文件的应用主目录) 的路径 (。 可选。 默认为 /Documents/
VerboseLoggingEnabled 布尔值 启用详细日志记录。 可选。 默认为否。
FinishLaunchingAtStartup 布尔值 使用 [BGTaskScheduler registerForTaskWithIdentifier:]时必需;必须为“是”。 可选。 默认为否。
ValuesToScrubFromLogging 字符串数组 应从日志中删除的应用程序配置值。 也可以通过 on IntuneMAMSettings进行设置valuesToScrubFromLogging 可选。

接收应用保护策略

概述

若要接收 Intune 应用保护策略,应用必须使用 Intune MAM 服务启动注册请求。 可以在 Intune 管理中心配置应用,以接收应用保护策略,无论是否使用设备注册。 移动应用程序管理 (MAM) 允许 Intune 管理应用,而无需在 MDM) Intune移动设备管理中注册设备 (。 在这两种情况下,都需要注册 Intune MAM 服务才能接收策略。

重要

当应用保护策略启用加密时,适用于 iOS 的 Intune App SDK 使用 256 位加密密钥。 所有应用都需要具有最新的 SDK 版本,以允许受保护的数据共享。

已使用 ADAL 或 MSAL 的应用

注意

已弃用 Azure AD 身份验证 库 (ADAL) 和 Azure AD 图形 API。 有关详细信息,请参阅 更新应用程序以使用 Microsoft 身份验证库 (MSAL) 和 Microsoft 图形 API

已使用 MSAL 的应用应 registerAndEnrollAccountId 在成功对用户进行身份验证后调用实例上 IntuneMAMEnrollmentManager 的方法:

/*
 *  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;

成功登录后,MSAL 会在 MSALResult 对象中发回结果。 使用 MSALResult 中的 tenantProfile.identifier 作为 API 的 accountId 参数。

通过调用该 registerAndEnrollAccountId 方法,SDK 将注册用户帐户,并尝试代表此帐户注册应用。 如果注册由于任何原因而失败,SDK 将在 24 小时后自动重试注册。 出于调试目的,应用可以通过代理接收有关任何注册请求结果的 通知

调用此 API 后,应用可以继续正常运行。 如果注册成功,SDK 将通知用户需要重启应用。 届时,用户可以立即重启应用。

[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822"];

不使用 ADAL 或 MSAL 的应用

未使用 ADAL 或 MSAL 登录用户的应用仍可以通过调用 API 让 SDK 处理该身份验证,从 Intune MAM 服务接收应用保护策略。 如果应用尚未使用 Microsoft Entra ID 对用户进行身份验证,但仍需要检索应用保护策略以帮助保护数据,则应使用此技术。 例如,如果应用登录正在使用其他身份验证服务,或者该应用根本不支持登录。 为此,应用程序可以在实例上IntuneMAMEnrollmentManager调用loginAndEnrollAccount方法:

/**
 *  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;

通过调用此方法,如果找不到现有令牌,SDK 会提示用户输入凭据。 然后,SDK 代表提供的用户帐户尝试向 Intune MAM 服务注册应用。 可以以“nil”作为标识来调用该方法。 在这种情况下,如果 MDM) ,则 SDK (设备上的现有托管用户进行注册,如果未找到现有用户,则提示用户输入用户名。

如果注册失败,应用应考虑在将来再次调用此 API,具体取决于失败的详细信息。 应用可以通过代理接收有关任何注册请求结果的 通知

调用此 API 后,应用可以继续正常运行。 如果注册成功,SDK 将通知用户需要重启应用。 管理应用后,需要使用 enrolledAccountIdIntuneMAMEnrollmentManagerExcel 中的 查询 Microsoft Entra 对象 ID 值。 用于应用用于此注册帐户的所有 MAM SDK API。

示例:

[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];

在启动时让 Intune 处理身份验证和注册

如果希望 Intune SDK 在应用完成启动之前使用 ADAL/MSAL 处理所有身份验证和注册,并且应用始终需要应用保护策略,则无需使用 loginAndEnrollAccount API。 可以在应用的 Info.plist 的 IntuneMAMSettings 字典中将以下设置设置为“是”。

Setting 类型类型 定义
AutoEnrollOnLaunch 布尔值 指定如果检测到现有托管标识但尚未这样做,应用是否应尝试在启动时自动注册。 默认为 NO。

注意:如果未找到托管标识,或者在 ADAL/MSAL 缓存中没有可用的有效标识令牌,则注册尝试将以无提示方式失败,而不会提示输入凭据,除非应用也设置为MAMPolicyRequired“是”
MAMPolicyRequired 布尔值 指定如果应用没有 Intune 应用保护策略,是否阻止应用启动。 默认为 NO。

注意:将 App 提交到 App MAMPolicyRequired Store 时设置为“是”。 设置为 YESMAMPolicyRequiredAutoEnrollOnLaunch也应设置为 YES

如果为应用选择此选项,则无需在注册后处理重启应用。

注销用户帐户

在用户注销应用之前,该应用应从 SDK 中注销该用户。 此过程可确保:

  1. 不再针对用户帐户进行注册重试。

  2. 删除应用保护策略。

  3. 如果应用启动选择性擦除 (可选) ,则会删除公司数据。

在用户注销之前,应用应在实例上 IntuneMAMEnrollmentManager 调用以下方法:

/*
 *  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;

必须在删除用户帐户的 Microsoft Entra 令牌之前调用此方法。 SDK 需要用户帐户的 Microsoft Entra 令牌才能代表用户向 Intune MAM 服务发出特定请求。

如果应用自行删除用户的公司数据,则可以将该 doWipe 标志设置为 false。 否则,应用可以让 SDK 启动选择性擦除。 此操作会导致调用应用的选择性擦除委托。

示例:

[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822" withWipe:YES];

状态、结果和调试通知

应用可以接收有关对 Intune MAM 服务的以下请求的状态、结果和调试通知:

  • 注册请求
  • 策略更新请求
  • 注销请求

通知通过以下委 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;

这些委托方法返回的 IntuneMAMEnrollmentStatus 对象具有以下信息:

  • 与请求关联的帐户的 accountId (对象 ID)
  • 与请求关联的帐户的标识 (UPN)
  • 指示请求结果的状态代码
  • 包含状态代码说明的错误字符串
  • NSError一个对象。 此对象在 中 IntuneMAMEnrollmentStatus.h定义,以及可返回的特定状态代码。

示例代码

以下是委托方法的示例实现:

- (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);
}

应用程序重启

当应用首次收到 MAM 策略时,它必须重启才能应用所需的挂钩。 为了通知应用需要重启,SDK 在 中 IntuneMAMPolicyDelegate.h提供了一个委托方法。

 - (BOOL) restartApplication

此方法的返回值将告知应用程序是否必须处理所需的重启:

  • 如果返回 true,则应用程序必须处理重新启动。

  • 如果返回 false,则 SDK 会在此方法返回后重启应用程序。 SDK 立即显示一个对话框,告知用户重启应用程序。

注意

.NET MAUI 应用不需要重启。

退出条件

配置生成插件或将命令行工具集成到生成过程后,请验证它是否成功运行:

  • 确保版本编译并成功生成。
  • 启动已编译的应用,使用不适用于应用保护策略的 Microsoft Entra 用户登录,并确认应用按预期运行。
  • 注销并对以应用保护策略为目标的 Microsoft Entra 用户重复此测试,并确认该应用现在由 Intune 管理并已重启。

在集成的此时,应用现在可以接收并强制实施应用保护策略。 执行以下测试来验证集成。

第一个策略应用程序测试

首先执行以下测试,以熟悉应用中策略应用的完整最终用户体验:

  1. 在 Microsoft Intune 管理中心创建 iOS 应用保护策略。 对于此测试,请配置策略:
    • 在“访问要求”下,保留默认设置。 值得注意的是,“用于访问的 PIN”应为“需要”。
  2. 确保应用保护策略面向你的应用程序。 可能需要在策略创建向导中手动添加应用程序的捆绑包 ID。
  3. 将应用保护策略分配给包含测试帐户的用户组。
  4. 安装应用程序。
  5. 使用以应用保护策略为目标的测试帐户登录到应用程序。
  6. 确认收到 Intune 托管屏幕提示,确认提示会重启应用。 此屏幕指示 SDK 成功检索此帐户的策略。
  7. 当系统提示设置应用 PIN 时,请创建 PIN。
  8. 从应用程序中注销托管帐户。
  9. 浏览应用程序并确认应用按预期工作(如果可能),而无需登录。

此步骤列表是*最低限度的测试,用于确认你的应用已正确注册帐户、注册身份验证回调和注销帐户。 执行以下测试,以更彻底地验证其他应用保护策略设置如何修改应用程序的行为。

后续步骤

完成所有 退出条件后,继续转到 第 4 阶段:应用参与功能