教學課程:在Android應用程式中使用共用裝置模式
在本教學課程中,Android 開發人員和 Microsoft Entra 租使用者系統管理員會瞭解為 Android 應用程式啟用共用裝置模式所需的程式碼、Authenticator 應用程式和租用戶設定。
在本教學課程中:
- 下載程式代碼範例
- 啟用和偵測共用裝置模式
- 偵測單一或多個帳戶模式
- 偵測用戶切換,並啟用全域登入和註銷
- 設定租用戶並註冊應用程式
- 以共用裝置模式設定 Android 裝置
- 執行範例應用程式
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
開發人員指南
本教學課程的這一節提供使用 Microsoft 驗證連結庫 (MSAL) 在 Android 應用程式中實作共用裝置模式的開發人員指引。 請參閱 MSAL Android 教學課程,瞭解如何整合 MSAL 與 Android 應用程式、登入使用者、呼叫 Microsoft graph,以及註銷使用者。
下載範例
從 GitHub 複製範例應用程式。 此範例具有在單一或多帳戶模式中運作的功能。
將 MSAL SDK 新增至本機 Maven 存放庫
如果您未使用範例應用程式,請在 build.gradle 檔案中將 MSAL 連結庫新增為相依性,如下所示:
dependencies{
implementation 'com.microsoft.identity.client.msal:4.9.+'
}
設定您的應用程式以使用共用裝置模式
如需 設定組態檔的詳細資訊,請參閱組態檔 。
在 MSAL 組態檔中設定 "shared_device_mode_supported"
為 true
。
您可能不打算支援多帳戶模式。 這可能是如果您未使用共用裝置,而且使用者可以同時使用多個帳戶登入應用程式。 如果是,請將 設定 "account_mode"
為 "SINGLE"
。 這可確保您的應用程式一律會取得 ISingleAccountPublicClientApplication
,並大幅簡化 MSAL 整合。 的預設值 "account_mode"
為 "MULTIPLE"
,因此如果您使用 模式,請務必在組態檔 "single account"
中變更此值。
以下是範例應用程式>mains>>原始目錄中包含的 auth_config.json 檔案範例:
{
"client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
"authorization_user_agent": "DEFAULT",
"redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
"account_mode": "SINGLE",
"broker_redirect_uri_registered": true,
"shared_device_mode_supported": true,
"authorities": [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount",
"tenant_id": "common"
}
}
]
}
偵測共用裝置模式
共用裝置模式可讓您設定多個員工共用 Android 裝置,同時提供 Microsoft 身分識別支援的裝置管理。 員工可以登入其裝置並快速存取客戶資訊。 當他們完成班次或工作時,他們將能夠用單鍵註銷共用裝置上的所有應用程式,且裝置將立即準備好供下一位員工使用。
用來 isSharedDevice()
判斷應用程式是否在處於共用裝置模式的裝置上執行。 您的應用程式可以使用這個旗標來判斷它是否應該據以修改 UX。
以下代碼段示範如何使用 isSharedDevice()
。 它來自 SingleAccountModeFragment
範例應用程式中的類別:
deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");
初始化 PublicClientApplication 物件
如果您在 MSAL 組態檔中設定 "account_mode":"SINGLE"
,可以安全地將傳回的應用程式物件 ISingleAccountPublicCLientApplication
轉換成 。
private ISingleAccountPublicClientApplication mSingleAccountApp;
/*Configure your sample app and save state for this activity*/
PublicClientApplication.create(this.getApplicationCOntext(),
R.raw.auth_config,
new PublicClientApplication.ApplicationCreatedListener(){
@Override
public void onCreated(IPublicClientApplication application){
mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
loadAccount();
}
@Override
public void onError(MsalException exception){
/*Fail to initialize PublicClientApplication */
}
});
偵測單一與多個帳戶模式
如果您要撰寫只用於共用裝置上前線背景工作角色的應用程式,建議您撰寫應用程式僅支援單一帳戶模式。 這包括大部分以工作為主的應用程式,例如醫療記錄應用程式、發票應用程式,以及大部分的企業營運應用程式。 這會簡化您的開發,因為不需要容納 SDK 的許多功能。
如果您的應用程式支援多個帳戶和共用裝置模式,您必須執行類型檢查並轉換成適當的介面,如下所示。
private IPublicClientApplication mApplication;
if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
...
} else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
...
}
取得登入的使用者,並判斷使用者是否已在裝置上變更
方法 loadAccount
會擷取已登入用戶的帳戶。 方法 onAccountChanged
會判斷已登入的使用者是否已變更,如果是,請清除:
private void loadAccount()
{
mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
{
@Override
public void onAccountLoaded(@Nullable IAccount activeAccount)
{
if (activeAccount != null)
{
signedInUser = activeAccount;
mSingleAccountApp.acquireTokenSilentAsync(SCOPES,"http://login.microsoftonline.com/common",getAuthSilentCallback());
}
}
@Override
public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
{
if (currentAccount == null)
{
//Perform a cleanup task as the signed-in account changed.
updateSingedOutUI();
}
}
@Override
public void onError(@NonNull Exception exception)
{
}
}
}
全域登入使用者
下列會登入裝置上的使用者,以使用 MSAL 搭配 Authenticator 應用程式的其他應用程式:
private void onSignInClicked()
{
mSingleAccountApp.signIn(getActivity(), SCOPES, null, getAuthInteractiveCallback());
}
全域註銷使用者
下列作業會移除已登入的帳戶,並清除來自應用程式以及共用裝置模式裝置的快取令牌:
private void onSignOutClicked()
{
mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback()
{
@Override
public void onSignOut()
{
updateSignedOutUI();
}
@Override
public void onError(@NonNull MsalException exception)
{
/*failed to remove account with an exception*/
}
});
}
接收廣播以偵測從其他應用程式起始的全域註銷
若要接收帳戶變更廣播,您必須註冊廣播接收者。 建議您透過 內容註冊的接收者註冊廣播接收器。
收到帳戶變更廣播時,立即 取得登入的使用者,並判斷使用者是否已在裝置上變更。 如果偵測到變更,請起始先前登入帳戶的數據清除。 建議您適當地停止任何作業並執行數據清除。
下列代碼段示範如何註冊廣播接收器。
private static final String CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER = "com.microsoft.identity.client.sharedmode.CURRENT_ACCOUNT_CHANGED";
private BroadcastReceiver mAccountChangedBroadcastReceiver;
private void registerAccountChangeBroadcastReceiver(){
mAccountChangedBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//INVOKE YOUR PRIOR ACCOUNT CLEAN UP LOGIC HERE
}
};
IntentFilter filter = new
IntentFilter(CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER);
this.registerReceiver(mAccountChangedBroadcastReceiver, filter);
}
系統管理員指南
下列步驟說明如何設定您的應用程式,並將您的裝置置於共用裝置模式。
註冊應用程式
首先,在組織租用戶內註冊應用程式。 然後在 auth_config.json 中提供下列值,讓您的應用程式能夠正確執行。
如需如何執行這項操作的資訊,請參閱 註冊您的應用程式。
注意
當您註冊應用程式時,請使用左側的快速入門指南,然後選取 [Android]。 這將會引導您前往頁面,要求您提供應用程式的套件名稱和簽章哈希。 請務必確保應用程式組態能夠運作。 接著,您會收到組態物件,您可以用於您的應用程式,以剪下並貼到您的 auth_config.json 檔案中。
您應該選取 [為我 進行這項變更],然後提供快速入門所要求的值。 完成後,我們將產生您需要的所有組態檔。
設定租用戶
為了進行測試,請在租用戶中設定下列專案:至少兩名員工、一個雲端裝置 管理員 istrator,以及一個全域 管理員 istrator。 修改組織角色來設定雲端裝置 管理員 istrator。 選取 [身分>識別角色與系統管理員角色和系統管理員>>] [所有角色],然後選取 [雲端裝置 管理員 istrator],以存取您的組織角色。 新增可將裝置置於共用模式的使用者。
以共用模式設定 Android 裝置
下載 Authenticator 應用程式
從Google Play商店下載 Microsoft Authenticator 應用程式。 如果您已經下載應用程式,請確定它是最新版本。
驗證器應用程式設定和在雲端中註冊裝置
啟動 Authenticator 應用程式並流覽至主要帳戶頁面。 一旦您看到 [ 新增帳戶 ] 頁面,即可讓裝置共用。
使用右側功能表列移至 [設定] 窗格。 選取 [公司與學校帳戶] 下的 [裝置註冊]。
當您按下此按鈕時,系統會要求您授權存取裝置聯繫人。 這是因為裝置上的 Android 帳戶整合。 選擇 [允許]。
雲端裝置 管理員 istrator 應該在 [或註冊為共用裝置] 底下輸入其組織電子郵件。 然後按下註冊 為共用裝置 按鈕,然後輸入其認證。
裝置現在處於共用模式。
裝置上的任何登入和註銷都會是全域的,這表示這些登入會套用至裝置上與 MSAL 和 Microsoft Authenticator 整合的所有應用程式。 您現在可以將應用程式部署到使用共用裝置模式功能的裝置。
檢視共用裝置
一旦您將裝置置於共用模式后,組織就會知道該裝置,並在您的組織租用戶中追蹤。 您可以查看 聯結類型來檢視您的共享裝置。
執行範例應用程式
範例應用程式是一個簡單的應用程式,會呼叫您組織的圖形 API。 在第一次執行時,系統會提示您同意,因為應用程式是員工帳戶的新手。
下一步
深入瞭解在 Android 裝置上使用 Microsoft 驗證連結庫和共用裝置模式: