Sdílet prostřednictvím


Kurz: Přidání podpory režimu sdíleného zařízení do aplikace pro Android

V tomto kurzu vývojáři pro Android zjistí, jak přidat podporu režimu sdíleného zařízení v aplikaci pro Android pomocí knihovny MICROSOFT Authentication Library (MSAL) pro Android.

V tomto kurzu:

  • Vytvořte nebo upravte existující projekt aplikace pro Android.
  • 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
  • Povolení globálního přihlášení a odhlášení

Vytvoření nebo úprava existující aplikace pro Android

Pokud chcete dokončit zbytek kurzu, musíte vytvořit novou nebo upravit existující aplikaci pro Android. Pokud jste to ještě neudělali, přečtěte si kurz MSAL pro Android, kde najdete pokyny k integraci KNIHOVNY MSAL s vaší aplikací pro Android, přihlášení uživatele, volání Microsoft Graphu a odhlášení uživatele. Pokud dáváte přednost použití dokončené ukázky kódu pro výuku a testování, 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.+'
}

Přidání podpory pro režim jednoho účtu

Aplikace napsané pomocí sady MICROSOFT Authentication Library (MSAL) SDK můžou spravovat jeden nebo více účtů. Podrobnosti najdete v režimu jednoho účtu nebo režimu více účtů.

Funkce platformy Microsoft Identity Platform dostupné pro vaši aplikaci se liší v závislosti na tom, jestli je aplikace spuštěná v režimu s jedním účtem nebo v režimu více účtů.

Aplikace režimu sdíleného zařízení fungují jenom v režimu s jedním účtem.

Důležitý

Aplikace, které podporují jenom režim více účtů, se nedají spustit na sdíleném zařízení. Pokud zaměstnanec načte aplikaci, která nepodporuje režim jednoho účtu, nespustí se na sdíleném zařízení.

Aplikace napsané před vydáním sady MSAL SDK v režimu více účtů a je nutné je aktualizovat tak, aby podporovaly režim s jedním účtem, aby mohly běžet na zařízení se sdíleným režimem. Podpora jednoho účtu i více účtů

Aplikaci můžete vytvořit tak, aby podporovala provoz na osobních zařízeních i sdílených zařízeních. Pokud vaše aplikace aktuálně podporuje více účtů a chcete podporovat režim sdíleného zařízení, přidejte podporu pro režim jednoho účtu.

Můžete také chtít, aby aplikace změnila své chování v závislosti na typu zařízení, na kterém běží. Slouží ISingleAccountPublicClientApplication.isSharedDevice() k určení, kdy se má spustit v režimu s jedním účtem.

Existují dvě různá rozhraní, která představují typ zařízení, na které je vaše aplikace zapnutá. Když požádáte o instanci aplikace z objektu pro vytváření aplikací MSAL, zobrazí se automaticky správný objekt aplikace.

Následující objektový model znázorňuje typ objektu, který můžete obdržet a co to znamená v kontextu sdíleného zařízení:

Diagram modelu dědičnosti veřejných klientských aplikací

Při získání PublicClientApplication objektu musíte provést kontrolu typu a přetypovat na příslušné rozhraní. Následující kód zkontroluje režimy více účtů nebo režimy jednoho účtu a odpovídajícím způsobem přetypuje objekt aplikace:

private IPublicClientApplication mApplication;

        // Running in personal-device mode?
        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        // Running in shared-device mode?
        } else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

Následující rozdíly platí v závislosti na tom, jestli je vaše aplikace spuštěná na sdíleném nebo osobním zařízení:

Zařízení sdíleného režimu Osobní zařízení
Účty Jeden účet Více účtů
Přihlášení Globální Globální
Odhlaste se Globální Každá aplikace může řídit, jestli je odhlášení místní k aplikaci.
Podporované typy účtů Pouze pracovní účty Podporované osobní a pracovní účty

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

Registrace aplikace a nastavení tenanta pro testování

Než budete moct nastavit aplikaci a umístit zařízení do režimu sdíleného zařízení, musíte aplikaci zaregistrovat v rámci tenanta vaší organizace. Tyto hodnoty pak zadáte v auth_config.json , aby 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 vyjmete a vložíte do souboru auth_config.json.

Konfigurace stránky aplikace pro Android

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á. Po dokončení vygeneruje ID Microsoft Entra všechny konfigurační soubory, které potřebujete.

Pro účely testování nastavte ve svém tenantovi následující role – aspoň dva zaměstnance a správce cloudového zařízení. Pokud chcete nastavit správce cloudového zařízení, musíte upravit role organizace. V Centru pro správu Microsoft Entra přejděte do rolí organizace tak, že vyberete Role identit>a role správců>a všechny>role a pak vyberete Správce cloudového zařízení. Přidejte uživatele, kteří můžou zařízení umístit do sdíleného režimu.

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á.

Obrazovka s informacemi o konfiguraci aplikace

Další kroky

Nastavte zařízení s Androidem pro spouštění aplikací v režimu sdíleného zařízení a otestování aplikace.