Kurz: Použití režimu sdíleného zařízení v aplikaci pro Android

V tomto kurzu se vývojáři pro Android a správci tenanta Microsoft Entra seznámí s kódem, aplikací Authenticator a nastavením tenanta vyžadovaným k povolení režimu sdíleného zařízení pro aplikaci pro Android.

V tomto kurzu:

  • Stažení ukázky kódu
  • Povolení a zjištění režimu sdíleného zařízení
  • Detekce režimu jednoho nebo více účtů
  • Zjištění přepínače uživatele a povolení globálního přihlášení a odhlášení
  • Nastavení tenanta a registrace aplikace
  • Nastavení zařízení s Androidem v režimu sdíleného zařízení
  • Spuštění ukázkové aplikace

Požadavky

Příručka pro vývojáře

Tato část kurzu obsahuje pokyny pro vývojáře k implementaci režimu sdíleného zařízení v aplikaci pro Android pomocí knihovny MSAL (Microsoft Authentication Library). V kurzu MSAL Pro Android se dozvíte, jak integrovat MSAL s vaší aplikací pro Android, přihlásit se uživatele, volat Microsoft Graph a odhlásit uživatele.

Stažení ukázky

Naklonujte ukázkovou aplikaci z GitHubu. Ukázka má možnost pracovat v režimu jednoho nebo více účtů.

Přidání sady MSAL SDK do místního úložiště Maven

Pokud ukázkovou aplikaci nepoužíváte, přidejte knihovnu MSAL jako závislost do souboru build.gradle, například takto:

dependencies{
  implementation 'com.microsoft.identity.client.msal:4.9.+'
}

Konfigurace aplikace pro použití režimu sdíleného zařízení

Další informace o nastavení konfiguračního souboru najdete v dokumentaci ke konfiguraci.

Nastavte "shared_device_mode_supported" v konfiguračním true souboru MSAL.

Možná neplánujete podporovat režim více účtů. To může být v případě, že nepoužíváte sdílené zařízení a uživatel se může k aplikaci přihlásit pomocí více účtů najednou. Pokud ano, nastavte "account_mode" na "SINGLE"hodnotu . To zaručuje, že se vaše aplikace bude vždy získávat ISingleAccountPublicClientApplicationa výrazně zjednodušuje integraci MSAL. Výchozí hodnota "account_mode" je "MULTIPLE", takže je důležité změnit tuto hodnotu v konfiguračním souboru, pokud používáte "single account" režim.

Tady je příklad souboru auth_config.json, který je součástí hlavního>adresáře res>> ukázkové aplikace:

{
  "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"
      }
    }
  ]
}

Zjištění režimu sdíleného zařízení

Režim sdíleného zařízení umožňuje nakonfigurovat zařízení s Androidem tak, aby je sdílelo více zaměstnanců a současně poskytuje správu zařízení na základě identity Microsoftu. Zaměstnanci se můžou k zařízením přihlásit a rychle získat přístup k informacím o zákazníce. Po dokončení směny nebo úkolu se budou moct odhlásit ze všech aplikací na sdíleném zařízení jediným kliknutím a zařízení bude okamžitě připravené k použití dalšího zaměstnance.

Slouží isSharedDevice() k určení, jestli je aplikace spuštěná na zařízení, které je v režimu sdíleného zařízení. Aplikace může tento příznak použít k určení, jestli by měla odpovídajícím způsobem upravovat uživatelské rozhraní.

Tady je fragment kódu, který ukazuje, jak můžete použít isSharedDevice(). Pochází z SingleAccountModeFragment třídy v ukázkové aplikaci:

deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");

Inicializace objektu PublicClientApplication

Pokud jste nastavili "account_mode":"SINGLE" v konfiguračním souboru MSAL, můžete vrácený objekt aplikace bezpečně přetypovat jako ISingleAccountPublicCLientApplicationobjekt aplikace .

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 */
  }
});

Detekce režimu jednoho nebo více účtů

Pokud píšete aplikaci, která se bude používat jenom pro pracovníky frontline na sdíleném zařízení, doporučujeme, abyste aplikaci napsali, aby podporovala jenom režim jednoho účtu. To zahrnuje většinu aplikací, které jsou zaměřeny na úkoly, jako jsou aplikace lékařské záznamy, aplikace faktury a většina obchodních aplikací. Tím se zjednoduší vývoj, protože mnoho funkcí sady SDK se nebude muset vyjmout.

Pokud vaše aplikace podporuje více účtů a režimu sdíleného zařízení, musíte provést kontrolu typu a přetypování na příslušné rozhraní, jak je znázorněno níže.

private IPublicClientApplication mApplication;

        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        } else if (mApplication instanceOf    ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

Získání přihlášeného uživatele a určení, jestli se uživatel na zařízení změnil

Metoda loadAccount načte účet přihlášeného uživatele. Metoda onAccountChanged určuje, jestli se přihlášený uživatel změnil, a pokud ano, vyčistěte:

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)
    {
    }
  }
}

Globální přihlášení uživatele

Následující přihlášení uživatele na celém zařízení k jiným aplikacím, které používají MSAL s aplikací Authenticator:

private void onSignInClicked()
{
  mSingleAccountApp.signIn(getActivity(), SCOPES, null, getAuthInteractiveCallback());
}

Globální odhlášení uživatele

Následující příkaz odebere přihlášený účet a vymaže tokeny uložené v mezipaměti nejen z aplikace, ale také ze zařízení, které je v režimu sdíleného zařízení:

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*/
    }
  });
}

Příjem vysílání pro detekci globálního odhlašování iniciovaného z jiných aplikací

Pokud chcete přijmout vysílání změn účtu, musíte zaregistrovat přijímač vysílání. Doporučujeme zaregistrovat přijímač vysílání prostřednictvím kontextově registrovaných přijímačů.

Po přijetí vysílání změny účtu okamžitě získejte přihlášeného uživatele a určete, jestli se uživatel na zařízení změnil. Pokud se zjistí změna, zahajte vyčištění dat pro dříve přihlášený účet. Doporučuje se správně zastavit všechny operace a vyčistit data.

Následující fragment kódu ukazuje, jak můžete zaregistrovat přijímač vysílání.

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);
}

Příručka pro správce

Následující kroky popisují nastavení aplikace a umístění zařízení do režimu sdíleného zařízení.

Registrace aplikace

Nejprve zaregistrujte aplikaci v rámci tenanta vaší organizace. Potom do souboru auth_config.json zadejte následující hodnoty, aby vaše aplikace běžela správně.

Informace o tom, jak to udělat, najdete v tématu Registrace aplikace.

Poznámka:

Při registraci aplikace prosím použijte příručku pro rychlý start na levé straně a pak vyberte Android. Tím přejdete na stránku, kde budete požádáni o zadání názvu balíčku a hodnoty hash podpisu pro vaši aplikaci. To je velmi důležité, abyste zajistili, že vaše konfigurace aplikace bude fungovat. Pak obdržíte objekt konfigurace, který můžete použít pro aplikaci, kterou vyjmout a vložit do souboru auth_config.json.

Configure your Android app page

Měli byste pro mě vybrat možnost Provést tuto změnu a pak zadat hodnoty, o které vás rychlý start požádá. Až to bude hotové, vygenerujeme všechny konfigurační soubory, které potřebujete.

Configure your project page

Nastavení tenanta

Pro účely testování nastavte ve svém tenantovi následující: alespoň dva zaměstnance, jeden cloudový Správa istrator a jeden globální Správa istrator. Nastavte cloudový Správa istrator úpravou rolí organizace. Přístup k rolím organizace získáte tak, že vyberete role identit>a role správců>a všechny>role a pak vyberete Správa istrator cloudového zařízení. Přidejte uživatele, kteří můžou zařízení umístit do sdíleného režimu.

Nastavení zařízení s Androidem ve sdíleném režimu

Stažení aplikace Authenticator

Stáhněte si aplikaci Microsoft Authenticator z obchodu Google Play. Pokud už máte aplikaci staženou, ujistěte se, že se jedná o nejnovější verzi.

Nastavení aplikace Authenticator a registrace zařízení v cloudu

Spusťte aplikaci Authenticator a přejděte na hlavní stránku účtu. Jakmile se zobrazí stránka Přidat účet , můžete zařízení nastavit jako sdílené.

Authenticator add account screen

Pomocí pravého řádku nabídek přejděte do podokna Nastavení. V části Pracovní a školní účty vyberte registraci zařízení.

Authenticator settings screen

Po kliknutí na toto tlačítko se zobrazí výzva k autorizaci přístupu k kontaktům zařízení. Důvodem je integrace účtu Androidu na zařízení. Zvolte povolit.

Authenticator allow access confirmation screen

Cloudová zařízení Správa istrator by měla zadat svůj organizační e-mail v části Nebo zaregistrovat jako sdílené zařízení. Potom klikněte na tlačítko registrovat jako sdílené zařízení a zadejte svoje přihlašovací údaje.

Device registration screen in app

App screenshot showing Microsoft sign-in page

Zařízení je teď ve sdíleném režimu.

App screen showing shared device mode enabled

Všechny přihlášení a odhlášení na zařízení budou globální, což znamená, že se vztahují na všechny aplikace integrované se službou MSAL a Microsoft Authenticator na zařízení. Aplikace teď můžete nasadit do zařízení, které používají funkce režimu sdíleného zařízení.

Zobrazení sdíleného zařízení

Jakmile zařízení umístíte do sdíleného režimu, bude známé vaší organizaci a bude sledováno v tenantovi vaší organizace. Sdílená zařízení můžete zobrazit tak, že se podíváte na typ připojení.

Screenshot that shows the all devices pane

Spuštění ukázkové aplikace

Ukázková aplikace je jednoduchá aplikace, která bude volat rozhraní Graph API vaší organizace. Při prvním spuštění se zobrazí výzva k vyjádření souhlasu, protože aplikace je pro váš účet zaměstnance nová.

Application configuration info screen

Další kroky

Přečtěte si další informace o práci s knihovnou Microsoft Authentication Library a režimem sdíleného zařízení na zařízeních s Androidem: