注意事項
本指南分為幾個不同的階段。 首先檢閱規劃整合。
階段目標
- 下載 Intune 應用程式 SDK。
- 了解 Intune App SDK 中包含的檔案。
- 在應用程式中參考 Intune App SDK。
- 確認 Intune App SDK 已正確包含在您的組建中。
- 向 MSAL 驗證之後,註冊新帳戶以進行 MAM 管理。
- 若要移除公司資料,請在登出時取消註冊帳戶
- (建議) 將 MAM 記錄納入您的應用程式。
必要條件
您需要一部裝有 Xcode 16.0 或更新版本的 macOS 電腦。
您的應用程式必須以 iOS 16.0 或更新版本為目標。
檢閱適用於 iOS 的 Intune App SDK 授權條款。 列印並保留授權條款的副本以備記錄。 下載並使用適用於 iOS 的 Intune App SDK,即表示您同意此類授權條款。 若不接受,請勿使用軟體。
在 GitHub 上下載 iOS 版 Intune App SDK 的檔案。
SDK 存放庫中的內容
IntuneMAMSwift.xcframework:Intune App SDK 動態架構。 建議您將此架構連結至應用程式/擴充功能,以啟用 Intune 用戶端應用程式管理。 不過,有些開發人員可能偏好靜態架構 (IntuneMAMStatic.xcframework) 的效能優點。
IntuneMAMStatic.xcframework:Intune 應用程式 SDK 靜態架構。 開發人員可能會選擇連結靜態架構,而非動態架構。 由於靜態架構的可執行檔程式碼會在建置時直接內嵌至應用程式/擴充功能二進位檔中,因此使用靜態程式庫在啟動時有一些效能優點。 不過,如果您的應用程式包含任何擴充功能,將靜態架構連結至應用程式和擴充功能會導致應用程式套件大小變大。 可執行檔程式碼會內嵌到每個應用程式/擴充功能二進位檔中。 相反地,使用動態架構時,應用程式和擴充功能可以共用相同的 Intune SDK 二進位檔,產生較小的應用程式大小。
IntuneMAMSwiftStub.xcframework:Intune App SDK Swift Stub 架構。 此架構是 IntuneMAMSwift.xcframework 和 IntuneMAMStatic.xcframework 的必要相依性,應用程式/擴充功能必須連結。
IntuneMAMConfigurator:用來設定應用程式或擴充功能的 Info.plist 的工具,並使用 Intune 管理所需的最少變更。 視應用程式或擴充功能的功能而定,您可能需要對 Info.plist 進行更多手動變更。
libIntuneMAMSwift.xcframework:Intune 應用程式 SDK 靜態程式庫。 此 Intune MAM iOS SDK 變體已棄用,並會在未來的更新中移除。 建議您不要連結靜態程式庫,而是將您的應用程式/擴充功能連結至動態架構 (IntuneMAMSwift.xcframework) ,或靜態架構 (IntuneMAMStatic.xcframework) 上述。
IntuneMAMResources.bundle:包含 SDK 所仰賴資源的資源套件。 只有在將已過時的靜態程式庫整合 (libIntuneMAMSwift.xcframework) 並在未來更新中將其移除的應用程式,才需要資源套件。
Intune App SDK 的運作方式
適用於 iOS 的 Intune App SDK 的目標是以最少的程式碼變更將管理功能新增到 iOS 應用程式。 更改的代碼越少,上市時間就越短,但不會影響移動應用程序的一致性和穩定性。
處理流程
下圖提供適用於 iOS 的 Intune App SDK 程序流程:
將 SDK 建入行動應用程式
重要事項
Intune 會定期發行 Intune 應用程式 SDK 的更新。 定期檢查適用於 iOS 的 Intune App SDK 是否有更新,並納入軟體開發發行週期,以確保您的應用程式支援最新的應用程式保護原則設定。
若要啟用 Intune App SDK,請遵循下列步驟:
連結至
IntuneMAMSwift.xcframeworkIntuneMAMStatic.xcframework目標:將 xcframework 套件組合拖曳至專案目標的「架構、程式庫和內嵌內容」清單。 針對IntuneMAMSwiftStub.xcframework重複這些步驟。 針對您的主要應用程式,請在 [內嵌] 欄中為新增的兩個 xcframeworks 選取 [內嵌 & 簽署]。 針對任何擴充功能,請選取 [不要內嵌]。
將這些 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
如果尚未啟用鑰匙圈共用 (,請啟用) 方法是在每個專案目標中選擇 [功能] 並啟用 [鑰匙圈共用 ] 開關。 您需要進行鑰匙圈共用才能繼續進行下一步。
注意事項
您的佈建設定檔必須支援新的鑰匙圈共用值。 鑰匙圈存取群組應該支援萬用字元。 您可以透過在文字編輯器中開啟 .mobileprovision 檔案、搜尋 keychain-access-groups 並確保您具有萬用字元來檢查這一點。 例如:
<key>keychain-access-groups</key> <array> <string>YOURBUNDLESEEDID.*</string> </array>啟用鑰匙圈共用之後,請遵循下列步驟,建立 Intune App SDK 儲存其資料的個別存取群組。 您可以使用 UI 或權利檔案來建立鑰匙圈存取群組。 如果您使用 UI 建立鑰匙圈存取群組,請務必遵循下列步驟:
如果您的行動應用程式未定義任何鑰匙圈存取群組,請將應用程式的套件識別碼新增為 第一個 群組。
將共用鑰匙圈群組
com.microsoft.intune.mam新增至您現有的存取群組。 Intune App SDK 會使用此存取群組來儲存資料。新增至
com.microsoft.adalcache您現有的存取群組。
注意事項
如果您將 MSAL 設定為使用自訂鑰匙圈存取群組,而不是預設的
com.microsoft.adalcache,則不需要在此處指定此鑰匙圈存取群組。 請改為指定自訂鑰匙圈群組。 您也應該透過 IntuneMAMSettings Info.plist 字典內的 ADALCacheKeychainGroupOverride 設定將 Intune 設定為使用相同的自訂存取群組。如果您直接編輯權利檔案,而不是使用 Xcode UI 來建立鑰匙圈存取群組,請在鑰匙圈存取群組前面加上
$(AppIdentifierPrefix)Xcode 處理 (自動) 。 例如:$(AppIdentifierPrefix)com.microsoft.intune.mam$(AppIdentifierPrefix)com.microsoft.adalcache
注意事項
權益檔案是您的行動應用程式所獨有的 XML 檔案。 它用來指定 iOS 應用程式中的特殊權限和功能。 如果您的應用程式先前沒有權利檔案, (步驟 3) 啟用鑰匙圈共用應該會導致 Xcode 為您的應用程式產生一個。 確定應用程式的套件識別碼是清單中的第一個項目。
在應用程式的 Info.plist 檔案陣列中
LSApplicationQueriesSchemes包含應用程式UIApplication canOpenURL傳遞給的每個通訊協定。 針對此陣列中所列的每個通訊協定,新增附加 的-intunemam通訊協定複本至陣列。 此外,將這些值新增至陣列:http-intunemam、、https-intunemam、microsoft-edge-http-intunemamsmart-nssmsecbetteractiveshieldmvisionmobilescmxmicrosoft-edge-https-intunemamlacoonsecurityintunemam-mtdzipswanderalookoutwork-aseskycure和 。 如果您的應用程式使用 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]; }]; }如果您的應用程式尚未使用 FaceID,請確保以預設訊息設定 NSFaceIDUsageDescription Info.plist 機碼 。 這是必需的步驟,以便 iOS 可以讓用戶知道該應用程序打算如何使用 FaceID。 Intune 應用程式保護原則設定允許在 IT 系統管理員設定時,將 FaceID 用作應用程式存取的方法。
使用 SDK 存放庫 中包含的 IntuneMAMConfigurator 工具來完成設定應用程式的 Info.plist。 此工具有三個參數:
Property 使用方式 - 我 <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 組建設定和功能
該應用程序應該同時具有“剝離 Swift 符號” (STRIP_SWIFT_SYMBOLS) 和“啟用 Bitcode” (ENABLE_BITCODE) 在 Xcode 組建設置中設置為“否”。 如果您的應用程式包括 Xcode 26+ 中可用的「增強安全性」功能,您必須停用「驗證指標」和「啟用唯讀平台記憶體」選項。
整合檔案提供者延伸模組
檔案提供者延伸模組具有特定的記憶體需求,可能會使整合完整 SDK 變得困難。 為了方便起見,有一個靜態庫 libIntuneMAMSwiftFileProvider.xcframework,它是專門用於檔案提供者擴充功能的 SDK 精簡版本。 請注意,此程式庫適用於 FileProvider 延伸模組的非 UI 部分。 您必須將完整的 SDK 整合到檔案提供者 UI 延伸模組。
若要將其中一個程式庫與您的檔案提供者擴充功能整合,請遵循將 SDK 整合為靜態程式庫的步驟。 請務必包含 ContainingAppBundleId 設定。
整合未複寫的檔案提供者延伸模組
如果您的應用程式實作 NSFileProviderExtension 通訊協定,則它使用未複寫的檔案提供者。 在 iOS 16.0 之前建立的所有檔案提供者都是不可複寫的。
在 - startProvidingItemAtURL:completionHandler:檢查您是否應該使用 [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles] 加密檔案。 使用 encryptFile:forAccountId: IntuneMAMFileProtectionManager 中的 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 App SDK 的設定
您可以使用應用程式 Info.plist 檔案中的 IntuneMAMSettings 字典來安裝和設定 Intune 應用程式 SDK。 如果在 Info.plist 檔案中未看到 IntuneMAMSettings 字典,您應該建立它。
在 IntuneMAMSettings 字典下,您可以定義下列支援的設定來設定 Intune 應用程式 SDK。
前面的章節涵蓋其中一些設定,有些則不適用於所有應用程式。
| 設定 | 類型 | 定義 | 必要? |
|---|---|---|---|
| ADALClientId | 字串 | 應用程式的 Microsoft Entra 用戶端識別碼。 | 所有應用程式的必要項目。 |
| ADALAuthority | 字串 | 使用中應用程式的 Microsoft Entra 授權單位。 您應該使用自己的設定 Microsoft Entra 帳戶的環境。 如需詳細資訊,請參閱 應用程式組態選項。 | 如果應用程式是專為在單一組織/Microsoft Entra 租用戶中使用而建置的自訂企業營運應用程式,則為必要。 如果缺少此值,則會使用通用Microsoft Entra授權單位, (僅支援多租用戶應用程式) 。 |
| ADALRedirectUri | 字串 | 應用程式的 Microsoft Entra 重新導向 URI。 | 所有應用程式都需要 ADALRedirectUri 或 ADALRedirectScheme。 |
| ADALRedirectScheme | 字串 | 應用程式的 Microsoft Entra ID 重新導向配置。 如果應用程式的重新導向 URI 採用格式 scheme://bundle_id,則可以取代 ADALRedirectUri 。 |
所有應用程式都需要 ADALRedirectUri 或 ADALRedirectScheme。 |
| ADALLogOverrideDisabled | 布林值 | 指定 SDK 是否將所有 MSAL 記錄路由傳送至它自己的記錄檔, (包括來自應用程式的 MSAL 呼叫 (如果有的話) )。 預設為 NO。 如果應用程式設定自己的 MSAL 記錄回呼,請設定為 YES。 | 選用。 |
| ADALCacheKeychainGroupOverride | 字串 | 指定要用於 MSAL 快取的鑰匙圈群組,而非 "com.microsoft.adalcache"。 系統會在執行階段自動加上此前置詞。 |
選用。 |
| AppGroupIdentifiers | 字串陣列 | 來自應用程式權利 com.apple.security.application-groups 區段的應用程式群組陣列。 |
如果應用程式使用應用程式群組,則為必要項目。 |
| ContainingAppBundleId | 字串 | 指定擴充功能包含應用程式的套件識別碼。 | iOS 擴充功能必要。 |
| AutoEnrollOnLaunch | 布林值 | 指定如果偵測到現有的受控識別,但尚未這麼做,應用程式是否應該嘗試在啟動時自動註冊。 預設為 NO。 注意: 如果找不到受控識別或 MSAL 快取中沒有有效的權杖可用,註冊會以無訊息方式失敗,除非 MAMPolicyRequired 為 YES。 |
選用。 預設為 NO。 |
| MAMPolicyRequired | 布林值 | 指定如果應用程式沒有 Intune 應用程式保護原則,是否會封鎖應用程式啟動。 預設為 NO。 注意:此設定為「是」時,應用程式無法提交至 App Store。 當它設定為 YES 時, AutoEnrollOnLaunch 也應該是 YES。 |
選用。 預設為 NO。 |
| MAMPolicyWarnAbsent | 布林值 | 指定如果沒有 Intune 應用程式保護原則存在,應用程式是否在啟動期間警告使用者。 注意: 關閉警告後,使用者仍可繼續。 |
選用。 預設為 NO。 |
| MultiIdentity | 布林值 | 指定應用程式是否具備多重身分識別感知能力。 如需詳細資訊,請參閱多 重身分識別文件。 | 選用。 預設為 NO。 |
| MultiIdentityCancelDisabled | 布林值 | 停用多重身分識別應用程式中 Intune 條件啟動 UI 畫面上的取消按鈕。 如果未將此原則設定為 [是],則應用程式必須處理 IntuneMAMSwitchIdentityResultCanceled 失敗的程式碼。 請參閱 切換身分識別。 |
選用。 預設為 NO。 |
| SafariViewControllerBlockedOverride | 布林值 | 停用 Intune 的 SafariViewController 勾點,以透過 SFSafariViewController、SFAuthSession 或 ASWebAuthSession 啟用 MSAL 驗證。 注意: 只有在檢視未受管理且此設定為 [是] 時,才會顯示已設定的活動按鈕。 |
選用。 預設為 NO。 警告: 使用不當可能會導致資料外洩。 |
| SplashIconFile SplashIconFile~ipad |
字串 | 指定啟動) 圖示檔案 (啟動Intune。 | 選用。 |
| SplashDuration | 數字 | 顯示 Intune 啟動畫面的最短時間,以秒為單位。 預設為 1.5。 | 選用。 |
| BackgroundColor | 字串 | 指定 Intune SDK UI 元件的背景色彩。 接受 #XXXXXX 或沒有井字符號的十六進位值。 |
選用。 預設為系統背景色彩。 |
| ForegroundColor | 字串 | 指定 UI 元件的前景/文字色彩。 接受 #XXXXXX 或沒有井字符號的十六進位。 |
選用。 預設為系統標籤色彩。 |
| AccentColor | 字串 | 指定 UI 元件 (按鈕、PIN 方塊醒目提示) 的輔色。 接受 #XXXXXX 或沒有井字符號的十六進位。 |
選用。 預設為系統藍色。 |
| SecondaryBackgroundColor | 字串 | 指定 MTD 畫面的次要背景色彩。 接受 #XXXXXX 或沒有井字符號的十六進位。 |
選用。 預設為白色。 |
| SecondaryForegroundColor | 字串 | 指定 MTD 螢幕的次要前景色。 接受 #XXXXXX 或沒有井字符號的十六進位。 |
選用。 預設為灰色。 |
| SupportsDarkMode | 布林值 | 指定未設定明確色彩時,UI 色彩是否遵循系統深色模式。 | 選用。 預設為 YES。 |
| MAMTelemetryDisabled | 布林值 | 指定是否將遙測傳送至後端。 | 選用。 預設為 NO。 |
| MAMTelemetryUsePPE | 布林值 | 將遙測傳送至 PPE 後端。 對於測試應用程式很有用,讓資料不會與客戶資料混合。 | 選用。 預設為 NO。 |
| MaxFileProtectionLevel | 字串 | 指定應用程式支援的最大值 NSFileProtectionType 。 如果服務傳送較高層級,則覆寫原則。可能的值: NSFileProtectionComplete、 NSFileProtectionCompleteUnlessOpen、 NSFileProtectionCompleteUntilFirstUserAuthentication、 NSFileProtectionNone。通知: 使用 NSFileProtectionComplete,應用程式會在裝置鎖定後 ~10 秒失去受保護檔案的存取權,這可能會破壞本機資料庫等元件。 具有鎖定畫面 UI 的應用程式應該使用 NSFileProtectionCompleteUntilFirstUserAuthentication。 |
選用。 預設為 NSFileProtectionComplete。 |
| OpenInActionExtension | 布林值 | 針對 Open in Action 擴充功能設為 YES。 請參閱 透過 UIActivityViewController 共用資料。 | 選用。 |
| TreatAllWebViewsAsUnmanaged | 布林值 | 將所有 WebView 視為非受控以強制剪下/複製/貼上。 請參閱 顯示網頁內容。 | 選用。 預設為 NO。 |
| WebViewHandledURLSchemes | 字串陣列 | URL 配置由應用程式的 WebView 處理。 | 如果您的 WebView 可以處理連結或 JavaScript 瀏覽,則為必要項目。 |
| DocumentBrowserFileCachePath | 字串 | 如果使用 UIDocumentBrowserViewController,則設定 (相對於解密受管理檔案的應用程式主目錄) 的路徑。 |
選用。 預設為 /Documents/。 |
| VerboseLoggingEnabled | 布林值 | 啟用詳細記錄。 | 選用。 預設為 NO。 |
| FinishLaunchingAtStartup | 布林值 | 使用時為必要項目;必須 [BGTaskScheduler registerForTaskWithIdentifier:]為 YES。 |
選用。 預設為 NO。 |
| ValuesToScrubFromLogging | 字串陣列 | 應從記錄檔中移除的應用程式組態值。 也可以透過開啟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 已被取代。 如需詳細資訊,請參閱更新您的應用程式以使用 MSAL) 和Microsoft圖形 API (Microsoft 驗證程式庫。
已經使用 MSAL 的應用程式應該在使用者成功驗證後,在執行個體上IntuneMAMEnrollmentManager呼叫registerAndEnrollAccountId方法:
/*
* 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 會通知使用者需要重新啟動應用程式。
管理應用程式之後,必須使用enrolledAccountId中的IntuneMAMEnrollmentManager查詢 Microsoft Entra 物件識別碼值。 針對應用程式用於此已註冊帳戶的所有 MAM SDK API,使用此功能。
例如:
[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];
讓 Intune 在啟動時處理驗證和註冊
如果您希望 Intune SDK 在應用程式完成啟動之前使用 ADAL/MSAL 處理所有驗證和註冊,且您的應用程式始終需要應用程式保護原則,則不需要使用 loginAndEnrollAccount API。 您可以在應用程式的 Info.plist 中,將 IntuneMAMSettings 字典中的下列設定設為 YES。
| 設定 | 類型 | 定義 |
|---|---|---|
| AutoEnrollOnLaunch | 布林值 | 指定如果偵測到現有的受控識別,但尚未這麼做,應用程式是否應該嘗試在啟動時自動註冊。 預設為 NO。 注意: 如果找不到受控識別,或 ADAL/MSAL 快取中沒有可用的有效身分識別權杖,註冊嘗試會以無訊息方式失敗,而不會提示輸入認證,除非應用程式也設定 MAMPolicyRequired 為 YES。 |
| MAMPolicyRequired | 布林值 | 指定如果應用程式沒有 Intune 應用程式保護原則,是否會封鎖應用程式啟動。 預設為 NO。 注意:如果 App 設定為「是」,則 MAMPolicyRequired無法提交到 App Store。 設定為 YES 時MAMPolicyRequired,AutoEnrollOnLaunch也應該設定為 YES。 |
如果您為您的應用程式選擇此選項,您就不需要在註冊後處理重新啟動應用程式。
取消註冊使用者帳戶
在使用者登出應用程式之前,應用程式應向 SDK 取消註冊使用者。 此程序可確保:
使用者的帳戶不會再重試註冊。
應用程式防護原則已移除。
如果應用程式起始選擇性抹除 (選擇性) ,則會刪除公司資料。
使用者登出之前,應用程式應該在執行個體上 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 (與要求相關聯之帳戶的物件識別碼)
- 與要求相關聯之帳戶的身分識別 (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
這個方法的傳回值會告訴 SDK,應用程式是否必須處理所需的重新啟動:
如果傳回 true,則應用程式必須處理重新啟動。
如果傳回 false,SDK 會在此方法傳回之後重新啟動應用程式。 SDK 會立即顯示對話方塊,告知使用者重新啟動應用程式。
注意事項
.NET MAUI 應用程式不需要重新啟動。
結束準則
設定組建外掛程式或將命令列工具整合至組建程序之後,請驗證其是否成功執行:
- 請確定您的組建可順利編譯並組建。
- 啟動編譯後的應用程式、使用未以應用程式保護原則為目標的 Microsoft Entra 使用者登入,並確認應用程式如預期般運作。
- 登出,然後使用以應用程式保護原則為目標的 Microsoft Entra 使用者重複此測試,並確認該應用程式現在已由 Intune 管理並重新啟動。
在整合的這個階段,您的應用程式現在可以接收並強制執行應用程式保護原則。 執行下列測試以驗證整合。
第一個原則應用程式測試
請先執行下列測試,以熟悉應用程式中原則應用程式的完整使用者體驗:
- 在 Microsoft Intune 系統管理中心建立 iOS 應用程式防護原則。 針對此測試,請設定原則:
- 在 [存取需求] 底下,保留預設設定。 值得注意的是,「存取的 PIN 碼」應該是「需要」。
- 確定 [應用程式保護原則] 以應用程式為目標。 您可能需要在原則建立精靈中手動新增應用程式的套件組合識別碼。
- 將應用程式保護原則指派給包含您的測試帳戶的使用者群組。
- 安裝您的應用程式。
- 使用您的測試帳戶登入以應用程式保護原則為目標的應用程式。
- 確認您收到 Intune 受管理畫面的提示,並確認提示會重新啟動應用程式。 此畫面表示 SDK 已成功擷取此帳戶的原則。
- 系統提示您設定應用程式 PIN 時,請建立 PIN。
- 將受管帳戶登出應用程式。
- 瀏覽您的應用程式,如果可能的話,請確認您的應用程式是否如預期運作,而無需登入。
此步驟清單是*最基本的測試,用以確認您的應用程式正確註冊帳戶、註冊驗證回呼,以及取消註冊帳戶。 執行下列測試,以更徹底地驗證其他應用程式保護原則設定如何修改應用程式的行為。
後續步驟
完成所有 結束條件後,繼續進行 階段 4:應用程式參與功能。