階段 3:Intune SDK 與 iOS 應用程式整合
注意事項
本指南分成數個不同的階段。 從檢閱 規劃整合開始。
階段目標
- 下載 Intune App SDK。
- 瞭解 Intune App SDK 中包含哪些檔案。
- 在您的應用程式中參考 Intune App SDK。
- 確認 Intune App SDK 已正確包含在您的組建中。
- 向 MSAL 驗證之後,註冊 MAM 管理的新帳戶。
- 若要移除公司數據,請在註銷時取消註冊帳戶
- (建議) 將 MAM 登入您的應用程式中。
先決條件
您需要已安裝 Xcode 14.0 或更新版本的 macOS 計算機。
您的應用程式必須以 iOS 14.0 或更新版本為目標。
檢閱 Intune App SDK for iOS 授權條款。 列印並保留記錄的授權條款複本。 下載並使用 Intune App SDK for iOS,即表示您同意這類授權條款。 如果您不接受它們,請勿使用軟體。
下載 GitHub 上適用於 iOS 的 Intune App SDK 檔案。
SDK 存放庫中的內容
IntuneMAMSwift.xcframework:Intune App SDK 動態架構。 建議您將此架構連結至應用程式/延伸模組,以啟用Intune 用戶端應用程式管理。 不過,有些開發人員可能會偏好靜態架構的效能優勢, (IntuneMAMStatic.xcframework) 。 請參閱下方。
IntuneMAMStatic.xcframework:Intune App SDK 靜態架構。 開發人員可能會選擇連結靜態架構,而不是動態架構。 由於靜態架構的可執行程式碼會在建置階段直接內嵌到應用程式/延伸模組二進位檔中,因此使用靜態庫有一些啟動時間效能優勢。 不過,如果您的應用程式包含任何延伸模組,將靜態架構連結至應用程式和延伸模組會導致較大的應用程式套件組合大小,因為可執行程式碼會內嵌到每個應用程式/延伸模組二進位檔中。 相反地,使用動態架構時,應用程式和延伸模組可以共用相同的 Intune SDK 二進位檔,進而產生較小的應用程式大小。
IntuneMAMSwiftStub.xcframework:Intune App SDK Swift Stub 架構。 此架構是 IntuneMAMSwift.xcframework 和 IntuneMAMStatic.xcframework 的必要相依性,應用程式/擴充功能必須連結。
IntuneMAMConfigurator:此工具可用來設定應用程式或延伸模組的Info.plist,以及 Intune 管理所需的最小必要變更。 根據應用程式或延伸模組的功能,您可能需要對 Info.plist 進行更多手動變更。
libIntuneMAMSwift.xcframework:Intune App SDK 靜態庫。 Intune MAM iOS SDK 的這個變體已被取代,將在未來的更新中移除。 建議您不要連結靜態庫,而是改為將應用程式/擴充功能連結至動態架構 (IntuneMAMSwift.xcframework) 或靜態架構 (先前提及的 IntuneMAMStatic.xcframework) 。
IntuneMAMResources.bundle:包含 SDK 所依賴資源的資源套件組合。 只有將已被取代的靜態庫整合 (libIntuneMAMSwift.xcframework) 的應用程式才需要資源套件組合,而且將在未來的更新中移除。
Intune App SDK 的運作方式
Intune App SDK for iOS 的目標是在最少變更程式碼的情況下,將管理功能新增至 iOS 應用程式。 程式代碼變更的時間越少,上市時間就越少,但不會影響行動應用程式的一致性和穩定性。
進程流程
下圖提供適用於 iOS 的 Intune App SDK 程式流程:
將 SDK 建置到您的行動應用程式
重要事項
Intune 會定期發行 Intune App SDK 的更新。 定期檢查 適用於 iOS 的 Intune App SDK 是否有更新,並併入您的軟體開發發行週期,以確保您的應用程式支援最新的應用程式保護原則設定。
若要啟用 Intune App SDK,請遵循下列步驟:
連結或
IntuneMAMSwift.xcframework
IntuneMAMStatic.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
如果) 尚未啟用金鑰鏈共用 (,請選擇每個項目目標中的 [ 功能 ] 並啟用 [ 金鑰鏈共用 ] 參數。 您必須共用 Keychain,才能繼續進行下一個步驟。
注意事項
您的佈建配置檔必須支援新的金鑰鏈共用值。 金鑰鏈存取群組應該支援通配符。 您可以在文本編輯器中開啟 .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
增至現有的存取群組。如果您要直接編輯權利檔案,而不是使用上面所示的 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-intunemam
、microsoft-edge-https-intunemam
、smart-ns
、zips
、lacoonsecurity
、wandera
lookoutwork-ase
、skycure
、、betteractiveshield
、scmx
smsec
mvisionmobile
、和intunemam-mtd
應該加入至陣列。 如果您的應用程式使用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 應用程式保護原則設定可讓 FaceID 當做 IT 系統管理員設定時的應用程式存取方法使用。
使用 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 組態需求在最新版本中變更。
Xcode 組建設定
應用程式應該將 「Strip Swift Symbols」 (STRIP_SWIFT_SYMBOLS) 和 “Enable Bitcode” (ENABLE_BITCODE) 設定為 NO。
整合檔案提供者擴充功能
檔案提供者擴充功能具有某些記憶體需求,可能會讓整合完整的SDK變得困難。 為了方便起見,有一個靜態 libIntuneMAMSwiftFileProvider.xcframework
庫是 SDK 的已移除版本,專門用於檔案提供者擴充功能。 請注意,這是針對 FileProvider 延伸模組的非 UI 部分。 您必須將完整的 SDK 整合到檔案提供者 UI 擴充功能中。
若要將其中一個連結庫與您的檔案提供者延伸模組整合,請遵循將 SDK 整合為靜態庫的步驟,如上所示。 請務必包含 ContainingAppBundleId
設定。
整合非復寫的檔案提供者擴充功能
如果應用程式實作 NSFileProviderExtension 通訊協定,則會使用非復寫的檔案提供者。 在 iOS 16.0 之前建立的所有檔案提供者都是非復寫的。
在 - startProvidingItemAtURL:completionHandler:檢查您是否應該使用 [[IntuneMAMPolicy 實例]shouldFileProviderEncryptFiles] 來加密檔案。 使用 encryptFile:forAccountId:IntuneMAMFileProtectionManager 中的 API 進行實際檔案加密。 此外,在需要加密時共用檔案複本,因為您不想將檔案的加密複本儲存在雲端記憶體中。
在 - importDocumentAtURL:toParentItemIdentifier:completionHandler:檢查檔案是否使用 isFileEncrytped 加密:IntuneMAMFileProtectionManager 中的 API。 如果是,請使用 decryptFile:toCopyPath:IntuneMAMFileProtectionManager 的 API 來解密。 在多重身分識別應用程式中,也請針對目的地擁有者的 IntuneMAMPolicy 中的 canReceiveSharedFile: API 進行檢查,以查看擁有者是否可以接收檔案。
整合複寫的檔案提供者延伸模組
如果您的應用程式實作在 iOS 16.0) 中新增的 NSFileProviderReplicatedExtension 通訊協定 (,則會使用復寫的檔案提供者。
在 - fetchContentsForItemWithIdentifier:version:request:completionHandler:檢查您是否應該使用 [[IntuneMAMPolicy 實例]shouldFileProviderEncryptFiles] 來加密檔案。 使用 encryptFile:forAccountId:IntuneMAMFileProtectionManager 中的 API 進行實際檔案加密。 此外,在需要加密時共用檔案複本,因為您不想將檔案的加密複本儲存在雲端記憶體中。
在 - createItemBasedOnTemplate:fields:contents:options:request:completionHandler:檢查檔案是否使用 isFileEncrypted:IntuneMAMFileProtectionManager 中的 API 來加密。 如果是,請使用 decryptFile:toCopyPath:IntuneMAMFileProtectionManager 的 API 來解密。 在多重身分識別應用程式中,也請針對目的地擁有者的 IntuneMAMPolicy 中的 canReceiveSharedFile: API 進行檢查,以查看擁有者是否可以接收檔案。
在復寫的檔案提供者建立 NSFileProviderItem 並傳遞至系統的任何位置,呼叫 IntuneMAMFileProtectionManager 的 protectFileProviderItem:forAccountId:具有專案擁有者身分識別的 API。 根據 NSFileProviderItem 物件的建立和保存在延伸模組中的位置而定,您可能需要在每個 NSFileProviderReplicatedExtension 的通訊協定方法中執行此動作。
設定 Intune App SDK 的設定
您可以在應用程式的 Info.plist 檔案中使用 IntuneMAMSettings 字典來設定 Intune App SDK。 如果 Info.plist 檔案中看不到 IntuneMAMSettings 字典,您應該建立它。
在 IntuneMAMSettings 字典下,您可以定義下列支援的設定來設定 Intune App 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 | 布林值 | 指定如果有任何 MSAL 記錄檔) ,SDK 是否會將所有 MSAL 記錄路由 (包括來自應用程式的 MSAL 呼叫。 默認為 NO。 如果應用程式將設定自己的 MSAL 記錄回呼,請設定為 [是]。 | 選用。 |
ADALCacheKeychainGroupOverride | 字串 | 指定要用於 MSAL 快取的 Keychain 群組,而不是 “com.microsoft.adalcache”。 請注意,這沒有 app-id 前置詞。 這會在運行時間前置詞為提供的字串。 | 選用。 |
AppGroupIdentifiers | 字串陣列 | 應用程式權利 com.apple.security.application-groups 區段中的應用程式群組陣列。 | 如果應用程式使用應用程式群組,則為必要專案。 |
ContainingAppBundleId | 字串 | 指定延伸模組包含應用程式的套件組合識別碼。 | iOS 擴充功能的必要專案。 |
AutoEnrollOnLaunch | 布林值 | 指定如果偵測到現有的受控識別且尚未註冊,應用程式是否應該在啟動時嘗試自動註冊。 默認為 NO。 注意:如果找不到受控識別,或 MSAL 快取中沒有可用的身分識別有效令牌,註冊嘗試將會以無訊息方式失敗,而不會提示輸入認證,除非應用程式也已將 MAMPolicyRequired 設定為 YES。 |
選用。 默認為否。 |
MAMPolicyRequired | 布林值 | 指定如果應用程式沒有 Intune 應用程式保護原則,是否會封鎖應用程式啟動。 默認為 NO。 附註:無法將 MAMPolicyRequired 設為 YES 的應用程式提交至 App Store。 將 MAMPolicyRequired 設定為 YES 時,AutoEnrollOnLaunch 也應該設定為 YES。 |
選用。 默認為否。 |
MAMPolicyWarnAbsent | 布林值 | 指定如果應用程式沒有 Intune 應用程式保護原則,應用程式是否會在啟動期間警告使用者。 注意:關閉警告之後,仍然允許使用者在沒有原則的情況下使用應用程式。 |
選用。 默認為否。 |
MultiIdentity | 布林值 | 指定應用程式是否為多重身分識別感知。 | 選用。 默認為否。 |
SafariViewControllerBlockedOverride | 布林值 | 停用 Intune 的 SafariViewController 勾點,以透過 SFSafariViewController、SFAuthSession 或 ASWebAuthSession 啟用 MSAL 驗證。 注意:Intune 的受控 Safari 檢視控制器不支援 SFSafariViewControllerConfiguration 活動按鈕屬性 。 只有在檢視未受管理且 SafariViewControllerBlockedOverride 設定為 [是] 時,設定 的活動按鈕 才會出現在 SafariViewController 中。 |
選用。 默認為否。 警告: 如果使用不當,可能會導致數據外洩。 只有在絕對必要時才啟用 。 如需詳細資訊,請參閱 使用 MSAL 進行應用程式起始驗證時的特殊考慮。 |
SplashIconFile SplashIconFile~ipad |
字串 | 指定 Intune 啟動 (啟動) 圖示檔案。 | 選用。 |
SplashDuration | 數字 | Intune 啟動畫面在應用程式啟動時顯示的最短時間,以秒為單位。 預設為 1.5。 | 選用。 |
BackgroundColor | 字串 | 指定 Intune SDK UI 元件的背景色彩。 以 #XXXXXX 的形式接受十六進位 RGB 字串,其中 X 的範圍可以是 0-9 或 A-F。 可能會省略井字型大小。 | 選用。 默認為系統背景色彩,可能會因 iOS 版本和 iOS 深色模式設定而有所不同。 |
ForegroundColor | 字串 | 指定 Intune SDK UI 元件的前景色彩,例如文字色彩。 以 #XXXXXX 的形式接受十六進位 RGB 字串,其中 X 的範圍可以是 0-9 或 A-F。 可能會省略井字型大小。 | 選用。 默認為系統標籤色彩,可能會因 iOS 版本和 iOS 深色模式設定而有所不同。 |
AccentColor | 字串 | 指定 Intune SDK UI 元件的輔色,例如按鈕文字色彩和 PIN 方塊醒目提示色彩。 以 #XXXXXX 的形式接受十六進位 RGB 字串,其中 X 的範圍可以是 0-9 或 A-F。 可能會省略井字型大小。 | 選用。 默認為系統藍色。 |
SecondaryBackgroundColor | 字串 | 指定 MTD 畫面的次要背景色彩。 以 #XXXXXX 的形式接受十六進位 RGB 字串,其中 X 的範圍可以是 0-9 或 A-F。 可能會省略井字型大小。 | 選用。 默認為白色。 |
SecondaryForegroundColor | 字串 | 指定 MTD 畫面的次要前景色彩,例如腳注色彩。 以 #XXXXXX 的形式接受十六進位 RGB 字串,其中 X 的範圍可以是 0-9 或 A-F。 可能會省略井字型大小。 | 選用。 默認為灰色。 |
SupportsDarkMode | 布林值 | 指定如果未針對 BackgroundColor/ForegroundColor/AccentColor 設定明確的值,Intune SDK 的 UI 色彩配置是否應該觀察系統深色模式設定 | 選用。 默認為 [是]。 |
MAMTelemetryDisabled | 布林值 | 指定 SDK 是否會將任何遙測數據傳送至其後端。 | 選用。 默認為否。 |
MAMTelemetryUsePPE | 布林值 | 指定 MAM SDK 是否會將數據傳送至 PPE 遙測後端。 使用 Intune 原則測試您的應用程式時,請使用此方法,讓測試遙測數據不會與客戶數據混淆。 | 選用。 默認為否。 |
MaxFileProtectionLevel | 字串 | 允許應用程式指定可支援的最大 NSFileProtectionType 值。 如果層級高於應用程式可支援的層級,這個值將會覆寫服務所傳送的原則。 可能的值:NSFileProtectionComplete 、NSFileProtectionCompleteUnlessOpen 、、NSFileProtectionCompleteUntilFirstUserAuthentication 。NSFileProtectionNone 注意:使用最高的檔案保護層級 (NSFileProtectionComplete ) ,受保護的檔案只能在裝置解除鎖定時存取。 裝置鎖定 10 秒後,應用程式將失去受保護檔案的存取權。 在某些情況下,這可能會導致無法存取內部元件 (例如 MySQL 資料庫) ,進而導致非預期的行為。 建議呈現鎖定畫面 UI 元素的應用程式會設定為 NSFileProtectionCompleteUntilFirstUserAuthentication 。 |
選用。 預設為 NSFileProtectionComplete 。 |
OpenInActionExtension | 布林值 | 針對 [在動作中開啟] 延伸模組,設定為 [是]。 如需詳細資訊,請參閱 透過UIActivityViewController共用數據 一節。 | |
WebViewHandledURLSchemes | 字串陣列 | 指定您應用程式的 WebView 處理的 URL 配置。 | 如果您的應用程式使用可透過連結和/或 JavaScript 處理 URL 的 WebView,則為必要專案。 |
DocumentBrowserFileCachePath | 字串 | 如果您的 UIDocumentBrowserViewController 應用程式使用 來瀏覽各種檔案提供者中的檔案,您可以設定此路徑相對於應用程式沙箱中的主目錄,讓 Intune SDK 可以將解密的受控檔案放入該資料夾。 |
選用。 預設為 /Documents/ 目錄。 |
VerboseLoggingEnabled | 布林值 | 如果設定為 [是],Intune 會以詳細資訊模式登入。 | 選用。 默認為 NO |
FinishLaunchingAtStartup | 布林值 | 如果應用程式正在使用 [BGTaskScheduler registerForTaskWithIdentifier:] ,則此設定應該設定為 YES。 |
選用。 默認為 NO |
ValuesToScrubFromLogging | 字串陣列 | 指定應從記錄中清除的應用程式組態值。 或者,IntuneMAMSettings 類別上的 valuesToScrubFromLogging 屬性可以針對相同的行為指定字串數位。 | 選用。 |
接收應用程式保護原則
概觀
若要接收 Intune 應用程式保護原則,應用程式必須向 Intune MAM 服務起始註冊要求。 您可以在 Intune 系統管理中心中設定應用程式,以接收具有或不註冊裝置的應用程式保護原則。 行動應用程式管理 (MAM) ,可讓應用程式由 Intune 管理,而不需要在 Intune 行動裝置管理 (MDM) 中註冊裝置。 在這兩種情況下,必須向Intune MAM服務註冊才能接收原則。
重要事項
當應用程式保護原則啟用加密時,適用於iOS的 Intune App SDK 會使用 256 位加密金鑰。 所有應用程式都必須有目前的SDK版本,才能允許受保護的數據共用。
已使用ADAL或 MSAL 的應用程式
注意事項
Azure AD 驗證連結庫 (ADAL) 和 Azure AD Graph API 將會被取代。 如需詳細資訊,請 參閱更新您的應用程式以使用 Microsoft 驗證連結庫 (MSAL) 和 Microsoft Graph API。
已使用 MSAL 的應用程式應該在成功驗證使用者之後,IntuneMAMEnrollmentManager
於實例上呼叫 registerAndEnrollAccountId
方法:
/*
* This method will add the account to the list of registered accounts.
* An enrollment request will immediately be started.
* @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 登入使用者的應用程式仍然可以從 Intune MAM 服務接收應用程式保護原則,方法是呼叫 API 讓 SDK 處理該驗證。 當應用程式尚未使用 Microsoft Entra ID 驗證使用者,但仍需要擷取應用程式保護原則來協助保護數據時,應該使用這項技術。 例如,如果另一個驗證服務用於應用程式登入,或應用程式完全不支援登入。 若要這樣做,應用程式可以在 實例上IntuneMAMEnrollmentManager
呼叫 loginAndEnrollAccount
方法:
/**
* Creates an enrollment request which is started immediately.
* If no token can be retrieved for the identity, the user will be prompted
* to enter their credentials, after which enrollment will be retried.
* @param identity The UPN of the account to be logged in and enrolled.
*/
(void)loginAndEnrollAccount: (NSString *)identity;
藉由呼叫這個方法,如果找不到現有的令牌,SDK 會提示使用者輸入認證。 然後,SDK 會嘗試代表提供的用戶帳戶向 Intune MAM 服務註冊應用程式。 方法可以使用 「nil」 做為身分識別來呼叫。 在此情況下,SDK 會在 MDM) 的情況下,向裝置 (上現有的受控用戶註冊,如果找不到現有的使用者,則提示使用者輸入用戶名稱。
如果註冊失敗,應用程式應該考慮在未來再次呼叫此 API,視失敗的詳細數據而定。 應用程式可以透過委派接收有關任何註冊要求結果 的通知。
叫用此 API 之後,應用程式可以繼續正常運作。 如果註冊成功,SDK 會通知使用者需要重新啟動應用程式。
管理應用程式之後,必須在 中使用 enrolledAccountId
IntuneMAMEnrollmentManager
查詢 Entra 物件識別碼值。 針對應用程式用於此已註冊帳戶的所有 MAM SDK API,請使用此 API。
例如:
[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];
讓 Intune 在啟動時處理驗證和註冊
如果您希望 Intune SDK 在應用程式啟動完成之前,先使用 ADAL/MSAL 和註冊來處理所有驗證,而且您的應用程式一律需要 APP 原則,則不需要使用 loginAndEnrollAccount
API。 在應用程式 Info.plist 的 IntuneMAMSettings 字典中,您可以直接將下列兩個設定設定為 [是]。
設定 | 類型 | 定義 |
---|---|---|
AutoEnrollOnLaunch | 布林值 | 指定如果偵測到現有的受控識別且尚未註冊,應用程式是否應該在啟動時嘗試自動註冊。 默認為 NO。 注意:如果找不到受控識別,或 ADAL/MSAL 快取中沒有可用的身分識別有效令牌,註冊嘗試將會以無訊息方式失敗,而不會提示輸入認證,除非應用程式也已將 MAMPolicyRequired 設定為 YES。 |
MAMPolicyRequired | 布林值 | 指定如果應用程式沒有 Intune 應用程式保護原則,是否會封鎖應用程式啟動。 默認為 NO。 注意:無法將 MAMPolicyRequired 設為 YES 的應用程式提交至 App Store。 將 MAMPolicyRequired 設定為 YES 時,AutoEnrollOnLaunch 也應該設定為 YES。 |
如果您為應用程式選擇此選項,則不需要在註冊之後處理重新啟動應用程式。
取消註冊用戶帳戶
在使用者註銷應用程式之前,應用程式應該先從 SDK 取消註冊使用者。 這可確保:
用戶的帳戶不會再進行註冊重試。
將會移除應用程式保護原則。
如果應用程式起始選擇性抹除 (選擇性) ,則會刪除任何公司數據。
在使用者登出之前,應用程式應該在 實例上 IntuneMAMEnrollmentManager
呼叫下列方法:
/*
* This method will remove the provided account from the list of
* registered accounts. Once removed, if the account has enrolled
* the application, the account will be un-enrolled.
* @note In the case where an un-enroll is required, this method will block
* until the Intune APP AAD token is acquired, then return. 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 會立即顯示對話方塊,告知使用者重新啟動應用程式。
結束準則
設定組建外掛程式或將命令行工具整合到建置程式之後,請驗證它是否已成功執行:
- 請確定您的組建已成功編譯和建置。
- 啟動已編譯的應用程式,以未以應用程式保護原則為目標的Microsoft Entra 使用者登入,並確認應用程式如預期般運作。
- 以應用程式 保護原則為目標的 Microsoft Entra 使用者 註銷並重複此測試,並確認應用程式現在由 Intune 管理並重新啟動。
此時在整合中,您的應用程式現在可以接收並強制執行應用程式保護原則。 執行下列測試以驗證整合。
第一個原則應用程式測試
請先執行下列測試,以熟悉應用程式內原則應用程式的完整用戶體驗:
- 在 Microsoft Intune 系統管理中心建立 iOS 應用程式保護原則。 針對此測試,請設定原則:
- 在 [存取需求] 下,保留默認設定。 值得注意的是,“PIN for Access” 應該是 “Require”。
- 請確定應用程式保護原則是以您的應用程式為目標。 您可能需要在原則建立精靈中手動新增應用程式的套件組合標識碼。
- 將應用程式保護原則指派給包含測試帳戶的使用者群組。
- 安裝您的應用程式。
- 使用以應用程式保護原則為目標的測試帳戶登入您的應用程式。
- 確認系統提示您使用 Intune 受控畫面,並確認提示重新啟動應用程式。 此畫面指出 SDK 已成功擷取此帳戶的原則。
- 當系統提示您設定應用程式 PIN 時,請建立 PIN。
- 將 Managed 帳戶記錄出您的應用程式。
- 瀏覽您的應用程式,並確認您的應用程式盡可能正常運作,而不需要登入。
此步驟清單是 *最低限度- 測試,可確認您的應用程式正確註冊帳戶、註冊驗證回呼,以及取消註冊帳戶。 執行下列測試,以更徹底地驗證其他應用程式保護原則設定如何修改應用程式的行為。
後續步驟
完成所有 結束準則之後,請繼續進行 第 4 階段:應用程式參與功能。