適用於 Android 的 Intune App SDK - 應用程式參與功能

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

注意事項

本指南分為幾個不同的階段。 首先檢閱規劃整合。

第七階段:應用程式參與功能

階段目標

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

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

此 SDK 整合程式會嘗試將開發人員需要撰寫的應用程式特定程式碼量降至最低。 通過成功完成 SDK 整合的前幾個階段,您的應用程式現在可以強制執行大多數應用程式保護原則設定,例如檔案加密、複製/貼上限制、螢幕擷取畫面封鎖和資料傳輸限制。

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

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

本指南的前幾個階段已經描述了幾個應用程式參與功能:

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

  • 強制執行原則,限制將檔案儲存到本機或雲端儲存空間或從本機或雲端儲存空間開啟檔案。
  • 強制執行限制通知內容的原則。
  • 強制執行原則保護備份資料。
  • 如果您的應用程式有自訂螢幕擷取程式碼) ,強制執行原則限制螢幕擷取 (。
  • 支援應用程式保護 CA。
  • 註冊以取得來自 SDK 的通知。
  • 套用自訂應用程式佈景主題設定。
  • 使用來自 Intune 的受信任憑證,確保信任鏈結至內部部署端點。

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

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

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

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

若要擷取執行個體, AppPolicy 請使用其中一個 MAMPolicyManager 方法,例如 getPolicy(final Context context)getPolicyForIdentityOID(final String oid)

AppPolicy 中的資訊方法

並非每個方法 AppPolicy 都與應用程式參與功能繫結。 有些方法僅供參考,並提供您的應用程式資料,了解目前已設定哪些原則,即使這些原則是由 SDK 自動強制執行。 這些方法的存在是為了讓您的應用程式有機會在設定特定原則時呈現自訂使用者體驗。

範例:判斷螢幕擷取畫面是否已封鎖

如果應用程式具有允許使用者擷取螢幕擷取畫面的控制項,請在應用程式保護原則封鎖螢幕擷取畫面時考慮停用或隱藏該控制項。

該應用程序可以通過致電 MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()進行檢查。

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

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

注意事項

如果您的應用程式允許直接從應用程式儲存到個人或雲端位置,或允許直接在應用程式中開啟資料,您必須實作此 Intune App SDK 應用程式參與功能**,讓 IT 系統管理員能夠封鎖此儲存和開啟。

儲存至裝置或雲端儲存空間

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

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);

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

service 參數: SaveLocation 列舉值 使用案例 關聯的 OID
ONEDRIVE 應用程式正在將資料儲存到 OneDrive。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
SHAREPOINT 應用程式正在將資料儲存到 SharePoint。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
BOX 應用程式正在將資料儲存到 Box。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
LOCAL 應用程式正在將資料儲存到裝置上的外部儲存位置,而該位置 不是 應用程式的私人儲存空間。 此儲存位置不會被視為雲端服務,且應一律搭配 OID 參數使用 null
PHOTO_LIBRARY 該應用程序正在將數據保存到 Android 本地照片存儲。 本機相片儲存空間不被視為雲端服務,且應一律搭配 OID 參數使用 null
IMANAGE 該應用程序正在將數據保存到 iManage。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
EGNYTE 該應用程序正在將數據保存到 Egnyte。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
ACCOUNT_DOCUMENT 應用程式正在將資料儲存到與應用程式內帳戶相關聯的位置,而不是此表格中的特定雲端位置之一。

使用此位置來判斷資料是否可以在多重身分識別應用程式內的帳戶之間傳遞。
用於 Microsoft Entra 驗證之帳戶的 OID。 如果此帳戶不存在或不知道 OID,請使用 null
OTHER 應用程式將資料儲存到未在此表格中指定且不符合 的 ACCOUNT_DOCUMENT準則的位置。 不會 oid 針對此位置進行評估,而應該是 null

一律允許放置在私人應用程式儲存空間中的 Files,若這些檔案是應用程式運作所需或是暫時下載以顯示的;不需要檢查getIsSaveToLocationAllowedForOID。 請檢查SaveLocation.LOCAL

  1. Files 保存在私人應用程序存儲之外。
  2. Files下載到應用程式作業 (不需要的私人應用程式儲存空間,例如當使用者明確選擇下載到裝置) 時。

注意事項

檢查儲存原則時, oid 應為與儲存至之雲端服務相關聯的帳戶之 OID, (此帳戶不一定與擁有儲存文件的帳戶相同) 。

從本機或雲端儲存位置開啟資料

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

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);

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

location 參數: OpenLocation 列舉值 使用案例 關聯的 OID
ONEDRIVE_FOR_BUSINESS 應用程式正在從 OneDrive 開啟資料。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
SHAREPOINT 應用程式正在從 SharePoint 開啟資料。 帳戶的 OID,同時用於雲端服務驗證和 Microsoft Entra 驗證。 如果此帳戶不存在或不知道 OID,請使用 null
CAMERA 應用程式正在從裝置相機開啟資料。 null ,因為裝置相機不是雲端服務。
LOCAL 應用程式正在從裝置上的外部儲存位置開啟資料,而該位置 不是 應用程式的私人儲存空間。 雖然外部儲存體不是雲端服務,但需要一個 oid 參數,因為它會指出擁有權。

* 針對具有身分識別標記的檔案:oid 應該是檔案擁有者的身分識別。
* 對於沒有識別標記的檔案:oid 應該是 null
PHOTO_LIBRARY 該應用程序正在從 Android 本地照片存儲打開數據。 本機相片儲存空間不被視為雲端服務,且應一律搭配 OID 參數使用 null
ACCOUNT_DOCUMENT 應用程式正在從與應用程式內帳戶相關聯的位置開啟資料,但不是此表格中的特定雲端位置之一。

使用此位置來判斷資料是否可以在多重身分識別應用程式內的帳戶之間傳遞。
用於 Microsoft Entra 驗證之帳戶的 OID。 如果此帳戶不存在或不知道 OID,請使用 null
OTHER 應用程式正在從本表格中未指定且不符合 的 ACCOUNT_DOCUMENT準則開啟資料。 不會 oid 針對此位置進行評估,而應該是 null

注意事項

當您檢查開啟原則時, oid 應為與 開啟之 檔案或雲端服務相關聯之帳戶的 OID, ( 一定與開啟該文件) 的帳戶相同。

提示

為方便起見,SDK 提供為本機儲存體中的檔案取得File參數的方法AppPolicy.isOpenFromLocalStorageAllowed。 針對原則強制執行,此方法在功能上與呼叫 AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) 相同,只不過它處理 oidFile.

共用封鎖的對話方塊

SDK 會提供對話方塊,在 MAM 原則封鎖資料傳輸動作時通知使用者。

每當 或 getIsOpenFromLocationAllowedForOID API 呼叫導致儲存/開啟動作遭到封鎖時,getIsSaveToLocationAllowedForOID都會向使用者顯示該對話方塊。 對話方塊會顯示一般訊息,並在關閉時返回呼叫 Activity

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

MAMUIHelper.showSharingBlockedDialog(currentActivity)

允許檔案共用

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

限制通知內容的原則

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

SDK 的預設行為有限制。 SDK 不會自動接受 [封鎖組織資料] 值,其目的是只會從通知中移除受管理的內容。 對於多重身分識別應用程式,SDK 無法判斷哪些通知包含受管理的內容。

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

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

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).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 雲端硬碟。

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:fullBackupContenttrue設定為 ,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 允許開發人員將整個文件和共享首選項分別註冊到 a FileBackupHelperSharedPreferencesBackupHelper () 然後在創建時將其添加到 BackupAgentHelper 中。 請依照下列步驟搭配使用 BackupAgentHelper 搭配 Intune MAM:

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

  2. 讓班級擴充 MAM 等同於 BackupAgentHelper、FileBackupHelper 和 SharedPreferencesBackupHelper。

Android 類別 MAM 等效項
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

遵循這些準則可讓您成功執行多重身分識別備份和還原。

BackupAgent

BackupAgent 可讓您更明確地說明要備份哪些資料。 由於開發人員負責實作,因此需要更多步驟才能確保 Intune 的適當資料保護。 由於大部分的工作都是由您身為開發人員,因此 Intune 整合會稍微複雜一些。

整合 MAM:

  1. 請仔細閱讀 Android 指南,了解 索引鍵/值備份 ,特別是 擴展 BackupAgent ,以確保您的 BackupAgent 實作遵循 Android 準則。

  2. 讓您的班級擴充 MAMBackupAgent

多重身分識別備份:

  1. 開始備份之前,請先檢查 IT 系統管理員是否允許您打算備份的檔案或資料緩衝區,以便在多重身分識別案例中進行備份。 在 isBackupAllowedMAMFileProtectionManagerMAMDataProtectionManager 中使用來判斷此行為。 如果不允許備份檔案或資料緩衝區,則不應將其包含在備份中。

  2. 在備份期間的某個時間點,如果您想要備份在步驟 1 中簽入的檔案的身分識別,您必須使用您打算從中擷取資料的檔案進行呼叫 backupMAMFileIdentity(BackupDataOutput data, File … files) 。 此方法會自動建立新的備份實體,並為您寫入。BackupDataOutput 這些實體會在還原時自動取用。

多重身分識別還原: 資料備份指南指定了用於還原應用程式資料的一般演算法,並在 擴展 BackupAgent 一節中提供了程式碼範例。 若要成功執行多重身分識別還原,您必須遵循此程式碼範例中提供的一般結構,並特別注意下列幾點:

  1. 您必須使用 while(data.readNextHeader())* 迴圈來瀏覽備份實體。

  2. 如果 與您寫入onBackup的金鑰不相符,您必須data.getKey()呼叫 data.skipEntityData() 。 如果沒有這個步驟,您的還原可能無法成功。

  3. 在取用 * 建構中的 while(data.readNextHeader())備份實體時避免返回,因為在這種情況下,我們自動寫入的任何實體都會遺失。

  • 其中 data 是應用程式在還原時收到之 MAMBackupDataInput 的區域變數名稱。

自訂螢幕Capture限制

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

注意事項

如果應用程式不包含任何自訂或非 Microsoft 螢幕擷取功能,則不需要採取任何動作來限制螢幕擷取。 螢幕擷取原則會自動在層級針對 Window 所有 MAM 整合應用程式強制執行。 系統會視需要封鎖作業系統或其他應用程式擷取應用程式中 A Window 的任何嘗試。 例如,如果使用者嘗試透過 Android 內建的螢幕擷取畫面或螢幕錄製功能來擷取您應用程式的螢幕畫面,擷取會自動受限,而不需要應用程式參與。

支援應用程式保護 CA

應用程式保護 CA (條件式存取) ,也稱為應用程式型 CA,限制對資源的存取。 Intune 應用程式防護原則必須先管理您的應用程式,才能存取這些資源。 Microsoft Entra ID 會要求應用程式先註冊並由 Intune 應用程式保護原則管理,然後再授與權杖以存取受條件式存取保護的資源,以強制執行此原則。

注意事項

應用程式保護 CA 支援需要 Microsoft 驗證程式庫 (MSAL) 版本 1.0.0 或更新版本。

使用 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 ID 授與所要求權杖的條件。 前四個參數可以從 MSAL AuthenticationCallback.onError() 方法收到的例外狀況擷取。 最後一個參數是布林值,控制在合規性嘗試期間是否出現使用者體驗。

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

remediateCompliance() 可能會在建立合規性時啟動 MAM 註冊。 如果應用程式已註冊註冊通知的通知接收器,它可能會收到註冊通知。 應用程式的 registered MAMServiceAuthenticationCallback 會呼叫其 acquireToken() 方法來取得註冊的權杖。 acquireToken() 在應用程式取得自己的權杖之前呼叫。 應用程式在成功取得權杖之後所執行的任何簿記或帳戶建立工作可能尚未完成。 在此情況下,回呼必須能夠取得權杖。

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

如果您稍後使用所要求資源的有效權杖呼叫 updateToken ,合規性補救會立即使用指定的權杖繼續。

注意事項

因為在例外狀況發生之前MsalIntuneAppProtectionPolicyRequiredException,已引導使用者安裝代理人並註冊裝置,所以仍然可以acquireToken()取得無訊息權杖。 此程序會導致代理程式在其快取中具有有效的重新整理權杖,這可讓代理程式以無訊息方式取得要求的權杖。

以下是在方法中 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通知,系統會傳送 a 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() and 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

一旦您的應用程式準備好處理 App CA 補救,您就可以告訴 Microsoft 身分識別您的應用程式已準備好 App 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()應該將旗標傳遞 forceRefreshfalseacquireTokenSilentAsync()

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

acquireTokenSilentAsync(acquireTokenSilentParameters);

注意事項

如果您想要在補救嘗試期間顯示自訂封鎖 UX,您應該將 showUX 參數的 false 傳遞給 remediateCompliance()。 您必須確保在呼叫 remediateCompliance()之前先展示您的 UX 並註冊您的通知偵聽器。 這可防止競爭條件,即如果快速失敗,可能會 remediateCompliance() 錯過通知。 例如, onCreate() Activity 子類別的 or onMAMCreate() 方法是註冊通知接聽器然後呼叫 remediateCompliance()的理想位置。 的 remediateCompliance() 參數可以作為 Intent 額外內容傳遞至您的 UX。 收到合規性狀態通知時,您可以顯示結果或完成活動。

注意事項

remediateCompliance() 註冊帳戶並嘗試註冊。 取得主要權杖之後,就不需要呼叫 registerAccountForMAM() ,但這樣做並沒有什麼壞處。 另一方面,如果應用程式無法取得其權杖,而且想要移除使用者帳戶,則必須呼叫 unregisterAccountForMAM() 以移除帳戶,並防止背景註冊重試。

註冊從 SDK 接收通知

Intune 應用程式 SDK 指南討論了您的應用程式可能需要註冊來自 SDK 通知的幾種案例,例如:

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

通知類型

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

大部分通知都是 MAMUserNotification 執行個體,可提供單一身分識別的特定資訊。 您可以透過 getUserOid() 函數擷取身分識別的 OID,而可以透過 擷取身分識別的 UPN getUserIdentity()

MAMEnrollmentNotificationMAMComplianceNotification 進一步延伸 MAMUserNotification,分別包含嘗試向 MAM 服務註冊使用者或裝置的結果,以及嘗試補救應用程式保護 CA 合規性的結果。

通知類型 通知類別 通知原因 適用性 操作提示 對話資訊
COMPLIANCE_STATUS MAMComplianceNotification 傳回合規性補救嘗試的結果。 實作應用程式保護 CA 的應用程式必須處理此問題。 非決定性
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification 傳回註冊嘗試的結果。 所有應用程式都會收到此資訊。 非決定性
MANAGEMENT_REMOVED MAMUserNotification 應用程式即將變成非受控狀態。 使用的 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傳遞。
如果應用程式從其抹除處理常式報告失敗,將不會傳送此通知。
從未在 UI 執行緒上

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

  • 您的應用程式稱為 unregisterAccountForMAM
  • IT 系統管理員啟動遠端抹除。
  • 未滿足管理員要求的條件式存取原則。

警告

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

MANAGEMENT_REMOVED

通知會 MANAGEMENT_REMOVED 通知 App 先前受原則管理的帳戶即將變成非受控帳戶。 取消管理帳戶之後,應用程式就無法再讀取該帳戶的加密檔案、讀取加密的帳戶資料 MAMDataProtectionManager、與加密的剪貼簿互動,或以其他方式參與受控應用程式生態系統。

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

當 SDK 呼叫應用程式的 MANAGEMENT_REMOVED 接收器時,表示如下:

  • SDK 已解密先前加密的檔案, (但未受保護的資料緩衝區) 屬於該應用程式。 Files在 SD 記憶卡上不直接屬於 (應用程式的公共位置,例如,) 不會解密 [文件] 或 [下載] 資料夾。

  • 接收器方法 (建立的任何新檔案或受保護的資料緩衝區,或在接收器啟動後執行的任何其他程式碼都不會加密) 。

  • 應用程式仍可存取加密金鑰,因此可成功執行解密資料緩衝區等作業。

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

實作 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
  • Web 檢視

需求

注意事項

受信任的根憑證管理可以獨立於 Microsoft 通道 VPN 閘道使用,但您必須授權 Microsoft MAM 通道才能使用。

使用 Intune 的受信任根憑證建立信賴起點

受信任的根憑證管理可讓您的應用程式將來自 Intune 的受信任根憑證與來自裝置的憑證結合使用。

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

若要增強其網路安全性設定,應用程式可以使用網路安全性設定 XML 檔案。 受信任的根憑證管理會藉由驗證應用程式的網路安全性設定 XML 是否具有下列任何功能,來尊重這種額外的安全性:

  • 具有額外 CA 的自訂信賴起點,例如自我簽署憑證。
  • 用於限制受信任 CA 的網域特定規則。
  • 特定網域憑證的 PIN 碼集。

注意事項

如需 Android 網路安全性設定的詳細資訊,請參閱 網路安全性設定

如果其中任一適用於正在檢查信任的網域,則 [受信任的根憑證管理] 會略過此網域的自訂信任檢查,而只讓平台的預設信任管理員執行檢查。

類別 MAMTrustedRootCertsManager

這個類別提供下列 API:

  • createSSLContextForOID(String oid, String protocol): 建立物件 SSLContext ,其針對指定的身分識別和指定的 SSL/TLS 通訊協定使用受信任的根憑證。 從這個類別傳回的 SSLContext 物件已使用來自裝置和 MAM 服務的結合受信任根憑證的物件正確 X509TrustManager 初始化。
  • createSSLSocketFactoryForOID(String oid, String protocol): 建立物件 SSLSocketFactory ,其針對指定的身分識別和指定的 SSL/TLS 通訊協定使用受信任的根憑證。 傳回 SSLSocketFactory 的物件會從此類別中的相同 SSLContext 物件參照。
  • createX509TrustManagersForOID(String oid): 會建立物件陣列 X509TrustManager ,以針對指定的身分識別,使用來自裝置和 MAM 服務的受信任根憑證。

注意事項

oid參數應為執行應用程式之特定使用者的Microsoft Entra使用者識別碼 (OID) 。 如果事先未知使用者識別碼,您可以傳遞值 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.createSSLSocketFactoryForOID(oid, "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.createX509TrustManagersForOID(oid);

// 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 錯誤,系統會叫用從超類別繼承的預設行為。

當您使用此類別時,請建立其執行個體,然後呼叫 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
...

中國 App Store 隱私權合規

某些中國 App Store 會要求應用程式在執行與裝置上其他應用程式互動的作業之前,先向使用者顯示隱私權同意對話方塊。 這包括註冊接聽套件安裝/解除安裝事件的廣播接收器。 MAM SDK 這樣做是為了接聽大部分 MAM 邏輯所在公司入口網站的是否存在。

如果您的應用程式是透過有此需求的中國應用程式市集發佈,請使用下列整合功能,將離線啟動作業延遲到取得隱私權同意為止。

1. 新增資訊清單旗標

將下列中繼資料新增至您的應用程式 AndroidManifest.xml

<application>
    <meta-data
        android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
        android:value="true"/>
</application>

注意事項

此旗標僅應新增至透過中國應用程式商店發佈的 APK,這些 APK 需要先取得隱私權同意,才能與其他應用程式互動。 如果是透過其他商店發佈的 APK,則不應包含此旗標。

2. 在 [隱私權] 對話方塊之後發出訊號整備

在使用者接受您的隱私權同意對話方塊後,呼叫 SDK 以表示離線啟動作業可以繼續:

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
    .setOfflineStartupReady()

或在 Java 中:

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
    .setOfflineStartupReady();

行為

在應用程式啟動之間,會持續保持就緒狀態。 呼叫之後 setOfflineStartupReady() ,後續啟動會在應用程式初始化期間立即註冊接收器。

附註

  • setOfflineStartupReady() 方法是冪等的; 呼叫多次它是安全的。
  • 如果公司入口網站已安裝 (線上模式) ,則通話setOfflineStartupReady()不會有任何作用,因為不需要接收器。
  • 重要事項:您應一律在接受隱私權對話方塊後致電 setOfflineStartupReady()

結束準則

如需詳細資訊,請參閱 使用變更的原則進行快速測試 ,以輕鬆進行測試。

驗證儲存至和開啟限制

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

重新熟悉應用程式可以將資料儲存至雲端服務或本機資料,以及從雲端服務或本機資料開啟資料的每個案例。

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

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

  • 將受控帳戶的原則設定為:
    • 「將組織資料傳送至其他應用程式」設定為「原則管理的應用程式」。
    • [從其他應用程式接收資料] 設定為 [原則受管理的應用程式]。
案例 先決條件 步驟
儲存至,完全允許 「儲存組織資料複本」原則設定為 允許 - 導航到應用程序中可以將數據保存到 OneDrive 的部分。
- 嘗試使用登入應用程式的相同受管理帳戶將文件儲存到 OneDrive。
- 確認允許儲存。
儲存至,豁免 - [儲存組織資料複本] 原則設定為 [封鎖]
- 「允許使用者將複本儲存至選取的服務」原則設定為僅限 OneDrive
- 導航到應用程序中可以將數據保存到 OneDrive 的部分。
- 嘗試使用登入應用程式的相同受管理帳戶將文件儲存到 OneDrive。
- 確認允許儲存。
- 如果您的應用程式允許,請嘗試將檔案儲存到不同的雲端儲存位置並確認其已被封鎖。
儲存至, 已封鎖 「儲存組織資料複本」原則設定為 封鎖 - 導航到應用程序中可以將數據保存到 OneDrive 的部分。
- 嘗試使用登入應用程式的相同受管理帳戶將文件儲存到 OneDrive。
- 確認儲存已封鎖。
- 如果您的應用程式允許,請嘗試將檔案儲存到不同的雲端儲存位置並確認其已被封鎖。
開啟來源,完全允許 「在組織文件中開啟資料」原則設定為 允許 - 導航到應用程序中可以從 OneDrive 打開數據的部分。
- 嘗試使用登入應用程式儲存空間的相同託管帳戶從 OneDrive 開啟文件。
- 確認允許開啟。
開啟、豁免 - [將資料開啟至組織文件] 原則設定為 [封鎖]
- 「允許使用者從選取的服務開啟資料」原則設定為僅限 OneDrive
- 導航到應用程序中可以從 OneDrive 打開數據的部分。
- 嘗試使用登入應用程式儲存空間的相同託管帳戶從 OneDrive 開啟文件。
- 確認允許開啟。
- 如果您的應用程式允許,請嘗試從不同的雲端儲存位置開啟另一個檔案並確認其已被封鎖。
開啟來源、封鎖 「在組織文件中開啟資料」原則設定為 封鎖 - 導航到應用程序中可以從 OneDrive 打開數據的部分。
- 嘗試使用登入應用程式儲存空間的相同託管帳戶從 OneDrive 開啟文件。
- 確認開啟已封鎖。
- 如果您的應用程式允許,請嘗試從不同的雲端儲存位置開啟另一個檔案並確認其已被封鎖。

驗證通知限制

如果您沒有實作限制 通知內內容的原則,請略過本節。

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

  1. 不包含任何帳戶資料的通知。
  2. 包含屬於受管理帳戶之資料的通知。
  3. 包含屬於未受管理帳戶之資料的通知。

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

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

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

案例 先決條件 步驟
已封鎖完整內容 「組織資料通知」原則設定為 封鎖 - 觸發您的應用程式以觸發沒有帳戶資料的通知。
- 確認通知未顯示任何內容。
- 觸發您的應用程式以觸發包含受管理帳戶資料的通知。
- 確認通知未顯示任何內容。
- 觸發您的應用程式以觸發包含未受管理帳戶資料的通知。
- 確認通知未顯示任何內容。
部分內容遭到封鎖 「組織資料通知」原則設定為 封鎖組織資料 - 觸發您的應用程式以觸發沒有帳戶資料的通知。
- 確認通知顯示其全部內容。
- 觸發您的應用程式以觸發包含受管理帳戶資料的通知。
- 確認通知會修訂受管理帳戶的內容。
- 觸發您的應用程式以觸發包含未受管理帳戶資料的通知。
- 確認通知顯示其全部內容。
沒有封鎖任何內容 「組織資料通知」原則設定為 允許 - 觸發您的應用程式以觸發沒有帳戶資料的通知。
- 確認通知顯示其全部內容。
- 觸發您的應用程式以觸發包含受管理帳戶資料的通知。
- 確認通知顯示其全部內容。
- 觸發您的應用程式以觸發包含未受管理帳戶資料的通知。
- 確認通知顯示其全部內容。

驗證資料備份與還原

如果您未實作 保護備份資料的原則,請略過本節。

重新熟悉您的應用程式設定備份 (檔案內容和鍵值組) 。 您應該驗證只有預期的內容是還原的一部分。 還原中的額外內容可能導致資料外洩。

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

按照 Android 的官方說明測試備份。 這些指示針對自動備份和索引鍵/值備份而有所不同,因此請嚴格按照這些指示進行。

根據原則驗證自訂螢幕擷取畫面

如果您沒有實作 Custom Screen Capture Restrictions,請略過本節。

如果您的應用程式具有略過 Android 的 Window-level FLAG_SECURE的功能,請驗證此功能是否受到應用程式保護原則螢幕擷取限制封鎖。

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

案例 先決條件 步驟
螢幕擷取已封鎖 「螢幕擷取和 Google 助理」原則設定為 封鎖 - 導航到使用自訂 FLAG_SECURE 程式碼的應用程式部分。
- 嘗試使用該功能。
- 確認功能已封鎖。
允許擷取螢幕畫面 [螢幕擷取和 Google 助理] 原則設定為 允許 - 導航到使用自訂 FLAG_SECURE 程式碼的應用程式部分。
- 嘗試使用該功能。
- 確認功能已獲允許。

驗證應用程式保護 CA

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

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

測試步驟:

  1. 開始此測試之前,請先解除安裝 Microsoft Authenticator 和 Intune 公司入口網站。
  2. 安裝您的應用程式。
  3. 使用以應用程式保護原則和應用程式為基礎的 CA 原則所針對的測試帳戶登入您的應用程式。
  4. 確認您的應用程式會提示您安裝公司入口網站。
  5. 重新登入。
  6. 確認您的應用程式會提示您註冊裝置。 依照提示操作。 如果您的應用程式不會提示您在這裡註冊,請先確認您的測試裝置已移除其他啟用 SDK 的應用程式、公司入口網站和驗證器。 如果仍然沒有提示,請重新瀏覽實作指示。
  7. 確認您可以在註冊後存取所有應用程式資料。

驗證通知接收器

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

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

MAM_ENROLLMENT_RESULT 可以透過使用應用程式保護原則目標的帳戶登入應用程式來觸發。

您可以觸發 REFRESH_APP_CONFIGREFRESH_POLICY 更新以測試帳戶為目標的個別應用程式組態原則和應用程式保護原則,然後等候 SDK 收到更新的原則。

提示

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

您可以從 Microsoft Intune 發行選擇性抹除,以觸發 MANAGEMENT_REMOVEDWIPE_USER_DATAWIPE_USER_AUXILIARY_DATA、 和WIPE_COMPLETED通知。

驗證自訂佈景主題

如果您沒有實作 自訂主題,請略過本節。

您可以檢查 SDK 對話方塊上的色彩,以驗證自訂佈景主題支援。 最簡單的檢查對話方塊是 MAM PIN 畫面。

先決條件:

  • 將受控帳戶的原則設定為:
    • 「存取 PIN」設定為「必要」。
  • 安裝您的應用程式和 Intune 公司入口網站。

測試步驟:

  1. 啟動您的應用程式並使用測試帳戶登入。
  2. 確認 MAM PIN 畫面出現,且其主題是根據您提供給 SDK 的自訂主題。

後續步驟

如果您依序遵循本指南,並完成本文稍早的所有結束準則,您的應用程式現在已與 Intune App SDK 完全整合,並可以強制執行應用程式防護原則。 如果您略過了之前的應用程式參與章節「第 5 階段:多重身分識別」和「第 6 階段:應用程式組態」,而且您不確定您的應用程式是否應該支援這些功能,請重新查看 SDK 整合的關鍵決策

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