分享方式:


Intune App SDK for Android - 應用程式參與功能

Microsoft Intune App SDK for Android 可讓您將 Intune 應用程式保護原則 (也稱為應用程式或 MAM 原則) 併入原生 Java/Kotlin Android 應用程式。 Intune 受控應用程式是與 Intune App SDK 整合的應用程式。 當 Intune 主動管理應用程式時,Intune 系統管理員可以輕鬆地將應用程式保護原則部署到受 Intune 管理的應用程式。

注意事項

本指南分成數個不同的階段。 從檢閱 規劃整合開始。

階段 7:應用程式參與功能

階段 Goals

  • 瞭解 Intune App SDK 所提供的各種應用程式參與功能。
  • 整合與您的應用程式和使用者相關的應用程式參與功能。
  • 測試這些功能的整合。

什麼是「應用程式參與功能」?

此 SDK 整合程式會嘗試將開發人員需要撰寫的應用程式特定程式代碼數量降至最低。 順利完成 SDK 整合的先前階段,您的應用程式現在可以強制執行大部分的應用程式保護原則設定,例如檔案加密、複製/貼上限制、螢幕快照封鎖和數據傳輸限制。

不過,有些設定需要應用程式特定的程式代碼才能正確強制執行;這些稱為應用程式參與功能。 一般而言,SDK 對於應用程式的程式代碼或使用者案例沒有足夠的內容可自動強制執行這些設定,因此依賴開發人員適當地呼叫 SDK API。

應用程式參與功能不一定是選擇性的。 視您應用程式的現有功能而定,可能需要這些功能。 如需詳細資訊,請參閱 SDK 整合的重要決策

本指南的先前階段已說明數個應用程式參與功能:

本指南的其餘部分將說明一組其餘的應用程式參與功能:

  • 強制執行原則,限制將檔案儲存至本機或雲端記憶體的檔案或從中開啟檔案。
  • 強制執行原則來限制通知中的內容。
  • 強制執行保護備份數據的原則。
  • 如果您的應用程式具有自定義螢幕擷取程式代碼) ,請強制執行限制螢幕擷取 (的原則。
  • 支援應用程式保護 CA。
  • 從 SDK 註冊通知。
  • 套用自定義應用程式主題。
  • 使用來自 Intune 的信任憑證,以確保內部部署端點的信任鏈結。

應用程式參與功能基本概念

AppPolicy 介面包含許多方法,可通知您的應用程式是否允許特定動作。

大部分的應用程式參與功能都涉及:

  • 識別應用程式程式代碼中的正確位置,以檢查是否允許動作。
  • AppPolicy根據目前設定的原則,呼叫 方法以檢查是否允許動作。
  • 視結果而定,允許動作完成,或在封鎖動作時修改應用程序行為。

若要擷取實 AppPolicy 例,請使用其中一個 MAMPolicyManager 方法,例如 getPolicygetPolicyForIdentity(final String identity)

AppPolicy 中的資訊方法

並非中 AppPolicy 的每種方法都會系結至應用程式參與功能。 有些方法是資訊型的,即使 SDK 會自動強制執行這些原則,也會提供目前設定原則的應用程式數據。 這些方法的存在可讓您的應用程式有機會在設定特定原則時呈現自定義用戶體驗。

範例:判斷是否封鎖螢幕快照

如果您的應用程式有可讓使用者擷取螢幕快照的控件,如果您的應用程式保護原則已封鎖螢幕快照,您可能會想要停用或隱藏該控件。

您的應用程式可以藉由呼叫 MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()來檢查此問題。

限制應用程式與裝置或雲端儲存位置之間數據傳輸的原則

許多應用程式可讓終端使用者將資料儲存至本機檔案記憶體或雲端記憶體服務,或從中開啟數據。 Intune App SDK 可讓 IT 系統管理員限制應用程式儲存資料並開啟資料的位置,以防止數據輸入和數據外洩。

注意事項

如果您的應用程式允許直接從應用程式儲存至個人或雲端位置, 允許將數據直接開啟至應用程式,您必須實作此 Intune App SDK 應用程式參與功能 ,讓 IT 系統管理員封鎖此儲存/開啟。

儲存至裝置或雲端記憶體

API getIsSaveToLocationAllowed 可讓您的應用程式根據設定的原則,得知是否允許針對指定的身分識別儲存至特定位置:

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(
SaveLocation service, String username);

若要判斷您的應用程式是否應該實 getIsSaveToLocationAllowed 作檢查,請檢閱下表來判斷您的應用程式是否支援資料輸出:

service 參數: SaveLocation 列舉值 使用案例 相關聯的用戶名稱
ONEDRIVE_FOR_BUSINESS 應用程式正在將資料儲存至 OneDrive。 username用於雲端服務驗證與 Microsoft Entra認證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
SHAREPOINT 應用程式正在將數據儲存至 Sharepoint。 username用於雲端服務驗證與 Microsoft Entra認證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
BOX 此應用程式正在將資料儲存至 Box。 username用於雲端服務驗證與 Microsoft Entra認證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
LOCAL 應用程式正在將資料儲存至裝置上的外部儲存位置, 而該位置不是 應用程式的私人記憶體。 外部記憶體不被視為雲端服務,因此應一 null 律搭配使用者名稱參數使用。
PHOTO_LIBRARY 應用程式正在將資料儲存至 Android 本機相片記憶體。 Android 本機相片記憶體不被視為雲端服務,因此應一 null 律搭配使用者名稱參數使用。
ACCOUNT_DOCUMENT 應用程式正在將資料儲存至與應用程式內帳戶相關聯的位置,而非上述指定的其中一個特定雲端位置。 *此位置應該用來判斷數據是否可以在多重身分識別應用程式內的帳戶之間傳遞。- username用於 Microsoft Entra 驗證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
OTHER 應用程式正在將數據儲存至上述未指定的位置,且不符合的 ACCOUNT_DOCUMENT準則。 username不會針對這個位置評估 ,因此應該是 null

一律允許放置在應用程式作業所需或暫時下載以供顯示的私人應用程式記憶體中的檔案;您不需要檢查 getIsSaveToLocationAllowedSaveLocation.LOCAL檢查

  1. 儲存在私人應用程式記憶體外部的檔案。
  2. 下載到私人應用程式記憶體的檔案不需要應用程式作業 (例如,使用者刻意選擇下載到裝置) 。

注意事項

檢查儲存原則時, username 應該是與要儲存的雲端服務相關聯的 UPN/使用者名稱/電子郵件 ( 一定與擁有要儲存) 之文件的帳戶相同。

從本機或雲端儲存位置開啟數據

API getIsOpenFromLocationAllowed 可讓您的應用程式根據設定的原則,得知是否允許針對指定的身分識別從特定位置開啟:

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowed(
OpenLocation location, String username);

若要判斷您的應用程式是否應該實 getIsOpenFromLocationAllowed 作檢查,請檢閱下表來判斷您的應用程式是否支援資料輸入:

location 參數: OpenLocation 列舉值 使用案例 相關聯的用戶名稱
ONEDRIVE_FOR_BUSINESS 應用程式正在從 OneDrive 開啟數據。 username用於雲端服務驗證與 Microsoft Entra認證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
SHAREPOINT 應用程式正在從 Sharepoint 開啟數據。 username用於雲端服務驗證與 Microsoft Entra認證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
CAMERA 應用程式正在從相機開啟數據。 null ,因為裝置相機不是雲端服務。
LOCAL 應用程式正在從裝置上 不是 應用程式私人記憶體的外部儲存位置開啟數據。 雖然外部記憶體不是雲端服務位置,但參數是預期的, username 因為它表示擁有權。
從本機記憶體開啟檔案時,必須一律考慮檔案擁有者,因為檔案擁有者的另存新檔原則可能會或可能不會允許其他身分識別開啟檔案:
- 針對已標記身分識別的檔案,username 應該是檔案擁有者的身分識別。
- 對於沒有身分識別標籤的檔案,username 應該是 null
PHOTO_LIBRARY 應用程式正在從 Android 相片本機記憶體開啟數據。 Android 本機相片記憶體不被視為雲端服務,因此應一 null 律搭配使用者名稱參數使用。
ACCOUNT_DOCUMENT 應用程式從與應用程式內帳戶相關聯的位置開啟數據,而非上述指定的其中一個特定雲端位置。 *此位置應該用來判斷數據是否可以在多重身分識別應用程式內的帳戶之間傳遞。- username用於 Microsoft Entra 驗證之帳戶的 。 如果這類使用者名稱不存在或使用者名稱未知,請使用 null
OTHER 應用程式從上述未指定的位置開啟數據,且不符合的 ACCOUNT_DOCUMENT準則。 username不會針對這個位置評估 ,因此應該是 null

注意事項

檢查開啟的原則時, username 應該是與 開啟的檔案或雲端服務相關聯的 UPN/使用者名稱/電子郵件 ( 一定與開啟檔) 的帳戶相同。

提示

為了方便起見,SDK 會提供 方法 AppPolicy.isOpenFromLocalStorageAllowed 來取得 File 本機記憶體中檔案的 參數。 其強制執行原則的條款在功能上與呼叫 AppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username) 相同,不同之處在於它會處理從 File剖析檔案擁有者的 username

共用封鎖的對話框

SDK 會提供對話框,通知使用者 MAM 原則已封鎖數據傳輸動作。

每當 或 isOpenFromAllowedForLocation API 呼叫導致儲存/開啟動作遭到封鎖時,isSaveToAllowedForLocation應該會向使用者顯示對話方塊。 對話框會顯示泛型訊息,並在關閉時返回呼叫 Activity

若要顯示對話框,請新增下列程式代碼:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

允許檔案共用

如果不允許儲存至公用儲存位置,您的應用程式仍應允許用戶檢視檔案,方法是將檔案下載到 應用程式私人記憶體 ,然後使用系統選擇器開啟檔案。

限制通知內內容的原則

針對單一身分識別應用程式,當應用程式保護原則限制通知時,Intune App SDK 的預設行為會嘗試封鎖 所有 通知。

SDK 的預設行為有限。 SDK 無法自動接受「封鎖組織數據」值,其目的在於只從通知中移除受控內容。 針對多重身分識別應用程式,SDK 無法判斷哪些通知包含受控內容。

如果您的應用程式顯示通知,而且它是多重身分識別和/或想要接受「封鎖組織數據」值,則必須先檢查與通知相關聯之帳戶的通知限制原則,才能顯示通知。

若要判斷是否強制執行原則,請進行下列呼叫:

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

傳回 NotificationRestriction 的列舉具有下列值:

NotificationRestriction 枚舉 預期的應用程式行為
BLOCKED 應用程式 不得 針對與此原則相關聯的帳戶顯示任何通知。 針對 單一身分識別 應用程式,Intune App SDK 會自動封鎖所有通知,而且不需要額外的程序代碼。
BLOCK_ORG_DATA 應用程式必須顯示未包含組織數據的已修改通知。
UNRESTRICTED 應用程式應該會顯示所有通知。

如果您的應用程式未正確叫用 getNotificationRestriction,MAM SDK 會盡最大努力只限制 單一身分識別應用程式的自動通知。

在此情況下, BLOCK_ORG_DATA 會被視為與 BLOCKED 相同,而且完全不會顯示通知。

如需更精細的控制,請檢查的 getNotificationRestriction 值,並適當地修改應用程式通知。

保護備份數據的原則

Intune App SDK 可以封鎖數據上傳至 Android 的內建備份和還原功能。 若要深入瞭解 Android 中的備份和還原,請參閱 Android API 指南 和 Android S/ 12 中引進的變更: 變更備份和還原

應用程式的自動備份

從 Android M 開始,不論應用程式的目標 API 為何,Android 都會開始為應用程式提供 Google Drive 的 自動完整備份

Intune 可讓您利用 Android 提供的所有自動回覆功能,包括在 XML 中定義自定義規則的能力,以及特定的 Intune 整合指引,以確保套用數據保護。

在應用程式指令清單中設定備份行為

根據預設, android:allowBackup 會設定為 true ,如 啟用和停用備份中所述。

如果您的應用程式不需要完整備份和還原功能,請將 設定為 android:allowBackupfalse在此情況下,不需要採取任何進一步的動作,而且「公司」數據將保留在應用程式內。

如果您的應用程式需要完整備份和還原功能,請將 設定為 android:allowBackuptrue ,然後執行下列其他步驟:

  1. 如果您的應用程式 使用自己的自定義 BackupAgent,請使用預設 MAMBackupAgent 來允許符合 Intune 原則的自動完整備份。 將下列內容放在應用程式指令清單中:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [選擇性] 如果您實作選擇性的自定義 BackupAgent,則必須務必使用 MAMBackupAgentMAMBackupAgentHelper。 請參閱下列各節。 請考慮切換為使用 Intune 的 MAMDefaultBackupAgent,如步驟 1 所述,可在 Android M 和更新版本上提供簡單的備份。

  3. 當您決定應用程式應該接收哪些類型的完整備份 (未篩選、篩選或無) 時,您必須在應用程式中將 屬性 android:fullBackupContent 設定為 true、false 或 XML 資源。

  4. 然後,您 必須 將的 android:fullBackupContent 值複製到 com.microsoft.intune.mam.FullBackupContent 元數據標籤中,以及針對支援 API 31 中新增之 XML 組態格式的應用程式,複製到 com.microsoft.intune.mam.DataExtractionRules 元數據標籤中。

    • 範例 1:如果您想要讓應用程式擁有完整備份而不含排除專案,您必須將屬性和元數據標籤設定為 true

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • 範例 2:如果您想要讓應用程式使用其自定義 BackupAgent 並退出完整、符合 Intune 原則規範的自動備份,您必須將屬性和元數據標籤設定為 false

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • 範例 3:如果您想要讓應用程式根據在 XML 檔案中定義的自訂規則進行完整備份,請將 屬性和元數據標籤設定為相同的 XML 資源:

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

索引鍵/值備份

[ 金鑰/值備份] 選項可供所有 API 8+ 使用,並將應用程式資料上傳至 Android 備份服務。 每個應用程式的數據量限制為 5 MB。 如果您使用密鑰/值備份,則必須使用 BackupAgentHelperBackupAgent

BackupAgentHelper

就原生 Android 功能和 Intune MAM 整合而言,BackupAgentHelperBackupAgent 更容易實作 BackupAgentHelper,可讓開發人員分別) 將整個檔案和共用喜好設定註冊至 FileBackupHelperSharedPreferencesBackupHelper (,然後在建立時新增至 BackupAgentHelper。 請遵循下列步驟,搭配 Intune MAM 使用 BackupAgentHelper:

  1. 若要搭配 使用多重身分 BackupAgentHelper識別備份,請遵循Android指南來 擴充BackupAgentHelper

  2. 讓類別擴充 BackupAgentHelper、FileBackupHelper 和 SharedPreferencesBackupHelper 的 MAM 對等專案。

Android 類別 MAM 對等專案
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

遵循這些指導方針會導致多重身分識別備份和還原成功。

BackupAgent

BackupAgent 可讓您更明確地了解備份的數據。 由於開發人員相當負責實作,因此需要執行更多步驟,以確保Intune提供適當的數據保護。 由於大部分的工作都推送至開發人員,因此 Intune 整合會稍微多一些。

整合 MAM:

  1. 請仔細閱讀 密鑰/值備份 的 Android 指南,並特別 擴充 BackupAgent ,以確保您的 BackupAgent 實作遵循 Android 指導方針。

  2. 讓您的類別擴充 MAMBackupAgent

多重身分識別備份:

  1. 開始備份之前,請檢查 IT 系統管理員確實允許 您打算備份的檔案或數據緩衝區,以便在多重身分識別案例中進行備份。 在 MAMFileProtectionManagerMAMDataProtectionManager 中使用 isBackupAllowed 來判斷這一點。 如果不允許備份檔案或數據緩衝區,則不應將其包含在備份中。

  2. 在備份期間的某個時間點,如果您想要針對您在步驟 1 中檢查的檔案備份身分識別,則必須使用您打算從中擷取資料的檔案來呼叫 backupMAMFileIdentity(BackupDataOutput data, File … files) 。 這會自動建立新的備份實體,併為您將它們寫入 。BackupDataOutput 這些實體會在還原時自動取用。

多重身分識別還原: 數據備份指南會指定還原應用程式數據的一般演算法,並提供 擴充BackupAgent 一節中的程式碼範例。 若要成功還原多重身分識別,您必須遵循此程式代碼範例中提供的一般結構,並特別注意下列事項:

  1. 您必須利用 while(data.readNextHeader())* 循環來進行備份實體。

  2. 如果 data.getKey() 不符合您在 中onBackup撰寫的金鑰,則必須呼叫 data.skipEntityData() 。 若未執行此步驟,您的還原可能無法成功。

  3. 請避免在使用 * 建構中的 while(data.readNextHeader())備份實體時傳回 ,因為我們自動寫入的實體將會遺失。

  • 其中 data 是還原時傳遞至應用程式之 MAMBackupDataInput 的局部變數名稱。

自定義螢幕擷取限制

如果您的應用程式包含略過 Android 層級FLAG_SECURE限制的Window自訂螢幕擷取功能,您必須先檢查螢幕擷取原則,才能允許完整存取功能。 例如,如果您的應用程式使用自定義轉譯引擎將目前的檢視轉譯為 PNG 檔案,您必須先檢查 AppPolicy.getIsScreenCaptureAllowed()

注意事項

如果您的應用程式不包含任何自定義或第三方螢幕擷取功能,您就不需要採取任何動作來限制螢幕擷取。 螢幕擷取原則會在所有 MAM 整合式應用程式的 Window 層級自動強制執行。 OS 或其他應用程式在應用程式中擷取 Window 的任何嘗試都會視需要遭到封鎖。 例如,如果使用者嘗試透過Android的內建螢幕快照或螢幕錄製功能擷取您的應用程式畫面,擷取將會自動受到限制,而不會參與您的應用程式。

支援應用程式保護 CA

應用程式保護 CA (條件式存取) ,也稱為應用程式型 CA,會限制對資源的存取,直到您的應用程式由 Intune 應用程式保護原則管理為止。 Microsoft Entra標識碼會強制執行此動作,方法是要求應用程式在授與令牌以存取 CA 保護的資源之前,先由 APP 註冊和管理。

注意事項

支援應用程式保護 CA 需要 1.0.0 版 (或更新版本的 MSAL 連結庫) 。

處理與 MSAL 不相容的情況

取得帳戶的令牌時,MSAL 連結庫可能會傳回或擲 MsalIntuneAppProtectionPolicyRequiredException 回 ,以指出不符合應用程式保護原則管理。 您可以從例外狀況擷取其他參數,以用於補救合規性 (請參閱 MAMComplianceManager) 。 一旦補救成功,應用程式就可以透過 MSAL 重新嘗試取得令牌。

MAMComplianceManager

從 MSAL 收到需要原則的錯誤時,會使用 MAMComplianceManager 介面。 它包含應該呼叫的 [remediateCompliance] 方法,以嘗試讓應用程式進入符合規範的狀態。 您可以取得 的參考, MAMComplianceManager 如下所示:

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

傳回的實 MAMComplianceManager 例保證不會是 null

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

呼叫 remediateCompliance() 方法以嘗試將應用程式置於管理之下,以滿足 Microsoft Entra 標識元授與要求令牌的條件。 前四個參數可以從 MSAL AuthenticationCallback.onError() 方法所收到的例外狀況中擷取, (請參閱下列) 程式代碼範例。 最後一個參數是布爾值,可控制是否在合規性嘗試期間顯示UX。

remediateCompliance 會顯示簡單的封鎖進度對話框,因此應用程式不需要在此作業期間顯示自定義的UX。 只有在合規性補救正在進行中時,才會顯示此對話方塊;它不會顯示最終結果。 您的應用程式可以註冊通知的 COMPLIANCE_STATUS 接收者,以處理合規性補救嘗試的成功或失敗。 如需詳細資訊,請參閱 合規性狀態通知

remediateCompliance() 可在建立合規性時起始 MAM 註冊。 如果應用程式已註冊註冊通知的通知接收者,則可能會收到註冊通知。 應用程式的註冊 MAMServiceAuthenticationCallback 將會呼叫其 acquireToken() 方法,以取得註冊的令牌。 acquireToken() 將會在應用程式取得自己的令牌之前呼叫,因此應用程式在成功取得令牌之後執行的任何簿記或帳戶建立工作可能尚未完成。 在此情況下,回呼必須能夠取得令牌。

如果您無法從 acquireToken()傳回令牌,合規性補救嘗試將會失敗。

如果您稍後使用所要求資源的有效令牌呼叫 updateToken ,則會立即使用指定的令牌來重試合規性補救。

注意事項

在 中 acquireToken() 仍可取得無訊息令牌,因為在收到例外狀況之前 MsalIntuneAppProtectionPolicyRequiredException ,已引導使用者安裝訊息代理程式並註冊裝置。 這會導致訊息代理程式在其快取中擁有有效的重新整理令牌,讓所要求令牌的無訊息取得成功。

以下是在方法中 AuthenticationCallback.onError() 接收必要原則錯誤,以及呼叫 MAMComplianceManager 來處理錯誤的範例。

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

合規性狀態通知

如果應用程式註冊 類型的 COMPLIANCE_STATUS通知, MAMComplianceNotification 將會傳送 ,以通知應用程式合規性補救嘗試的最終狀態。 如需註冊的詳細資訊,請參閱 註冊以取得 SDK 的通知。

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

方法會 getComplianceStatus() 從 [MAMCAComplianceStatus] 列舉中以值傳回合規性補救嘗試的結果。

狀態碼 說明
UNKNOWN 狀態不明。 這可能表示非預期的失敗原因。 您可以在 公司入口網站 記錄中找到其他資訊。
COMPLIANT 合規性補救成功,且應用程式現在符合原則規範。 應該重試 MSAL 令牌擷取。
NOT_COMPLIANT 嘗試補救合規性失敗。 應用程式不符合規範,在修正錯誤狀況之前,不應重試 MSAL 令牌取得。 其他錯誤資訊會隨 MAMComplianceNotification 一起傳送。
SERVICE_FAILURE 嘗試從 Intune 服務擷取合規性數據時發生失敗。 您可以在 公司入口網站 記錄中找到其他資訊。
NETWORK_FAILURE 聯機到 Intune 服務時發生錯誤。 當網路連線還原時,應用程式應該再試一次其令牌取得。
CLIENT_ERROR 嘗試補救合規性失敗,原因與客戶端有關。 例如,沒有令牌或錯誤的使用者。 其他錯誤資訊會隨 MAMComplianceNotification 一起傳送。
PENDING 嘗試補救合規性失敗,因為超過時間限制時,服務尚未收到狀態回應。 應用程式稍後應該再試一次其令牌擷取。
COMPANY_PORTAL_REQUIRED 公司入口網站 必須安裝在裝置上,合規性補救才能成功。 如果裝置上已安裝 公司入口網站,則必須重新啟動應用程式。 在此情況下,將會顯示對話方塊,要求使用者重新啟動應用程式。

如果合規性狀態為 MAMCAComplianceStatus.COMPLIANT,應用程式應該針對自己的資源) 重新初始化其原始令牌擷取 (。

如果合規性補救嘗試失敗, getComplianceErrorTitle()getComplianceErrorMessage() 方法會傳回本地化的字串,應用程式可在選擇時顯示給使用者。 應用程式無法補救大部分的錯誤案例,因此在一般情況下,最好是讓帳戶建立或登入失敗,並允許使用者稍後再試一次。

如果失敗持續發生,公司入口網站 記錄可能有助於判斷原因。 終端使用者可以提交記錄。 如需詳細資訊,請 參閱上傳和電子郵件記錄

以下是使用匿名類別註冊接收者以實作 MAMNotificationReceiver 介面的範例:

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
            
            // take appropriate action based on complianceNotification.getComplianceStatus()
            
            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

注意事項

在呼叫 remediateCompliance() 之前,必須先註冊通知接收者,以避免可能會導致遺漏通知的競爭狀況。

宣告對應用程式保護 CA 的支援

一旦您的應用程式準備好處理應用程式 CA 補救,您可以告訴 Microsoft 身分識別您的應用程式已準備好應用程式 CA。 若要在 MSAL 應用程式中執行此動作,請使用 「protapp」 的用戶端功能建置公用用戶端

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

完成上述作業之後,請繼續進行下方 的驗證應用程式保護 CA

實作附注

注意事項

應用程式的 MAMServiceAuthenticationCallback.acquireToken() 方法應該會將 標的 forceRefresh false 傳遞至 acquireTokenSilentAsync()

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

注意事項

如果您要在補救嘗試期間顯示自訂封鎖 UX,您應該將 showUX 參數的 false 傳遞至 remediateCompliance()。 您必須先確定您顯示 UX 並先註冊通知接聽程式,然後再呼叫 remediateCompliance()。 這可防止在失敗非常快速時 remediateCompliance() 遺漏通知的競爭狀況。 例如, onCreate() Activity 子類別的 或 onMAMCreate() 方法是註冊通知接聽程式,然後呼叫 remediateCompliance()的理想位置。 的參數 remediateCompliance() 可以傳遞至您的UX做為意圖額外專案。 收到合規性狀態通知時,您可以顯示結果,或直接完成活動。

注意事項

remediateCompliance() 會註冊帳戶並嘗試註冊。 取得主要令牌之後,就不需要呼叫 registerAccountForMAM() ,但這樣做並沒有任何損害。 另一方面,如果應用程式無法取得其令牌,而且想要移除用戶帳戶,則必須呼叫 unregisterAccountForMAM() 來移除帳戶,並防止背景註冊重試。

從 SDK 註冊通知

Intune App SDK 指南已經討論過數個案例,其中可能需要您的應用程式向 SDK 註冊通知,例如:

  • 處理 (的多重身分識別應用程式 WRONG_USER ,請參閱受控 與非受控 識別)
  • 處理 (多重身分識別應用程式 MANAGEMENT_REMOVED ,請參閱 數據緩衝區保護) 。
  • 多重身分識別應用程式處理 WIPE_USER_DATAWIPE_USER_AUXILIARY_DATA (請參閱 選擇性抹除) 。
  • 實作應用程式設定處理 REFRESH_APP_CONFIG (請參閱 從 SDK) 擷取應用程式 設定。

本節說明 SDK 可以傳送的每種通知類型、應用程式想要接聽通知的時機和原因,以及如何實作通知接收者。

通知類型

所有 SDK 通知都會實作 MAMNotification 介面,此介面具有單一函 getType()式 ,會傳回 MAMNotificationType 列舉。

大部分的通知都是 MAMUserNotifications,其提供單一身分識別的特定資訊,可透過函式擷 getUserIdentity() 取。

MAMEnrollmentNotificationMAMComplianceNotification 會進一步擴 MAMUserNotification充 ,其中包含嘗試使用 MAM 服務註冊使用者/裝置的結果,以及嘗試修復應用程式保護 CA 合規性的結果。

通知類型 通知類別 通知的原因 適用性 處理的秘訣 線程資訊
COMPLIANCE_STATUS MAMComplianceNotification 傳回合規性補救嘗試的結果。 實作應用程式保護 CA 的應用程式必須處理此問題。 - 不確定性
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification 傳回註冊嘗試的結果。 所有應用程式都會收到此訊息。 - 不確定性
MANAGEMENT_REMOVED MAMUserNotification 應用程式即將變成 Unmanaged。 利用 MAMDataProtectionManager 的應用程式必須處理此問題。 請參閱下 MANAGEMENT_REMOVED 永不在UI線程上
REFRESH_APP_CONFIG MAMUserNotification 應用程式組態值可能已變更。 實作應用程式設定和快取應用程式設定資料的應用程式必須處理此問題。 應用程式必須使任何快取的應用程式設定資料失效並更新。 不確定性
REFRESH_POLICY MAMUserNotification 應用程式防護 原則可能已變更。 快取應用程式保護原則的應用程式必須處理此問題。 應用程式必須使任何快取的應用程式保護原則數據失效並更新。 不確定性
WIPE_USER_DATA MAMUserNotification 抹除即將在*) ( 發生。 使用 MAMDataProtectionManager 應用程式必須處理這個 WIPE_USER_AUXILIARY_DATA 請參閱 選擇性抹除 永不在UI線程上
WIPE_USER_AUXILIARY_DATA MAMUserNotification 抹除即將在*) ( 發生。 只有多重身分識別應用程式才會收到此訊息。
使用 MAMDataProtectionManager 應用程式必須處理這個 WIPE_USER_DATA
請參閱 選擇性抹除 永不在UI線程上
WIPE_COMPLETED MAMUserNotification 抹除已完成。 一律為選擇性。 在或WIPE_USER_AUXILIARY_DATA之後WIPE_USER_DATA傳遞。 *如果應用程式從 或 的處理程序WIPE_USER_DATAWIPE_USER_AUXILIARY_DATA回報失敗,則不會傳送此通知。- 永不在UI線程上

(*) 抹除的原因有很多,例如:

  • 您的應用程式稱為 unregisterAccountForMAM
  • IT 系統管理員起始遠端抹除。
  • 不符合 管理員 必要條件式存取原則。

警告

應用程式絕對不應該同時 WIPE_USER_DATA 註冊 和 WIPE_USER_AUXILIARY_DATA 通知。

MANAGEMENT_REMOVED

通知 MANAGEMENT_REMOVED 會通知應用程式,先前受原則管理的帳戶即將變成 Unmanaged。 一旦帳戶未受管理,應用程式就無法再讀取該帳戶的加密檔案、讀取使用 MAMDataProtectionManager加密的帳戶數據、與加密的剪貼簿互動,或參與受控應用程式生態系統。

這不需要抹除用戶數據或註銷使用者 (如果需要抹除, WIPE_USER_DATA 則會) 傳送通知。 許多應用程式可能不需要處理此通知,但使用 MAMDataProtectionManager 的應用程式必須處理此問題。 如需詳細資訊,請參閱 數據緩衝區保護

當 SDK 呼叫應用程式的 MANAGEMENT_REMOVED 接收者時,會是下列情況:

  • SDK 已將先前加密的檔案解密 (但不受保護的數據緩衝區) 屬於應用程式。 Sdcard 上公用位置中未直接屬於應用程式的檔案 (例如,檔或下載資料夾) 不會解密。

  • 接收者方法所建立的新檔案或受保護數據緩衝區 (或接收者啟動之後執行的任何其他程式碼) 將不會加密。

  • 應用程式仍可存取加密金鑰,因此解密數據緩衝區等作業將會成功。

應用程式的接收者傳回之後,就無法再存取加密密鑰。

實作 MAMNotificationReceiver

若要從 SDK 註冊通知,您的應用程式必須建立 MAMNotificationReceiver 並向 MAMNotificationReceiverRegistry 註冊。

若要註冊接收者,請與您的接收者通話 registerReceiver ,並在您的 Application.onCreate 方法中呼叫所需的通知類型:

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

您應用程式的 MAMNotificationReceiver 實作 必須包含 onReceive(MAMNotification notification) 方法。 系統會針對每個收到的通知個別叫用這個方法,而且它必須傳回 boolean。 一般而言,除非您的應用程式在回應通知時發生失敗,否則這個方法應該一律傳回 true

如同其他類型的 Android 接收者,您的應用程式具有處理通知的彈性:

  • 它可能會針對不同的通知類型建立不同的 MAMNotificationReceiver 實作 (如下所述) 。 在此情況下,請務必個別註冊每個實作和每個通知類型。
  • 它可以使用單一 MAMNotificationReceiver 實作 ,其中包含回應多個不同通知類型的邏輯。 在此情況下,它必須針對它可以回應的每種通知類型進行註冊。
  • 它可能會建立多個 MAMNotificationReceiver 實作 ,每個實作都會回應相同的通知類型。 在此情況下,兩者都必須註冊為相同的通知類型。

提示

因為其回呼未在 MAMNotificationReceiver.onReceive UI 線程上執行,所以可以安全地封鎖 。

自定義主題

您可以將自定義主題提供給 Intune App SDK;此自定義主題會套用至所有 SDK 畫面和對話框。 如果未提供主題,則會使用預設 SDK 主題。

提供自定義主題

若要提供主題,您必須在 方法中 Application.onMAMCreate 新增下列程式代碼行:

MAMThemeManager.setAppTheme(R.style.AppTheme);

在上述範例中,您需要將 取代 R.style.AppTheme 為您想要套用 SDK 的樣式主題。

受信任的跟證書管理

如果您的應用程式需要內部部署或私人證書頒發機構單位所簽發的 SSL/TLS 憑證,以提供內部網站和應用程式的安全存取權,Intune App SDK 已使用 API 類別 MAMTrustedRootCertsManagerMAMCertTrustWebViewClient 新增憑證信任管理的支援。

注意事項

MAMCertTrustWebViewClient 支援 Android 10 或更新版本。

受信任的跟證書管理提供下列項目的支援:

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • WebView

需求

注意事項

受信任的跟證書管理可以獨立於 Microsoft Tunnel VPN 閘道 使用,不過您必須授權 Microsoft MAM 通道才能使用。

從 Intune 使用受信任的跟證書建立信任錨點

受信任的跟證書管理可讓您的應用程式搭配裝置的憑證,使用 Intune 中受信任的跟證書。

如果裝置的受信任跟證書存放區未包含必要的受信任跟證書來建立內部部署資源的安全連線,則 API 類別 MAMTrustedRootCertsManagerMAMCertTrustWebViewClient 會使用透過 應用程式組態 原則傳遞的 Intune 受信任跟證書作為後援選項。 如此一來,應用程式就可以使用裝置和 Intune 憑證來驗證與信任來源的安全連線和通訊。

若要增強其網路安全性設定,應用程式可以使用網路安全性組態 XML 檔案。 受信任的跟證書管理會藉由確認應用程式的網路安全性設定 XML 是否有下列任何功能,來遵守這項額外的安全性:

  • 具有其他 CA 的自定義信任錨點,例如自我簽署憑證。
  • 限制受信任 CA 的網域特定規則。
  • 特定網域憑證的釘選集。

注意事項

若要深入瞭解 Android 網路安全性設定,請參閱: 網路安全性設定

如果其中任何一項適用於正在檢查信任的網域,則受信任的跟證書管理會略過此網域的自定義信任檢查,並只讓平台的預設信任管理員執行檢查。

類別 MAMTrustedRootCertsManager

此類別提供下列 API:

  • createSSLContext(String identity, String protocol):針對指定的 SSLContext 身分識別和指定的 SSL/TLS 通訊協定,建立使用受信任跟證書的 物件。 這個類別傳回 SSLContext 的對象已經使用使用來自裝置和 MAM 服務的合併受信任跟證書的物件正確 X509TrustManager 初始化。
  • createSSLSocketFactory(String identity, String protocol):針對指定的 SSLSocketFactory 身分識別和指定的 SSL/TLS 通訊協定,建立使用受信任跟證書的 物件。 傳回 SSLSocketFactory 的物件是從這個類別中的相同 SSLContext 對象參考。
  • createX509TrustManagers(String identity):建立 物件的 X509TrustManager 陣列,這些物件會使用來自裝置的合併受信任跟證書,以及指定身分識別的 MAM 服務。

注意事項

參數 identity 必須是執行應用程式之特定使用者的字串標識碼,例如其UPN。 在使用者識別元事先未知的情況下,可以傳入 Null 的值,MAM 會嘗試從叫用這些 API 的線程或進程中探索正確的身分識別。 必須正確地在進程或線程上設定身分識別,MAM 才能探索身分識別。 若要深入瞭解如何在進程或線程上設定作用中的身分識別,請造訪: 階段 5:多重身分識別

注意事項

protocol未提供 參數時,會使用平臺上支援的最高 SSL/TLS 通訊協定。

以下是使用這個類別的一些範例。

使用 HttpsUrlConnection 的範例
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactory(identity, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
使用OkHttpClient的範例
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagers(identity);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);  

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

類別 MAMCertTrustWebViewClient

這個類別提供 Android 類別android.webkit.WebViewClient的自定義實作,提供在 中處理 SSL 錯誤android.net.http.SslError.SSL_UNTRUSTEDWebView的方法。 在處理錯誤時, 類別會使用在 Intune 中設定並從 MAM 服務接收的受信任跟證書,從在 WebView中產生 SSL 錯誤的目標 URL 檢查主機的可信度。 如果自定義實作未處理 SSL 錯誤,則會叫用繼承自 superclass 的預設行為。 使用此類別時,您應該建立它的實例,然後呼叫 WebView.setWebViewClient(WebViewClient) 以向 實例註冊它 WebView

以下是使用這個類別的範例。

使用 WebView 的範例
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

結束準則

請參閱 使用變更的原則進行快速測試 ,以方便測試。

驗證儲存至限制/從限制開啟

如果您未實作 原則來限制應用程式與裝置或雲端儲存位置之間的數據傳輸,請略過。

在您的應用程式可以將資料儲存至雲端服務或本機數據,以及從雲端服務或本機數據開啟數據的每個案例中,請自行重新分析。

為了簡單起見,這些測試會假設您的應用程式只支援從應用程式內的單一位置儲存至 商務用 OneDrive 並開啟數據。 不過,您必須驗證每個組合:針對應用程式允許儲存資料的每個位置,每個支援的儲存位置,以及應用程式允許開啟數據的每個支持開啟位置。

針對這些測試,請安裝您的應用程式和 Intune 公司入口網站;在開始測試之前,先使用受控帳戶登入。 此外:

  • 將受管理帳戶的原則設定為:
    • 「將組織數據傳送至其他應用程式」至「受原則管理的應用程式」。
    • 「從其他應用程式接收數據」至「受原則管理的應用程式」。
案例 前提條件 步驟
儲存至,完全允許 [儲存組織數據的複本] 原則設定為 [允許] - 瀏覽至您的應用程式可將資料儲存到 商務用 OneDrive 的位置。
- 嘗試將檔案儲存至 商務用 OneDrive,並儲存至登入您應用程式的相同受管理帳戶。
- 確認允許儲存。
儲存至 、豁免 - [儲存組織數據的複本] 原則設定為 [封鎖]
- [允許使用者將複本儲存至選取的服務] 原則設定為 [僅 商務用 OneDrive]
- 瀏覽至您的應用程式可將資料儲存到 商務用 OneDrive 的位置。
- 嘗試將檔案儲存至 商務用 OneDrive,並儲存至登入您應用程式的相同受管理帳戶。
- 確認允許儲存。
- 如果您的應用程式允許,請嘗試將檔案儲存到不同的雲端儲存位置,並確認該檔案遭到封鎖。
儲存至、封鎖 [儲存組織數據的複本] 原則設定為 [封鎖] - 瀏覽至您的應用程式可將資料儲存到 商務用 OneDrive 的位置。
- 嘗試將檔案儲存至 商務用 OneDrive,並儲存至登入您應用程式的相同受管理帳戶。
- 確認已封鎖儲存。
- 如果您的應用程式允許,請嘗試將檔案儲存到不同的雲端儲存位置,並確認該檔案遭到封鎖。
從開啟,完全允許 [將數據開啟到組織檔] 原則設定為 [允許] - 瀏覽至您的應用程式可從 商務用 OneDrive 開啟資料的位置。
- 嘗試從 商務用 OneDrive 開啟檔,從登入您應用程式記憶體的相同受管理帳戶開啟檔。
- 確認允許開啟。
從開啟,豁免 - [將數據開啟至組織檔] 原則設定為 [封鎖]
- [允許使用者從選取的服務開啟數據] 原則設定為 [僅 商務用 OneDrive]
- 瀏覽至您的應用程式可從 商務用 OneDrive 開啟資料的位置。
- 嘗試從 商務用 OneDrive 開啟檔,從登入您應用程式記憶體的相同受管理帳戶開啟檔。
- 確認允許開啟。
- 如果您的應用程式允許,請嘗試從不同的雲端儲存位置開啟另一個檔案,並確認該檔案已被封鎖。
開啟來源,封鎖 [將數據開啟至組織檔] 原則設定為 [封鎖] - 瀏覽至您的應用程式可從 商務用 OneDrive 開啟資料的位置。
- 嘗試從 商務用 OneDrive 開啟檔,從登入您應用程式記憶體的相同受管理帳戶開啟檔。
- 確認已封鎖開啟。
- 如果您的應用程式允許,請嘗試從不同的雲端儲存位置開啟另一個檔案,並確認該檔案已被封鎖。

驗證通知限制

如果您未實作原則 來限制通知內的內容,請略過。

就應用程式保護原則而言,您的應用程式可能會引發三種不同類型的通知:

  1. 不包含任何帳戶數據的通知。
  2. 包含屬於受管理帳戶之數據的通知。
  3. 包含屬於 Unmanaged 帳戶之數據的通知。

如果您的應用程式是單一身分識別,則只有前 2 個相關,因為如果唯一的帳戶是 Unmanaged,則不會套用任何保護。

藉由觸發所有三種已設定不同原則值的通知類型,即可驗證通知限制。

針對這些測試,請安裝您的應用程式和 Intune 公司入口網站;在開始測試之前,先使用受控帳戶登入。 如果您的應用程式是多重身分識別,也請使用 Unmanaged 帳戶登入您的應用程式。

案例 前提條件 步驟
已封鎖完整內容 [組織數據通知] 原則設定為 [封鎖] - 觸發您的應用程式,以在沒有帳戶數據的狀態下引發通知。
- 確認此通知不會顯示任何內容。
- 觸發您的應用程式,以使用受管理帳戶的數據引發通知。
- 確認此通知不會顯示任何內容。
- 觸發您的應用程式,以使用 Unmanaged 帳戶的數據引發通知。
- 確認此通知不會顯示任何內容。
已封鎖部分內容 [組織數據通知] 原則設定為 [封鎖組織數據] - 觸發您的應用程式,以在沒有帳戶數據的狀態下引發通知。
- 確認此通知會顯示其完整內容。
- 觸發您的應用程式,以使用受管理帳戶的數據引發通知。
- 確認此通知會修訂Managed帳戶的內容。
- 觸發您的應用程式,以使用 Unmanaged 帳戶的數據引發通知。
- 確認此通知會顯示其完整內容。
未封鎖任何內容 [組織數據通知] 原則設定為 [允許]

驗證數據備份和還原

如果您未實作 保護備份數據的原則,請略過。

) 您的應用程式已設定備份,請重新熟悉 (檔案和/或機碼/或機碼值組的內容。 您應該驗證 只有 預期的內容是還原的一部分。 還原中的額外內容可能會導致數據外洩。

針對這些測試,請安裝您的應用程式和 Intune 公司入口網站;在開始測試之前,先使用受控帳戶登入。 如果您的應用程式是多重身分識別,也請使用 Unmanaged 帳戶登入您的應用程式。

請遵循 Android的正式指示來測試備份。 這些指示與自動備份和索引鍵/值備份不同,因此請密切遵循。

根據原則驗證自定義螢幕擷取

如果您未實作 自定義螢幕擷取限制,請略過。

如果您的應用程式有略過 Android 層級FLAG_SECUREWindow功能,請驗證此功能是否遭到應用程式保護原則螢幕擷取限制封鎖。

針對這些測試,請安裝您的應用程式和 Intune 公司入口網站;在開始測試之前,先使用受控帳戶登入。

案例 前提條件 步驟
已封鎖螢幕擷取 [螢幕擷取和 Google 小幫手] 原則設定為 [封鎖] - 瀏覽至應用程式中利用自訂FLAG_SECURE程式代碼的位置。
- 嘗試利用該功能。
- 確認已封鎖此功能。
允許螢幕擷取 [螢幕擷取和 Google 小幫手] 原則設定為 [允許] - 瀏覽至應用程式中利用自訂FLAG_SECURE程式代碼的位置。
- 嘗試利用該功能。
- 確認允許此功能。

驗證應用程式保護CA

如果您未實作 支援應用程式保護 CA,請略過。

除了建立應用程式保護原則並指派給應用程式和測試帳戶的一般驗證步驟之外,您也必須建立應用程式保護條件式存取原則,並將其指派給測試帳戶。 如需詳細資訊,請參閱 使用 Intune 設定應用程式型條件式存取 原則。

測試步驟:

  1. 在開始此測試之前,請先卸載 Microsoft Authenticator 和 Intune 公司入口網站。
  2. 安裝您的應用程式。
  3. 使用以應用程式保護原則和應用程式型 CA 原則為目標的測試帳戶登入您的應用程式。
  4. 確認您的應用程式會提示您安裝 公司入口網站。
  5. 再次登入。
  6. 確認您的應用程式會提示您註冊您的裝置。 遵循提示。 如果您的應用程式未在此提示註冊,請先確認您的測試裝置已卸載其他已啟用 SDK 的應用程式、公司入口網站 和 Authenticator。 如果仍然沒有提示,請重新流覽上述實作指示。
  7. 確認您能夠在註冊之後存取所有應用程式數據。

驗證通知接收者

如果您未實作 SDK 的通知註冊,請略過。

驗證步驟取決於您的應用程式已註冊的通知類型。 針對所有類型的通知,請新增記錄以確保正確地叫用您的接收者。

MAM_ENROLLMENT_RESULT 只要先使用以應用程式保護原則為目標的帳戶登入您的應用程式,即可觸發。

REFRESH_APP_CONFIGREFRESH_POLICY 可以藉由更新以測試帳戶為目標的個別 應用程式組態 原則和應用程式保護原則,並等候 SDK 接收更新的原則來觸發。

提示

請參閱 使用變更的原則進行快速測試 以加速此程式。

MANAGEMENT_REMOVEDWIPE_USER_AUXILIARY_DATA從 Microsoft Intune 發出選擇性抹除,即可觸發 、WIPE_USER_DATAWIPE_COMPLETED、 通知。

驗證自定義主題

如果您未實作 自定義主題,請略過。

您可以藉由檢查 SDK 對話框上的色彩來驗證自訂主題支援。 最簡單的對話框是 MAM PIN 畫面。

前提 條件:

  • 將受管理帳戶的原則設定為:
    • “PIN for access” 至 “Required”。
  • 安裝您的應用程式和 Intune 公司入口網站。

測試步驟:

  1. 啟動您的應用程式,並使用測試帳戶登入。
  2. 確認 [MAM PIN] 畫面隨即出現,並根據您提供給 SDK 的自定義主題進行主題化。

後續步驟

如果您依照本指南的順序完成上述所有 結束準則恭喜您,您的應用程式現在已與 Intune App SDK 完全整合,而且可以強制執行應用程式保護原則! 如果您略過先前的其中一個應用程式參與區段:階段 5:多重身分識別和階段 6:應用程式組態,且不確定您的應用程式是否應該支持這些功能,請重新流覽 SDK 整合的重要決策

應用程式防護 現在是您應用程式的核心案例。 當您繼續開發應用程式時,請繼續參閱本指南和 附錄