共用方式為


Intune App SDK for Android - MAM Integration Essentials

Android 版 Microsoft Intune App SDK 允許你將Intune 應用程式保護政策 (也稱為 MAM 政策) 整合到原生的 Java/Kotlin Android 應用程式中。 Intune 管理的應用程式是指與 Intune 應用程式 SDK 整合的應用程式。 當 Intune 主動管理應用程式時,Intune 管理員可以輕鬆部署應用程式保護政策到您的 Intune 管理應用程式。

注意事項

本指南分為數個不同階段。 先從複習 第一階段:規劃整合開始。

第四階段:MAM 整合基礎

賽段目標

  • 啟用 MAM 嚴格模式。
  • 註冊以接收 SDK 的重大通知。
  • 實作並註冊一個認證回撥,從 MSAL 提供 Microsoft Entra 令牌給 SDK。
  • 在透過 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 嚴格模式並非設計成在生產版本中保持啟用;相反地,請在你應用程式的內部開發、除錯和/或 DogFood 建置中使用它。

要啟用 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 應用程式 SDK 會發出多種不同類型的通知,以通知應用程式有關時間敏感的管理操作。 您的申請可以註冊並接收任何這些通知後採取行動。

例如,每當 IT 管理員對裝置發出選擇性清除指令時,Intune 服務會向 SDK 發送通知,並以 WIPE_USER_DATA. 你的應用程式可以監聽此通知並控制哪些資料被清除;或者它可以依賴 SDK 預設的清除行為。

許多通知是可選的。 根據你應用程式使用的 SDK 功能,可能需要部分通知。 請參閱第 7 階段:應用程式參與功能中的「註冊通知」,了解如何註冊通知、SDK 提供哪些通知,以及如何處理特定通知類型。

註冊應用程式保護政策

當管理員建立應用程式保護政策時,他們會針對組織內的特定帳號來設定這些政策。 在用戶端,SDK 需要知道是哪個帳號在使用該應用程式,才能取得該帳號的政策並適當執行設定。 你的應用程式負責提供這些帳號資訊給 SDK。 這個過程稱為登記。

每當你的應用程式新增帳號時,即使其他帳號已經註冊,也必須用 SDK 註冊該帳號。 你的應用程式可以註冊多個帳號。 不過目前只能註冊一個帳號,或適用應用程式保護政策。 在 Android 上,這種單一管理帳號的限制是整個裝置的。

註冊與註冊

註冊 是你的應用程式通知 SDK 有新帳號正在使用中的過程。 SDK 包含了你的應用程式必須呼叫的註冊和取消註冊帳號的功能。

註冊是 SDK 用 Intune 服務記錄註冊帳號,以便套用該帳號政策的過程。 你的應用程式不需要呼叫任何函式來註冊。 SDK 在帳號註冊後會完整處理註冊。

如果一個帳號已經註冊了你的應用程式,當它註冊另一個帳號時,即使該帳號有應用程式保護政策,第二個帳號也不會被註冊,政策也不會被套用。

注意事項

「註冊」一詞亦可指裝置範圍的 MDM 註冊。詳情請見附錄中的 MDM 及 MAM 註冊

實施註冊

注意

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

您的應用程式必須更改三項代碼才能成功註冊帳號:

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

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

  3. 當帳號被移除時,應用程式應該呼叫 unregisterAccountForMAM 來移除該帳號從 Intune 管理中移除。

    注意

    通話可能會啟動清除,徹底移除該帳戶的企業資料。

所有必要的認證與註冊 API 皆可在 MAMEnrollmentManager 介面中找到。 MAMEnrollmentManager可參考如下:

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

// make use of mgr

回傳的 MAMEnrollmentManager 實例保證不會是空。 API 方法分為兩類: 認證帳號註冊

MAMEnrollmentManager 與認證

SDK 經常與 Intune 服務溝通:用於註冊帳號、更新應用程式保護政策設定,以及處理待處理的管理員操作,例如選擇性地清除應用程式內受保護的資料。 為了成功與 Intune 服務溝通,SDK 需要來自整合 MSAL 應用程式的新存取權杖。

若 SDK 無法取得新令牌,將無法與 Intune 服務溝通,這可能會延遲新政策設定或管理員操作的擷取與執行。 應用程式完成這些步驟至關重要,以確保政策的無縫執行。

在第二階段,你將 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 使用者 ID,前稱 AAD ID,也稱為 OID。

  1. 應用程式必須實作 MAMServiceAuthenticationCallback 介面或 MAMServiceAuthenticationCallbackExtended 介面,才能讓 SDK 為指定帳號和資源 ID 請求 Microsoft Entra 令牌。 回調實例必須透過呼叫其 registerAuthenticationCallback 方法提供給 。MAMEnrollmentManager 在應用程式生命週期早期,可能需要一個令牌來進行註冊重試或應用程式保護政策刷新檢查,因此回調必須在onCreate()應用程式Application子類別的 (或 onMAMCreate()) 方法中註冊。

  2. acquireToken 方法應該會取得該帳號所請求資源 ID 的存取權杖。 如果無法取得請求的標記,則應該回傳 null。

    提示

    確保你的應用程式使用resourceIdaadId與傳遞的acquireToken()參數,以確保取得正確的令牌。 該 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() 時提供權杖——例如靜默認證失敗且顯示介面不方便時機——應用程式可以在之後透過呼叫 updateToken 方法來提供權杖。 先前呼叫時請求acquireToken()的相同 UPN、Microsoft Entra ID 及資源 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實作了介面,則不需要實作繼MAMServiceAuthenticationCallbackacquireToken()的方法,因為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 使用者 ID 來識別。 租戶 ID 也必須將註冊資料與帳號的 Microsoft Entra 租戶關聯。 帳戶權限也可能允許針對特定主權雲的登記;欲了解更多資訊,請參閱 Sovereign Cloud 註冊。 SDK 可能會嘗試將該應用程式註冊到 MAM 服務中;若註冊失敗,系統會定期重試,直到成功註冊或帳號取消註冊為止。 重試期通常為12至24小時。 SDK 透過通知非同步提供註冊嘗試狀態。

  2. 最佳通話 registerAccountForMAM 時間是在使用者登入應用程式並成功使用 MSAL 認證後。 帳號的 Microsoft Entra 使用者 ID、租戶 ID 及權限會從 MSAL 認證通話中回傳,作為IAccount相關 IAuthenticationResult.

    • 帳號來自 IAuthenticationResult.getAccount() 該方法,包含相關的帳號資訊。
    • AAD ID (也稱為 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 支援多個物理隔離雲,稱為主權雲或國家雲。 如果你的應用程式是主 權雲端感知必須 提供 authority 參數 到 registerAccountForMAM()

MSAL 指導

對於 MSAL,在 MSAL 設定檔中設定multiple_clouds_supportedtrue

{
  "multiple_clouds_supported": true,
}

註冊結果與狀態代碼

帳號首次註冊時,會從該 PENDING 州開始,表示初始 MAM 服務註冊嘗試尚未完成。 報名嘗試結束後,將發送包含下表結果代碼的通知。 此外, getRegisteredAccountStatus 方法會回傳帳號狀態,讓應用程式隨時判斷該帳號是否有執行應用程式保護政策。 如果註冊失敗,隨著 SDK 在背景重試註冊,帳號狀態可能會隨時間改變。

結果代碼 說明
AUTHORIZATION_NEEDED 此結果表示該 App 註冊的 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 退學申請被駁回。 更多細節可參見裝置日誌。 一般來說,只要應用程式通過有效的 UPN (既非空也非空,這種情況) 不會發生。 這個應用程式沒有直接且可靠的修復方法。 若在取消註冊有效 UPN 時收到此值,請向 Intune MAM 團隊報告為錯誤。
PENDING 該帳戶的初次註冊嘗試正在進行中。 該應用程式可以在登記結果出爐前封鎖企業資料存取,但並非強制。
COMPANY_PORTAL_REQUIRED 該帳號有 Intune 授權,但該應用程式必須在裝置安裝公司入口網站應用程式後才能註冊。 Intune App SDK 嘗試阻擋該帳戶對該應用程式的存取,並指示使用者安裝公司入口網站應用程式。 當將此通知傳送給應用程式時,Intune App SDK 會在當前活動上方顯示一個非阻塞的介面,前提是該活動目前使用者可見,或下一次onResume被呼叫時會被呼叫。 如果使用者取消了這個非阻塞 UI,Intune App SDK 會在下次onCreate呼叫活動時顯示阻擋介面,且目前身份已被管理 (詳見下方故障排除) 細節。

日誌應該及早初始化,以最大化記錄資料的價值。 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 公司入口網站應用程式提供多種診斷資訊收集選項。 公司入口網站包含以下介面:

  • 讓終端使用者能夠收集公司入口網站的日誌。
  • 顯示裝置與帳戶的元資料。
  • 包含關於當前 MAM 政策的每個應用程式資訊。

Intune 診斷 介面 Intune 應用程式資訊

關於公司入口網站日誌及診斷介面中資料的詳細說明,請參閱附錄中的「了解公司入口網站日誌」。

提示

如果你用的帳號測試應該有 MAM 政策,但診斷程式卻沒有顯示你應用程式套件名稱的政策,請參考下方 的故障排除 部分。

應用程式可透過呼叫 MAMPolicyManager.showDiagnostics(context)啟動此診斷介面。 終端使用者也可以透過 Microsoft Edge 在地址列輸入about:intunehelp,啟動公司入口網站的診斷主控台。 這是一個可選的功能,可能有助於除錯。

這些診斷資訊僅在裝置安裝公司入口網站時提供。 每當showDiagnostics未安裝公司入口網站時,呼叫時會跳出警告對話框。

退出標準

在整合的這個階段,你的應用程式現在可以接收並執行應用程式保護政策。 執行以下測試以驗證整合性。

第一次政策申請測試

請先執行以下測試,以熟悉您的應用程式中政策應用的完整終端使用者體驗:

  1. 請在Microsoft Intune管理中心建立 Android 應用程式保護政策 (詳情請參閱第一階段的「建立測試 Android 應用程式保護政策」) 。 在此測試中,請設定以下政策:
    • 在資料保護中,將「螢幕擷取與 Google 助理」設為「封鎖」。
    • 在存取需求中,保留預設設定。 值得注意的是,「存取 PIN 碼」應該是「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 碼。 建立一個密碼。
  12. 在申請表中瀏覽並嘗試截圖。 鑑於 SDK 有政策,這應該在任何畫面上都被封鎖。
  13. 把受管理帳號從你的申請中登出。
  14. 如果可以不登入,請在應用程式內瀏覽並嘗試截圖。 現在帳號已經移除,這條路不應該被封鎖。

這只是最低 度的測試,用來確認你的應用程式是否正確註冊帳號、驗證回撥以及取消註冊。 執行以下測試,以更徹底地驗證其他應用程式保護政策設定如何改變您應用程式的行為。

資料保護測試

以下測試涵蓋應用程式保護政策中設定的特定資料保護設定。 當你在 Microsoft Intune 管理中心更改應用程式保護政策設定時,客戶端不會立即更新。 請參閱「 快速測試與政策變更」 ,了解加速測試的建議。

針對這些測試:

  1. 安裝你的應用程式。
  2. 安裝 Intune 公司入口網站。
  3. 安裝另一個受管理應用程式,目標設定與你的應用程式相同政策,可以像 Office) Microsoft 一樣複製貼上資料 (。
  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 網頁內容限制 「限制與其他應用程式的網頁內容傳輸」設定為「Microsoft Edge」 0. 如果你的應用程式無法產生網頁連結,請跳過。
1. 瀏覽應用程式中所有能顯示連結或文字輸入可呈現可點擊連結的頁面。
2. 對每個頁面,選擇該網頁連結。
3. 確認系統提示你安裝 Microsoft Edge,且該網頁連結在其他瀏覽器中沒有開啟。
限制鍵盤 「核准鍵盤」設為「必需」
「選擇鍵盤以核定」設定為裝置目前未安裝的鍵盤套件
0. 如果你的應用程式沒有任何文字輸入,請跳過。
1. 瀏覽應用程式中所有有文字輸入的頁面。
2. 選擇文字輸入以調出裝置鍵盤。
3. 確認系統提示你安裝已設定的核准鍵盤,且目前裝置鍵盤無法開啟。

資料傳輸測試

資料傳輸設定是應用程式保護政策資料保護功能中的一個子集,用以控制資料進入與離開受管理應用程式。 大多數支援 傳送接收 資料的應用程式,也具備 將資料儲存 至本地或雲端儲存空間並 開啟 資料的能力。 如果你的應用程式具備這些功能,你就需要實作額外的支援。 詳情請參閱 限制應用程式與裝置或雲端儲存地點間資料傳輸的政策

你的應用程式可能會主動從其他應用程式匯入資料,例如 Microsoft Outlook 附上 Microsoft OneDrive 的檔案。 你的應用程式也可能被動接收來自其他應用程式的資料,例如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. 確認你的應用程式能夠接收來自另一個受管理應用程式的資料。

其他資料保護設定

以下資料保護設定在應用程式進行額外變更前不會強制執行。 你現在不需要測試這些設定。 詳情請參閱 第七階段:應用程式參與功能

案例 應用程式保護政策設定 必須實施支援,如果......
儲存資料副本 儲存組織資料的副本 你的應用程式可以將資料儲存到本地或雲端儲存。
從儲存開啟資料 將開放資料整合進組織文件 你的應用程式可以從本地或雲端儲存開啟資料。
管理式通知內容 組織資料通知 你的應用程式在通知中包含用戶資料。
備份與還原 將組織資料備份到 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 已收到已設定的政策。

接著,如果政策設定正確且取得正確,請檢查 是否有 任何政策被執行: 我的應用程式沒有收到或執行任何政策

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

確認針對你的應用程式 和另一個受管理應用程式的應用程式保護政策設定。 建議同時針對兩個應用程式使用相同的政策。 針對你的應用程式的政策應該會設定為「從其他應用程式接收資料」為「政策管理應用程式」。 請查看針對其他應用程式的政策;如果「將組織資料傳送到其他應用程式」設為「無」,這種行為是預期中的。

後續步驟

完成上述所有 退出條件 後,您的應用程式將成功整合為單一身份,並能執行所有基本的應用程式保護政策。 後續章節,第五階段:多身份、第六階段:應用程式組態,以及第七階段:應用程式參與功能,取決於你應用程式所需的應用程式保護政策支援,是否必須。 如果你不確定這些章節是否適用於你的應用程式,請重新檢視 SDK 整合的關鍵決策