分享方式:


Intune App SDK for Android - MAM 整合基本資訊

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

注意事項

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

階段 4:MAM 整合 Essentials

階段 Goals

  • 啟用 MAM Strict 模式。
  • 從 SDK 註冊重要通知。
  • 實作並註冊驗證回呼,以提供從 MSAL 到 SDK 的 Microsoft Entra 令牌。
  • 向 MSAL 驗證之後,註冊 MAM 管理的新帳戶。
  • 在註銷時取消註冊帳戶,以移除公司數據。
  • (建議) 將 MAM 登入您的應用程式中。
  • (建議) 瞭解如何使用 SDK 診斷對話方塊。

Background

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

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

MAM Strict 模式

MAM Strict 模式可識別應用程式整合 Intune App SDK 的潛在錯誤。 這些整合錯誤可能會導致無法正確套用應用程式保護原則,並使公司數據不受保護。 因此, 需要使用 MAM Strict 模式。

MAM Strict 模式會在應用程式使用 MAM API 和受 MAM 限制的平臺 API 時尋找異常狀況。 在 Android 的 StrictMode 之後,MAM Strict 模式會執行一組預先定義的檢查,在失敗時引發運行時錯誤。 MAM Strict 模式不適合在生產組建中保持啟用;請改為在應用程式的內部開發、偵錯和/或 dogfood 組建中使用它。

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

MAMStrictMode.enable();

當 MAM Strict 模式檢查失敗時,請嘗試判斷它是可在應用程式中修正的實際問題,還是誤判。 如果您認為這是誤判或不確定,請讓 Intune MAM 小組知道。 這可讓我們確定我們同意誤判,並嘗試改善未來版本的偵測。 若要隱藏誤判,請依照下列指示停用失敗檢查。

處理違規

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

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

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 和 MAM 註冊附錄中的深入了解整個裝置的 MDM 註冊。

實作註冊

注意

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

您的應用程式必須進行三項程式代碼變更,才能成功註冊帳戶:

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

  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。

    提示

    請確定您的應用程式會利用 resourceId 傳遞給 acquireToken()aadId 和參數,以便取得正確的令牌。 參數 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() 。 不過,強烈建議您這麼做,因為它可以協助註冊和應用程式保護原則簽入及時完成。

驗證實作注意事項

  • 建議應用程式先取得 Microsoft Entra 令牌,再呼叫 registerAccountForMAM。 註冊帳戶之後,應用程式會在不同的線程上收到已註冊 MAMServiceAuthenticationCallback之 方法的 acquireToken() 回呼。 在該回呼中提供有效的令牌可讓註冊繼續進行。 應用程式會透過通知取得註冊結果。

  • 如果應用程式未傳回有效的 Microsoft Entra 令牌,註冊嘗試的最終結果將會是 AUTHORIZATION_NEEDED。 如果應用程式透過通知收到此結果,建議您藉由取得先前向 acquireToken 要求之帳戶和資源的令牌,並呼叫 updateToken 方法來重新起始註冊程式,以加速註冊程式。

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

  • 支持主權雲端需要提供授權單位。

  • 如果 MAMServiceAuthenticationCallbackExtended 實作 介面,則不需要實作 繼承 acquireToken() 自 的方法 MAMServiceAuthenticationCallback ,因為 MAMServiceAuthenticationCallbackExtended 介面會提供預設實作。

MAMEnrollmentManager 和註冊

每當應用程式新增帳戶時,它就必須向 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 租使用者建立關聯。 也可以提供帳戶的授權單位,以允許針對特定主權雲端進行註冊;如需詳細資訊,請參閱 主權雲端註冊。 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 只會註冊帳戶,並在帳戶尚未註冊時嘗試註冊應用程式,而且如果帳戶目前已註冊,則 取消註冊AccountForMAM 只會取消註冊帳戶。 後續的呼叫是無作業的,因此呼叫這些方法一次以上並不會有任何損害。

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

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

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

主權雲端註冊

Azure 支援多個實體隔離的雲端,稱為主權或國家雲端。 如果應用程式是 主權雲端感知,它 必須 提供 authority 參數給 registerAccountForMAM()

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 會提示移除現有帳戶的選項。 如果人類使用者在肯定中回答,稍後確實可以註冊第二個帳戶。 只要第二個帳戶保持註冊狀態,MAM 就會定期重試註冊。
UNENROLLMENT_SUCCEEDED 取消註冊成功。
UNENROLLMENT_FAILED 取消註冊要求失敗。 您可以在裝置記錄中找到進一步的詳細數據。 一般而言,只要應用程式通過有效的 (不使用 null 或空白) UPN,就不會發生這種情況。 應用程式無法採取任何直接、可靠的補救措施。 如果在取消註冊有效的 UPN 時收到此值,請向 Intune MAM 小組回報錯誤。
PENDING 帳戶的初始註冊嘗試正在進行中。 應用程式可以封鎖對公司數據的存取,直到知道註冊結果為止,但不需要這麼做。
COMPANY_PORTAL_REQUIRED 帳戶已獲得 Intune 授權,但在裝置上安裝 公司入口網站 應用程式之前,無法註冊應用程式。 Intune App SDK 會嘗試封鎖對指定帳戶的應用程式存取,並指示使用者安裝 公司入口網站 應用程式。 將此通知傳送至應用程式時,如果使用者目前可以看到活動或下onResume次呼叫活動,Intune App SDK 會在目前活動上方顯示非封鎖 UI。 如果使用者取消此非封鎖 UI,則下次onCreate針對活動呼叫時,Intune App SDK 會顯示封鎖 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 原則的帳戶進行測試,但診斷不會顯示應用程式套件名稱的任何原則,請參閱下方的 疑難解答 一節。

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

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

結束準則

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

第一個原則應用程式測試

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

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

      卸載其他 SDK 整合應用程式有助於確保您專門測試自己的應用程式整合。

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

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

  8. 安裝 公司入口網站。 您不需要啟動 公司入口網站 或登入 公司入口網站。
  9. 如有必要,請返回您的應用程式並再次登入。
  10. 確認系統會提示您使用 [取得存取] 畫面。 這表示 SDK 已成功擷取此帳戶的原則。
  11. 系統應該會提示您設定應用程式 PIN。 建立 PIN。
  12. 瀏覽您的應用程式,並嘗試擷取螢幕快照。 假設 SDK 有原則,這應該一律會在任何畫面上遭到封鎖。
  13. 將 Managed 帳戶記錄出您的應用程式。
  14. 如果可能,請在不登入的情況下瀏覽您的應用程式,並嘗試擷取螢幕快照。 既然帳戶已移除,就不應該封鎖此專案。

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

數據保護測試

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

針對這些測試:

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

數據傳輸測試

數據傳輸設定是應用程式保護原則數據保護功能的子集,可控制數據進入和結束受控應用程式。 大部分支援將數據 傳送 至其他應用程式或從其他應用程式 接收 數據的應用程式,也能夠將資料 儲存 至本機或雲端記憶體,並 從中開啟 數據。 如果您的應用程式具有這些功能,您必須實作其他支援。 如需詳細資訊,請參閱 限制應用程式與裝置或雲端儲存位置之間數據傳輸 的原則。

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

針對這些測試:

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

其他數據保護設定

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

案例 應用程式保護原則設定 如果...
儲存數據複本 儲存組織數據的複本 您的應用程式可以將資料儲存至本機或雲端記憶體。
從記憶體開啟數據 將數據開啟至組織檔 您的應用程式可以從本機或雲端記憶體開啟數據。
Managed 通知內容 組織數據通知 您的應用程式包含通知內的用戶數據。
備份與還原 將組織數據備份至 Android 備份服務 您的應用程式會與 Android 的備份功能共用用戶數據。

條件式啟動測試

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

  • 警告:使用者在裝置或應用程式不符合準則時,會看到警告對話方塊。 他們仍然可以存取所有應用程式數據。
  • 封鎖存取:使用者在裝置或應用程式不符合準則時,會看到警告對話框。 除非符合準則或從應用程式移除受控帳戶,否則不允許他們輸入應用程式並存取應用程式數據。
  • 抹除數據:當裝置或應用程式不符合準則時,將會抹除與受管理帳戶相關聯的所有公司數據。 在移除數據之前,使用者將無法符合準則。

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

  • 最低OS版本,值為 「10.0」,動作設定為 「Warn」。。
  • 最低OS版本,值為 「9.0」,動作設定為「封鎖存取」
  • 最低OS版本,值為 「8.0」,動作設定為 「抹除數據」。

透過完成此階段中的整合步驟,您的應用程式現在支援 所有條件式啟動功能。 藉由變更原則專案,讓您熟悉條件式啟動功能,讓您的測試裝置:

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

疑難排解

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

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

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

首先,請造訪 Intune 系統管理中心,並再次檢查應用程式保護原則是否以您的測試帳戶為目標。

其次,請仔細檢查原始程式碼,以取得和 registerAccountForMAM 實作的 MAMServiceAuthenticationCallback呼叫。 如果未在正確的時間呼叫前者,且/或後者未正確提供有效的令牌,您將不會看到 公司入口網站 提示。

最後,請查看記錄檔 (或偵錯) 註冊結果碼,或在帳戶上明確呼叫 getRegisteredAccountStatus 。 NOT_LICENSED等程式代碼可以指出測試帳戶的設定問題。

我在登入步驟 10 (后沒有看到 [取得存取權] 畫面)

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

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

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

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

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

最後,重新啟動裝置將會重設 PIN 定時器。 如果在重新啟動裝置之後未顯示 PIN 畫面,則可能未在原則中正確設定。

我看到 [取得存取權] 畫面,但步驟 12 (仍允許螢幕快照)

擷取原則時,套用了錯誤的原則。 首先,請造訪 Intune 系統管理中心,並再次檢查應用程式保護原則是否停用螢幕快照,並以您的測試帳戶為目標。 其次,使用上述的診斷控制台 () 來檢查已針對您的應用程式提取的原則。 如果這兩個原則都確認應該封鎖螢幕快照,請檢查您的 Gradle 組建外掛程式設定,以確保已進行 MAM 取代。

我的應用程式在註銷 (步驟 13 之後似乎當機或關閉)

當您取消註冊先前已註冊並強制執行原則的帳戶時,SDK 將會抹除與該帳戶相關聯的數據。 應用程式進程應該會終止。

即使在我註銷 (步驟 14 之後,螢幕快照仍會遭到封鎖)

再次檢查您的原始程式碼,以取得的 unregisterAccountForMAM()呼叫。 如果在註銷之後仍強制執行原則,則帳戶可能未正確取消註冊和取消註冊。

數據保護測試疑難解答

遵循上述 數據保護測試 步驟,您可能會遇到下列非預期的行為:

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

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

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

我的應用程式可以將數據共享至 Unmanaged 應用程式

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

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

我的應用程式無法與另一個 Managed 應用程式共享數據

確認以您的應用程式和其他受控應用程式為目標的應用程式保護原則 設定。 建議您將相同的原則目標設為這兩個應用程式。 以您的應用程式為目標的原則應該將「將組織數據傳送至其他應用程式」設定為「受原則管理的應用程式」。 檢查以其他應用程式為目標的原則;如果 [接收來自其他應用程式的數據] 設定為 [無],則這是預期的行為。

我的應用程式可以從 Unmanaged 應用程式接收數據

確認 [接收來自其他應用程式的數據] 設定為 [受原則管理的應用程式]。 請檢查 Microsoft Intune 系統管理中心,確認原則已正確設定並設為目標。 檢查客戶端 診斷資訊 ,確認 SDK 已收到已設定的原則。

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

我的應用程式無法從另一個 Managed 應用程式接收數據

確認以您的應用程式和其他受控應用程式為目標的應用程式保護原則 設定。 建議您將相同的原則目標設為這兩個應用程式。 以您應用程式為目標的原則應該將 [接收來自其他應用程式的數據] 設定為 [受原則管理的應用程式]。 檢查以其他應用程式為目標的原則;如果 [將組織數據傳送至其他應用程式] 設定為 [無],則預期會發生此行為。

後續步驟

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