適用於 Android 的 Intune App SDK - MAM 整合基本資訊

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

注意事項

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

第 4 階段:MAM 整合基礎

階段目標

  • 啟用 MAM 嚴格模式。
  • 註冊來自 SDK 的重要通知。
  • 實作並註冊驗證回呼,以提供從 MSAL 到 SDK 的 Microsoft Entra 權杖。
  • 向 MSAL 驗證之後,註冊新帳戶以進行 MAM 管理。
  • 登出時取消註冊帳戶以移除公司資料。
  • (建議) 將 MAM 記錄納入您的應用程式。
  • (建議) 了解如何使用 [SDK 診斷] 對話方塊。

Background

現在您已下載 Intune App SDK、整合至組建,並成功執行類別和方法取代,是時候進行必要的程式碼變更,以開始對受 MAM 保護的帳戶強制執行應用程式保護原則設定。

此階段會指示您如何連結至 SDK 的記錄、叫用診斷對話方塊、啟用 MAM 嚴格模式以識別可能的整合錯誤、註冊來自 SDK 的通知,以及最重要的是,如何註冊 Intune MAM 帳戶以開始接收原則。

MAM 嚴格模式

MAM 嚴格模式可以識別應用程式整合 Intune App SDK 中的潛在錯誤。 這些整合錯誤可能會導致無法正確套用應用程式防護原則,並讓公司資料未受到保護。 因此 ,必須使用 MAM 嚴格模式。

MAM 嚴格模式會尋找應用程式使用 MAM API 和受 MAM 限制的平台 API 時的異常。 MAM 嚴格模式遵循 Android 的 StrictMode 鬆散模式,會執行一組預先定義的檢查,當失敗時會引發執行階段錯誤。 MAM 嚴格模式不打算在生產環境組建中保持啟用狀態;請改為在應用程式的內部開發、偵錯和/或搶先測試版組建中使用它。

若要啟用 MAM 嚴格模式,請在應用程式初始化 (早期呼叫下列方法,例如 Application.onCreate) :

MAMStrictMode.enable();

當 MAM 嚴格模式檢查失敗時,請嘗試判斷它是可以在應用程式中修正的真實問題,還是誤報。 如果您認為這是誤判或不確定,請告知 Intune MAM 小組。 這將使我們能夠確保我們同意誤判判定,並嘗試改進未來版本的偵測功能。 若要隱藏誤判,請遵循下列指示停用檢查失敗。

處理違規

檢查失敗時,它會執行 MAMStrictViolationHandler。 預設處理常式會 Error擲回 ,預期會使應用程式當機。 這是為了讓失敗盡可能雜訊,而且符合不應在生產環境組建中啟用嚴格模式的意圖。

如果您的應用程式想要以不同的方式處理違規,它可以呼叫下列方法handler來提供自己的處理常式,其中實作:MAMStrictViolationHandler

MAMStrictMode.global().setHandler(handler);

隱藏檢查

如果您的應用程式沒有任何不正確動作,檢查失敗,請如上述所述回報。 同時,至少在等候更新的 SDK 時,可能需要停用遇到誤判的檢查。 失敗的檢查會顯示在預設處理常式引發的錯誤中,或者如果已設定,則會傳遞給自訂處理常式。

雖然可以全域完成抑制,但最好在特定呼叫站台暫時停用每個執行緒。 下列範例顯示各種停用MAMStrictCheck.IDENTITY_NO_SUCH_FILE的方法,如果嘗試保護檔案不存在) ,則會引發 (

Per-Thread 暫時隱藏

這是慣用的隱藏機制。

try (StrictScopedDisable disable = MAMStrictMode.thread().disableScoped(MAMStrictCheck.IDENTITY_NO_SUCH_FILE)) {
    // Perform the operation which raised a violation here
}
// The check is no longer disabled once the block exits

Per-Thread 永久抑制

MAMStrictMode.thread().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

全域 (程序範圍的) 抑制

MAMStrictMode.global().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

註冊從 SDK 接收通知

Intune App SDK 會發出許多不同類型的通知,以通知應用程式具時效性的管理作業。 您的應用程式可以註冊收到任何這些通知,並在收到通知時採取行動。

例如,每當 IT 系統管理員對裝置發出選擇性抹除命令時,Intune 服務就會傳送通知至 SDK,該通知會以 的方式傳遞WIPE_USER_DATA至您的應用程式。 您的應用程式可以接聽此通知並控制擦除哪些資料;也可以依賴 SDK 的預設抹除行為。

許多通知都是選用的。 視應用程式使用的 SDK 功能而定,可能需要一些通知。 如需如何註冊通知、SDK 傳遞的通知以及如何處理特定通知類型的詳細資訊,請參閱在第 7 階段:應用程式參與功能註冊來自 SDK 的通知

註冊應用程式防護原則

當系統管理員建立應用程式防護原則時,他們會將這些原則以組織中的特定帳戶為目標。 在用戶端上,SDK 必須知道哪個帳戶正在使用該應用程式,才能擷取該帳戶的原則並適當地強制執行設定。 您的應用程式負責向 SDK 提供此帳戶資訊。 此過程稱為註冊。

每當您的應用程式新增帳戶時,它都必須向 SDK 註冊帳戶,即使已有其他帳戶註冊也一樣。 您的應用程式可以註冊多個帳戶。 不過,目前只能註冊一個帳戶,或套用應用程式防護原則。 在 Android 上,此單一託管帳戶限制適用於整個裝置。

註冊與註冊

註冊 是應用程式通知 SDK 新帳戶正在使用的流程。 SDK 包含您的應用程式註冊和取消註冊帳戶時必須呼叫的函式。

註冊是 SDK 使用 Intune 服務記錄已註冊帳戶的流程,以便套用帳戶的原則。 您的應用程式不需要呼叫任何函式來註冊。 註冊帳戶之後,SDK 會完全處理註冊。

如果有一個帳戶已為您的應用程式註冊,當它註冊另一個帳戶時,即使該帳戶以應用程式防護原則為目標,也不會註冊第二個帳戶,也不會套用原則。

注意事項

「註冊」一詞也可以指全裝置的 MDM 註冊。如需詳細資訊,請參閱附錄中的 MDM 和 MAM 註冊

實作註冊

注意

如果您的應用程式未整合 MSAL (強烈建議的) ,請參閱附錄中的預設註冊,而非繼續閱讀本節。

您的應用程式必須變更三個程式碼才能成功註冊帳戶:

  1. 應用程式 必須 實作並註冊 MAMServiceAuthenticationCallbackMAMServiceAuthenticationCallbackExtended 介面的執行個體。 回呼執行個體必須在 Application 子類別的 (或 onMAMCreate()) 方法中onCreate()登錄。

  2. 建立帳戶且使用者成功登入 MSAL 時,應用程式 必須 呼叫 registerAccountForMAM

  3. 移除帳戶時,應用程式應該呼叫 unregisterAccountForMAM 以從 Intune 管理中移除帳戶。

    注意

    呼叫可能會起始抹除,以完全移除帳戶的公司資料。

您可以在 MAMEnrollmentManager 介面中找到所有必要的驗證和註冊 API。 可以如下方式取得 的 MAMEnrollmentManager 參考:

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

// make use of mgr

MAMEnrollmentManager傳回的執行個體保證不會為 null。 API 方法分為兩類: 身份驗證帳戶註冊

MAMEnrollmentManager 和驗證

SDK 會經常與 Intune 服務通訊:註冊已註冊的帳戶、取得應用程式保護原則設定的更新,以及取得擱置中的系統管理員動作,例如選擇性地抹除應用程式內受保護的資料。 若要順利與 Intune 服務通訊,SDK 需要來自已整合 MSAL 之應用程式的新存取權杖。

如果 SDK 無法擷取新的權杖,它將無法與 Intune 服務通訊,這可能會延遲擷取和強制執行新的原則設定或系統管理員動作。 您的應用程式必須完成這些步驟,以確保順暢地執行原則。

在階段 2 中,您將 MSAL 整合到應用程式中,以進行驗證和取得存取權杖。 在這裡,您實作驗證回呼,以允許 SDK 要求必要的權杖。

MAMEnrollmentManager 具有下列驗證方法:

interface MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String resourceId);
}
interface MAMServiceAuthenticationCallbackExtended extends MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String tenantId, String authority, String resourceId);
}
void registerAuthenticationCallback(MAMServiceAuthenticationCallback callback);
void updateToken(String upn, String aadId, String resourceId, String token);

注意事項

aadId這些方法中的參數是指 Microsoft Entra 使用者識別碼,先前稱為 AAD 識別碼,也稱為 OID。

  1. 應用程式必須實作 MAMServiceAuthenticationCallback 介面或 MAMServiceAuthenticationCallbackExtended 介面,以允許 SDK 針對指定的帳戶和資源識別碼要求 Microsoft Entra 權杖。 必須呼叫其 registerAuthenticationCallback 方法,以提供MAMEnrollmentManager回呼執行個體。 在應用程式生命週期的早期,可能需要進行註冊重試或應用程式保護原則重新整理簽入的權杖,因此必須在應用程式子Application類別的 (或 onMAMCreate()) 方法中onCreate()註冊回呼。

  2. 方法 acquireToken 應該會取得指定帳戶之要求資源識別碼的存取權杖。 如果無法取得要求的權杖,它應該傳回 null。

    提示

    請確定您的應用程式使用傳遞至 acquireToken()resourceIdaadId參數,以便取得正確的權杖。 此 upn 參數僅供參考;在未考慮 aadId. 應該使用 來 resourceId 產生適當的範圍,而 應該 aadId 用來傳遞正確的帳戶。 如果為錯誤的帳戶和/或錯誤資源傳回權杖,可能會導致註冊應用程式和擷取原則時發生延遲或失敗。 如果您的應用程式需要 Microsoft Entra 授權單位才能正確取得權杖,請實作介面MAMServiceAuthenticationCallbackExtended

    class MAMAuthCallback implements MAMServiceAuthenticationCallbackExtended {
        public String acquireToken(String upn, String aadId,
                    String tenantId, String authority, String resourceId) {
            final String[] scopes = {resourceId + "/.default"};
    
            final IAccount account = getAccount(aadId);
            if (account == null) {
                // Log error or warning here about: "no account found for " + aadId
                return null;
            }
    
            AcquireTokenSilentParameters params =
                new AcquireTokenSilentParameters.Builder()
                        .forAccount(account)
                        .fromAuthority(account.getAuthority())
                        .withScopes(Arrays.asList(scopes))
                        .withCallback(callback)
                        .build();
    
            return mMsalClientApplication.acquireTokenSilent(params);
        }
    
        private static IAccount getAccount(String aadId) throws InterruptedException, MsalException {
          IAccount account = null;
    
          if (mMsalClientApplication instanceof IMultipleAccountPublicClientApplication) {
              IMultipleAccountPublicClientApplication multiAccountPCA =
                      (IMultipleAccountPublicClientApplication) mMsalClientApplication;
    
              account = multiAccountPCA.getAccount(aadId);
          } else {
              ISingleAccountPublicClientApplication singleAccountPCA =
                      (ISingleAccountPublicClientApplication) mMsalClientApplication;
    
              ICurrentAccountResult accountResult = singleAccountPCA.getCurrentAccount();
              if (accountResult != null) {
                  account = accountResult.getCurrentAccount();
                  // make sure this is the correct user
                  if (account != null && !account.getId().equals(aadId))
                      account = null;
              }
          }
          return account;
      }
    }
    
  3. 如果應用程式在 SDK 呼叫 acquireToken() 時無法提供權杖,例如,如果無訊息驗證失敗,且現在是顯示 UI 的不便時間,則應用程式稍後可以呼叫 updateToken 方法來提供權杖。 必須將先前呼叫acquireToken()要求的相同 UPN、Microsoft Entra ID 和資源識別碼連同最後取得的權杖一起傳遞至 updateToken()。 此 upn 參數僅供參考,MAM SDK 通常會忽略此參數。 應用程式應該在從提供的回呼傳回 null 之後儘快呼叫此方法。

    警告

    請勿從 的acquireToken()實作內部呼叫 updateToken()updateToken() 應該在無法取得權杖的情況下 acquireToken() 使用。

    注意事項

    SDK 會定期呼叫 acquireToken() 以取得權杖,因此不一定要呼叫 updateToken() 。 不過,強烈建議您這樣做,因為它可協助註冊和應用程式防護原則簽入及時完成。

驗證實作說明

  • 鼓勵應用程式在呼叫 registerAccountForMAM之前取得 Microsoft Entra 權杖。 註冊帳戶後,應用程式將在不同的執行緒上收到對已註冊MAMServiceAuthenticationCallbackacquireToken()方法的回呼。 在該回呼中提供有效的權杖,即可繼續註冊。 應用程式會透過通知取得註冊結果。

  • 如果應用程式未傳回有效的 Microsoft Entra 權杖,則註冊嘗試的最終結果將會是 AUTHORIZATION_NEEDED。 如果應用程式透過通知收到此結果,建議透過取得先前向 acquireToken 要求之帳戶和資源的權杖,並呼叫 updateToken 方法以再次起始註冊程序,以加快註冊程序。

  • 系統也會呼叫已註冊 MAMServiceAuthenticationCallback 應用程式,以取得定期應用程式保護原則重新整理簽入的權杖。如果應用程式無法在要求時提供權杖,它將不會收到通知,但它應該嘗試取得權杖並在下一個方便的時間進行呼叫 updateToken() ,以加快簽入流程。 如果未提供權杖,則可能仍會在下一次簽入嘗試時呼叫回呼。

  • 主權雲端的支援需要提供授權。

  • 如果實作了接口,則MAMServiceAuthenticationCallbackExtended不需要實作繼承自acquireToken()MAMServiceAuthenticationCallback的方法,因為MAMServiceAuthenticationCallbackExtended該接口提供了默認的實作。

MAMEnrollmentManager and Registration

每當應用程式新增帳戶時,都必須向 SDK 註冊帳戶。 同樣地,每當應用程式移除帳戶時,它應該取消註冊該帳戶,以指出該應用程式不應再為該帳戶套用原則。 如果帳戶已在 MAM 服務中註冊,則會取消註冊該帳戶,並抹除應用程式。

MAMEnrollmentManager 的帳戶註冊方法如下:

void registerAccountForMAM(String upn, String aadId, String tenantId);
void registerAccountForMAM(String upn, String aadId, String tenantId, String authority);
void unregisterAccountForMAM(String upn, String aadId);
Result getRegisteredAccountStatus(String upn, String aadId);
  1. 若要註冊帳戶進行管理,應用程式應呼叫 registerAccountForMAM()。 帳戶會由其 UPN 和 Microsoft Entra 使用者識別碼加以識別。 租用戶識別碼也是必要將註冊資料與帳戶的 Microsoft Entra 租用戶建立關聯。 帳戶的授權也可以提供,以允許針對特定主權雲端進行註冊;如需詳細資訊,請參閱 Sovereign Cloud 註冊。 SDK 可能會嘗試在 MAM 服務中為指定帳戶註冊應用程式;如果註冊失敗,它會定期重試註冊,直到註冊成功或帳戶取消註冊為止。 重試期間通常是 12-24 小時。 SDK 會透過通知以非同步方式提供註冊嘗試的狀態。

  2. 最佳通話 registerAccountForMAM 時間是使用者登入應用程式並使用 MSAL 成功驗證之後。 帳戶的 Microsoft Entra 使用者識別碼、租用戶識別碼和授權會從 MSAL 驗證呼叫傳回,做為IAccountIAuthenticationResult.

    • 帳戶來自方法 IAuthenticationResult.getAccount() ,並包含相關的帳戶資訊。
    • AAD 識別碼 (也稱為 Microsoft Entra ID 或 OID) 來自該IAccount.getId()方法。
    • 租用戶識別碼來自 IAccount.getTenantId() 方法。
    • 權威來自 IAccount.getAuthority() 方法。
  3. 若要從 Intune 管理取消註冊帳戶,應用程式應該呼叫 unregisterAccountForMAM()。 如果帳戶已成功註冊並受到管理,SDK 會取消註冊該帳戶並抹除其資料。 將會停止定期重試帳戶。 SDK 會透過通知以非同步方式提供取消註冊要求的狀態。

註冊實作說明

  • 註冊方法是冪等的。 例如, registerAccountForMAM 將僅在帳戶尚未註冊時註冊帳戶並嘗試註冊應用程式,而 unregisterAccountForMAM 將僅在帳戶目前註冊時取消註冊帳戶。 後續呼叫是無作業的,因此多次呼叫這些方法並沒有什麼壞處。

  • 無法保證每個註冊/取消註冊呼叫都有對應的結果通知。 例如,如果針對已註冊的帳戶呼叫 ,則 registerAccountForMAM() 可能不會再次傳送該身分識別的通知。 或者,即使您的應用程式未呼叫這些方法,SDK 也可能會傳送通知,因為 SDK 可能會定期在背景嘗試註冊,而且取消註冊可能會由從 Intune 服務收到的抹除要求所觸發。

  • 您可以為任意數量的不同帳戶呼叫註冊方法,但目前只能有一個帳戶成功註冊。 如果多個已取得 Intune 授權且以應用程式保護原則為目標的帳戶同時註冊或接近同時註冊,則無法保證哪一個會贏得競爭。

  • 您可以查詢 MAMEnrollmentManager 來查看是否已註冊特定帳戶,並使用 getRegisteredAccountStatus 方法取得其目前狀態。 如果提供的帳戶未註冊,此方法會傳回 null。 如果帳戶已註冊,這個方法會傳回帳戶的狀態為 MAMEnrollmentManager.Result 列舉的其中一個成員。

Sovereign Cloud 註冊

Azure 支援多個實體隔離雲端,稱為主權雲端或國家雲端。 如果您的應用程式具有 主權雲端感知能力,則 必須 將參數提供 authorityregisterAccountForMAM()

MSAL 指引

若是 MSAL,請在 MSAL 設定檔中設定multiple_clouds_supportedtrue

{
  "multiple_clouds_supported": true,
}

註冊結果和狀態碼

帳戶首次註冊時,會以狀態 PENDING 開始,表示初始 MAM 服務註冊嘗試未完成。 註冊嘗試完成之後,將發送包含下表中其中一個結果代碼的通知。 此外, getRegisteredAccountStatus 方法會傳回帳戶的狀態,讓應用程式一律判斷該帳戶是否已強制執行應用程式保護原則。 如果註冊嘗試失敗,帳戶的狀態可能會隨著 SDK 在背景重新嘗試註冊時隨著時間變更。

結果代碼 說明
AUTHORIZATION_NEEDED 此結果表示權杖未由應用程式註冊的 MAMServiceAuthenticationCallback 實例提供,或提供的權杖無效。 應用程式應該會取得有效的權杖,如果可能的話,會呼叫 updateToken
NOT_LICENSED 帳戶未取得 Intune 授權,或嘗試連絡 Intune MAM 服務失敗。 應用程式應繼續處於未受管理 (正常) 狀態,且不應封鎖使用者。 如果帳戶將來獲得授權,系統會定期重試註冊。
ENROLLMENT_SUCCEEDED 註冊嘗試成功,或帳戶已註冊。 如果註冊成功,則會在此通知之前傳送原則重新整理通知。 應允許存取公司資料。
ENROLLMENT_FAILED 註冊嘗試失敗。 您可以在裝置記錄中找到更多詳細資料。 應用程式不應允許存取處於此狀態的公司資料,因為先前已判斷帳戶已取得 Intune 授權。 所有應用程式都應確保公司資料存取權未經授權,直到您的應用程式取得為止 ENROLLMENT_SUCCEEDED
WRONG_USER 每部裝置只能有一個帳戶向 MAM 服務註冊應用程式。 這個結果表示, (第二個帳戶) 傳遞此結果的帳戶是以 MAM 原則為目標,但已經註冊了另一個帳戶。 因為無法針對第二個帳戶強制執行 MAM 原則,所以您的應用程式不得允許存取此帳戶的資料, (可能透過從) 應用程式中移除該帳戶,除非/直到稍後註冊此帳戶成功為止。 在提供此 WRONG_USER 結果的同時,MAM 會提示使用者提供兩個補救選項: (1) 移除現有已註冊的帳戶,讓第二個帳戶可以註冊,或 (2) 移除第二個嘗試) 帳戶的 (,以便在現有帳戶保持註冊狀態時停止出現提示。 如果使用者選擇選項 (1) ,稍後就可以註冊第二個帳戶。 如果使用者選擇 2) (選項,MAM 會在本機取消註冊第二個帳戶,並 UNENROLLMENT_SUCCEEDED 透過標準註冊結果通知報告該帳戶;因為第二個帳戶從未註冊,因此不會執行選擇性抹除,也不會傳遞任何抹除通知。 MAM 也會停止重試該帳戶的註冊,因此提示不再重複出現。 只要第二個帳戶 (仍處於註冊狀態,亦即使用者尚未選擇 2) ) (選項,MAM 就會定期重新嘗試註冊。
UNENROLLMENT_SUCCEEDED 取消註冊成功。
UNENROLLMENT_FAILED 取消註冊要求失敗。 您可以在裝置記錄中找到更多詳細資料。 一般而言,只要應用程式傳遞的有效 (既不為 Null 也不為空) UPN,就不會發生此情況。 應用程式無法採取直接、可靠的補救。 如果在取消註冊有效的 UPN 時收到此值,請將錯誤報告給 Intune MAM 小組。
PENDING 帳戶的初始註冊嘗試正在進行中。 在知道註冊結果之前,應用程式可以封鎖對公司資料的存取,但您不需要這麼做。
COMPANY_PORTAL_REQUIRED 帳戶已取得 Intune 授權,但在裝置上安裝公司入口網站應用程式之前,無法註冊應用程式。 Intune 應用程式 SDK 會嘗試封鎖指定帳戶的應用程式存取權,並引導使用者安裝公司入口網站應用程式。 將此通知傳送至應用程式時,如果使用者目前可以看到活動或呼叫下一次,onResumeIntune App SDK 會在目前活動上方顯示非封鎖 UI。 如果使用者取消此非封鎖 UI,Intune App SDK 將在下次呼叫活動時onCreate顯示封鎖 UI,並管理目前身分識別 (請參閱下方以取得疑難排解) 的詳細資訊。

應儘早初始化記錄,以從記錄的資料中取得最大價值。 Application.onMAMCreate() 通常是初始化記錄的最佳位置。

若要在應用程式中接收 MAM 記錄,請建立 Java 處理常式 ,並將它新增至 MAMLogHandlerWrapper。 這會 publish() 針對每個記錄訊息叫用應用程式處理常式。

/**
 * Global log handler that enables fine grained PII filtering within MAM logs.
 * To start using this you should build your own log handler and add it via
 * MAMComponents.get(MAMLogHandlerWrapper.class).addHandler(myHandler, false);
 * You may also remove the handler entirely via
 * MAMComponents.get(MAMLogHandlerWrapper.class).removeHandler(myHandler);
 */
public interface MAMLogHandlerWrapper {
    /**
     * Add a handler, PII can be toggled.
     * @param handler handler to add.
     * @param wantsPII if PII is desired in the logs.
     */
    void addHandler(final Handler handler, final boolean wantsPII);

    /**
     * Remove a handler.
     * @param handler handler to remove.
     */
    void removeHandler(final Handler handler);
}

注意事項

PII 代表「個人識別資訊」,可能包含使用者名稱和 UPN 等資料。 強烈建議您在自己的生產記錄中排除這類個人資訊。 如需詳細資訊,請參閱 Microsoft 隱私權原則

Intune 公司入口網站應用程式有多個選項可供收集診斷資訊。 公司入口網站包含下列 UI:

  • 讓使用者能夠收集公司入口網站記錄。
  • 顯示裝置和帳戶中繼資料。
  • 包含有關目前 MAM 原則的每個應用程式資訊。

Intune 診斷 UI Intune 應用程式資訊

如需公司入口網站記錄和診斷 UI 中所含資料的詳細說明,請參閱 附錄中的瞭解公司入口網站記錄

提示

如果您使用應該已套用 MAM 原則的帳戶進行測試,但診斷並未顯示您應用程式套件名稱的任何原則,請參閱下方的 疑難排解 一節。

應用程式可以呼叫來啟動此診斷 UI。MAMPolicyManager.showDiagnostics(context) 使用者也可以在網址列中輸入about:intunehelp,透過 Microsoft Edge 啟動公司入口網站的診斷主控台。 這是可協助偵錯的選用功能。

只有在裝置上安裝公司入口網站時,才能使用此診斷資訊。 每當在未安裝公司入口網站的情況下呼叫時,會出現showDiagnostics警告對話方塊。

結束準則

在整合的這個階段,您的應用程式現在可以接收並強制執行應用程式保護原則。 執行下列測試以驗證整合。

第一個原則應用程式測試

請先執行下列測試,以熟悉應用程式中原則應用程式的完整使用者體驗:

  1. 在 Microsoft Intune 系統管理中心建立 Android 應用程式保護原則 (請參閱在階段 1 中建立測試 Android 應用程式保護原則以取得詳細資料) 。 針對此測試,請設定原則:
    • 在 [資料保護] 底下,將 [螢幕擷取畫面和 Google 助理] 設定為 [封鎖]。
    • 在 [存取需求] 底下,保留預設設定。 值得注意的是,「存取的 PIN 碼」應該是「需要」。
  2. 確定 [應用程式保護原則] 以應用程式為目標。 您可能需要在原則建立精靈中手動新增套件名稱。
  3. 將應用程式保護原則指派給包含您的測試帳戶的使用者群組。
  4. 在測試 Android 裝置上,解除安裝其他 SDK 整合應用程式,例如 Microsoft Outlook、Teams、OneDrive 和 Office。 同時解除安裝 Intune 公司入口網站應用程式和 Microsoft Authenticator 應用程式。
    • 提示

      解除安裝其他 SDK 整合應用程式有助於確保您只會測試您自己的應用程式整合。

  5. 安裝您的應用程式。
  6. 使用以應用程式保護原則為目標的測試帳戶登入您的應用程式。
  7. 確認系統提示您從 Google Play 安裝 Intune 公司入口網站。
    • 注意事項

      如果您的測試裝置沒有 Google Play 商店應用程式,請確認系統會提示您從另一個應用程式商店或 Microsoft 網站安裝 Intune 公司入口網站。

  8. 安裝公司入口網站。 您不需要啟動公司入口網站或登入公司入口網站。
  9. 如有需要,請返回應用程式並重新登入。
  10. 確認系統會顯示 [取得存取] 畫面。 這表示 SDK 已成功擷取此帳戶的原則。
  11. 系統應該會提示您設定應用程式 PIN。 建立 PIN。
  12. 瀏覽您的應用程式並嘗試擷取螢幕擷取畫面。 鑑於 SDK 有策略,這應該在任何屏幕上一致阻止。
  13. 將受管帳戶登出應用程式。
  14. 如果可能而不登入,請瀏覽應用程式並嘗試截取螢幕擷取畫面。 現在帳戶已移除,不應封鎖此帳戶。

這是最 基本 的測試,可確認您的應用程式已正確註冊帳戶、已註冊驗證回呼,以及取消註冊帳戶。 執行下列測試,以更徹底地驗證其他應用程式保護原則設定如何修改應用程式的行為。

資料保護測試

下列測試涵蓋在應用程式保護原則中設定的特定資料保護設定。 當您在 Microsoft Intune 系統管理中心變更應用程式保護原則設定時,用戶端不會立即更新。 如需加快測試速度的秘訣,請參閱 變更原則時快速測試

針對這些測試:

  1. 安裝您的應用程式。
  2. 安裝 Intune 公司入口網站。
  3. 安裝另一個以與您的應用程式相同的原則為目標的受管理應用程式,其可以複製並貼上資料 (,例如 Microsoft Office) 。
  4. 安裝 (或重複使用) 任何可以複製並貼上資料的未受管理應用程式。
  5. 使用測試託管帳戶登入您的應用程式。
  6. 使用受管理的測試帳戶登入其他受管理的應用程式。
案例 應用程式保護原則設定 測試步驟
[螢幕擷取畫面] [螢幕擷取畫面和 Google 助理] 設定為 [封鎖] 1. 瀏覽至應用程式中的所有頁面。
2. 嘗試在每一頁上截取螢幕擷取畫面。
3. 確認螢幕截圖被封鎖或儲存的影像完全空白。
複製文字 「限制在其他應用程式之間剪下、複製和貼上」設定為「原則管理的應用程式」 0. 如果您的應用程式沒有任何要複製的文字,請略過。
1. 瀏覽至應用程式中具有可複製文字的所有頁面。
2. 複製文字。
3. 切換到未受管理的應用程式。
4. 嘗試在未受管理的應用程式中貼上。
5. 確認貼上已封鎖。
6. 瀏覽至其他託管應用程式。
7. 嘗試在託管應用程式中貼上。
8. 確認允許貼上。
貼上文字 「限制在其他應用程式之間剪下、複製和貼上」設定為「原則管理的應用程式」 0. 如果您的應用程式沒有任何要貼上的文字輸入,請略過。
1. 切換到未受管理的應用程式。
2. 從未受管理的應用程式複製文字。
3. 瀏覽至應用程式中所有具有文字輸入的頁面。
5. 嘗試從未受管理的應用程式貼上。
5. 確認貼上已封鎖。
6. 切換到另一個託管應用程式。
7. 從其他託管應用程式複製文字。
7. 瀏覽至應用程式中所有具有文字輸入的頁面。
8. 嘗試從其他託管應用程式貼上。
9. 確認允許貼上。
列印 「列印組織資料」設定為「封鎖」 0. 如果您的應用程式沒有任何可以列印的頁面或文件,請略過。
1. 瀏覽至應用程式中會叫用 Android 列印功能的所有頁面。
2. 嘗試從每一頁開始列印。
3. 確認列印已遭到封鎖。
Microsoft Edge Web 內容限制 「限制與其他應用程式傳輸網頁內容」設定為「Microsoft Edge」 0. 如果您的應用程式未呈現網頁連結,請略過。
1. 導航到應用程序中可以顯示網絡鏈接或具有轉譯為可點擊網絡鏈接的文本輸入的所有頁面。
2. 針對每個頁面,選取網頁連結。
3. 確認系統提示您安裝 Microsoft Edge,且網頁連結不會在其他瀏覽器中開啟。
受限制的鍵盤 [已核准的鍵盤] 設定為 [必要]
[選取要核准的鍵盤] 設定為您的裝置目前尚未安裝的鍵盤套件
0. 如果您的應用程式沒有任何文字輸入,請略過。
1. 瀏覽至應用程式中所有具有文字輸入的頁面。
2. 選取文字輸入以顯示裝置鍵盤。
3. 確認系統提示您安裝已設定的核准鍵盤,且目前裝置鍵盤並未開啟。

資料傳輸測試

資料傳輸設定是應用程式保護原則資料保護功能的子集,可控制資料進出受管理應用程式。 大部分支援傳送資料給其他 App 或其他 App 接收資料的 App 也能夠將資料儲存到本機或雲端儲存空間或開啟其中的資料。 如果您的應用程式具備這些功能,就必須實作其他支援。 如需詳細資訊 ,請參閱限制應用程式與裝置或雲端儲存位置之間資料傳輸的原則

您的應用程式可能會主動從其他應用程式匯入資料,例如 Microsoft Outlook 從 OneDrive 附加檔案Microsoft。 您的應用程式也可能會被動地接收來自其他應用程式的資料,例如 Microsoft Office 從 Microsoft Outlook 附件開啟文件。 [從其他應用程式接收資料] 原則設定涵蓋這兩個案例。

針對這些測試:

  1. 安裝您的應用程式。
  2. 安裝 Intune 公司入口網站。
  3. 安裝另一個受管理的應用程式,其目標與應用程式相同的原則,可以傳送和接收資料 (,例如 Outlook) Microsoft。
  4. 安裝 (或重複使用) 任何可以傳送和接收資料的未受管理應用程式。
  5. 使用測試託管帳戶登入您的應用程式。
  6. 使用受管理的測試帳戶登入其他受管理的應用程式。
案例 應用程式保護原則設定 測試步驟
傳送資料至其他應用程式 「將組織資料傳送至其他應用程式」設定為「原則受管理的應用程式」 0. 如果您的應用程式無法傳送資料給其他應用程式,請略過。
1. 瀏覽至您的應用程式可以傳送資料的位置。
2. 嘗試傳送資料。
3. 確認您僅能傳送資料給其他託管應用程式。 您應該會看到一個只有託管應用程式的應用程式選擇器。
從其他應用程式匯入資料 [從其他應用程式接收資料] 設定為 [原則受管理的應用程式] 0. 如果您的應用程式無法從其他應用程式匯入資料,請略過。
1. 瀏覽至您的應用程式可以從其他應用程式匯入資料的位置。
2. 嘗試匯入資料。
3. 確認您只能從其他託管應用程式匯入資料。 您應該會看到一個只有託管應用程式的應用程式選擇器。
從未受管理的應用程式接收資料 [從其他應用程式接收資料] 設定為 [原則受管理的應用程式] 0. 如果您的應用程式無法接收來自其他應用程式的資料,請略過。
1. 切換到未受管理的應用程式。
2. 瀏覽至可以傳送資料的位置。
3. 嘗試將資料從未受管理的應用程式傳送至您的應用程式。
4. 確認您的應用程式無法從未受管理的應用程式接收資料。
從受管理應用程式接收資料 [從其他應用程式接收資料] 設定為 [原則受管理的應用程式] 0. 如果您的應用程式無法接收來自其他應用程式的資料,請略過。
1. 切換到其他託管應用程式。
2. 瀏覽至可以傳送資料的位置。
3. 嘗試將資料從其他託管應用程式傳送至您的應用程式。
4. 確認您的應用程式能夠從其他託管應用程式接收資料。

其他資料保護設定

在您的應用程式進行其他變更之前,將不會強制執行下列資料保護設定。 您不需要在這個階段測試這些設定。 如需詳細資訊,請參閱 階段 7:應用程式參與功能

案例 應用程式保護原則設定 如果出現以下情況,必須實施支援...
儲存資料複本 儲存組織資料複本 您的應用程式可以將資料儲存到本機或雲端儲存。
從儲存空間開啟資料 將資料開啟至組織文件 您的應用程式可以從本機或雲端儲存開啟資料。
受管理的通知內容 組織資料通知 您的應用程式在通知中包含使用者資料。
備份與還原 將組織資料備份到 Android 備份服務 您的應用程式會與 Android 的備份功能共用使用者資料。

有條件的啟動測試

條件式啟動設定是應用程式保護原則功能的子集,可根據可設定的全裝置或應用程式特定準則來限制存取您的應用程式。 這些設定包括 (條件,例如「最低作業系統版本」) 以及 (動作,例如「封鎖存取」) 。 條件啟動動作可以是:

  • 警告:當使用者的裝置或應用程式不符合準則時,會看到警告對話方塊。 他們仍將可以存取所有應用程式資料。
  • 封鎖存取:當使用者的裝置或應用程式不符合準則時,會看到警告對話方塊。 在符合條件或從應用程式中移除受管理帳戶之前,他們將無法進入應用程式和存取應用程式資料。
  • 抹除資料:當裝置或應用程式不符合準則時,將會抹除與受管理帳戶相關聯的所有公司資料。 在移除資料之前,使用者將沒有機會符合準則。

某些條件式啟動設定可以使用多個值和動作來設定。 例如:

  • 最低作業系統版本,值為 “10.0”,動作設定為 「警告」。
  • 最低作業系統版本,值為 “9.0”,動作設定為「封鎖存取」
  • 最低作業系統版本,值為 “8.0”,動作設定為 「抹除資料」。

完成此階段的整合步驟後,您的應用程式現在支援 所有條件式啟動功能。 變更原則項目以熟悉條件式啟動功能,讓您的測試裝置:

  • 通過所有已設定的條件式啟動設定。
  • 設定為 [警告] 動作的條件啟動設定失敗。
  • 設定為「封鎖存取」動作的條件式啟動設定失敗。
  • 設定為 [抹除資料] 動作的條件啟動設定失敗。

疑難排解

第一個原則應用程式測試疑難排解

遵循上述 第一個原則應用程式測試 步驟之後,您可能會遇到下列非預期的行為:

使用受管帳戶登入後,系統未提示我安裝公司入口網站 (步驟 7)

首先,請瀏覽 Intune 系統管理中心,並仔細檢查 [應用程式保護原則] 是否以您的測試帳戶為目標。

其次,仔細檢查源代碼是否調用 registerAccountForMAM 和實現 MAMServiceAuthenticationCallback。 如果前者未在正確的時間呼叫和/或後者未正確提供有效的權杖,您將不會看到公司入口網站提示。

最後,請查看註冊結果碼的記錄 (或偵錯) ,或明確呼叫 getRegisteredAccountStatus 帳戶。 NOT_LICENSED 等代碼可能表示測試帳戶的設定問題。

(步驟 10) 登入後,沒有看到 [取得存取] 畫面

如果先前未安裝公司入口網站,您可能需要繼續或完全重新啟動應用程式,才能看到 [取得存取權] 畫面,並正確強制執行原則。 這是根據 SDK 整合應用程式如何在公司入口網站應用程式中利用程式碼所預期的結果。

如果您在重新啟動應用程式並再次登入之後,仍未看到 [取得存取權] 畫面,則 SDK 可能無法註冊帳戶或擷取帳戶的原則。 仔細檢查原始程式碼的實作 MAMServiceAuthenticationCallback

我 (步驟 11 登入後,沒有看到設定或輸入應用程式 PIN 的畫面)

您的測試裝置上是否有其他 SDK 整合應用程式? 應用程式 PIN 碼會在所有受管理應用程式之間共用,且 SDK 具有全域計時器,可防止使用者在每次受管理應用程式啟動或繼續時收到輸入 PIN 的提示。

否則,請造訪 Intune 系統管理中心,並仔細檢查應用程式保護原則是否已啟用應用程式 PIN,且以測試帳戶為目標。

如果上述方法皆無效,重新啟動裝置將會重設 PIN 計時器。 如果重新開機裝置後未顯示 PIN 畫面,很可能未在原則中正確設定。

我確實看到 [取得存取權] 畫面,但步驟 12 (仍然允許螢幕擷取畫面)

擷取原則時,套用錯誤的原則。 首先,請瀏覽 Intune 系統管理中心,並仔細檢查 [應用程式保護原則] 是否停用螢幕擷取畫面,且以測試帳戶為目標。 其次,使用上述 (的診斷主控台) 檢查已為應用程式提取的原則。 如果兩個原則都確認應該封鎖螢幕擷取畫面,請檢查您的 Gradle 組建外掛程式設定,以確保正在進行 MAM 取代。

我的應用程式在 (步驟 13) 登出之後發生當機或關閉

當您取消註冊先前已註冊且已強制執行原則的帳戶時,SDK 將會抹除與該帳戶相關聯的資料。 預期會終止應用程式處理程序。

螢幕擷取畫面仍會遭到封鎖,即使我已登出 (步驟 14)

請仔細檢查您的原始碼是否會呼叫 unregisterAccountForMAM()。 如果登出後仍強制執行原則,可能是帳戶未正確地取消註冊和取消註冊。

資料保護測試疑難排解

在執行上述 資料保護測試 步驟之後,您可能會遇到下列非預期行為:

我的應用程式未收到或未強制執行任何原則

首先,確認應用程式保護原則是以包含您的測試帳戶為目標群組。 如需詳細資訊,請參閱如何在 Microsoft Intune 中驗證您的應用程式保護原則設定

其次,檢查用戶端 診斷資訊 ,以確認 SDK 已收到設定的原則。 如果沒有,請檢查應用程式實作 MAMServiceAuthenticationCallback 和呼叫 registerAccountForMAM。 也請檢查記錄或偵錯以驗證 MAMEnrollmentManager.Result

我的應用程式可以與未受管理的應用程式共用資料

確認 [將組織資料傳送至其他應用程式] 設定為 [原則管理的應用程式]。 檢查 Microsoft Intune 系統管理中心,以確認原則已正確設定和設定目標。 檢查用戶端 診斷資訊 ,以確認 SDK 已收到設定的原則。

接下來,如果正確設定和擷取原則,請檢查是否正在強制執行 任何 原則: 我的應用程式未收到或強制執行任何原則

我的應用程式無法與其他受管理的應用程式共用資料

確認同時針對您的應用程式 和其他受管理應用程式的 [應用程式保護原則] 設定。 建議讓相同的原則針對這兩個應用程式。 針對您的應用程式的原則應該將 [傳送組織資料至其他應用程式] 設定為 [原則管理的應用程式]。 檢查以其他應用程式為目標的原則;如果其將 [從其他應用程式接收資料] 設定為 [無],則這是預期的行為。

我的應用程式可以從未受管理的應用程式接收資料

確認 [從其他應用程式接收資料] 設定為 [原則受管理的應用程式]。 檢查 Microsoft Intune 系統管理中心,以確認原則已正確設定和設定目標。 檢查用戶端 診斷資訊 ,以確認 SDK 已收到設定的原則。

接下來,如果正確設定和擷取原則,請檢查是否正在強制執行 任何 原則: 我的應用程式未收到或強制執行任何原則

我的應用程式無法接收來自其他受管理應用程式的資料

確認同時針對您的應用程式 和其他受管理應用程式的 [應用程式保護原則] 設定。 建議讓相同的原則針對這兩個應用程式。 針對您應用程式的原則應將 [從其他應用程式接收資料] 設定為 [原則管理的應用程式]。 檢查以其他應用程式為目標的原則;如果將 [傳送組織資料至其他應用程式] 設定為 [無],則這是預期的行為。

後續步驟

完成上述所有 結束準則 之後,您的應用程式現在已成功整合為單一身分識別,並可以強制執行所有基本的應用程式保護原則。 後續章節「階段 5: 多重身分識別」、「階段 6: 應用程式組態」和 「階段 7: 應用程式參與」功能可能是或可能不需要,視您應用程式所需的應用程式保護原則支援而定。 如果您不確定這些章節是否適用於您的應用程式,請重新查看 SDK 整合的關鍵決策