Självstudie: Använda läget för delad enhet i ditt Android-program

I den här självstudien får Android-utvecklare och Microsoft Entra-klientadministratörer lära sig mer om den kod, autentiseringsapp och klientinställningar som krävs för att aktivera läget för delad enhet för en Android-app.

I den här självstudien:

  • Ladda ned ett kodexempel
  • Aktivera och identifiera läget för delad enhet
  • Identifiera ett eller flera kontoläge
  • Identifiera en användarväxel och aktivera global inloggning och utloggning
  • Konfigurera klientorganisationen och registrera programmet
  • Konfigurera en Android-enhet i läget delad enhet
  • Kör exempelappen

Förutsättningar

Utvecklarguide

Det här avsnittet i självstudien innehåller utvecklarvägledning för att implementera läget för delad enhet i ett Android-program med hjälp av Microsoft Authentication Library (MSAL). Se MSAL Android-självstudien för att se hur du integrerar MSAL med din Android-app, loggar in en användare, anropar Microsoft Graph och loggar ut en användare.

Hämta exemplet

Klona exempelprogrammet från GitHub. Exemplet har möjlighet att fungera i enkel- eller multikontoläge.

Lägg till MSAL SDK till din lokala Maven-lagringsplats

Om du inte använder exempelappen lägger du till MSAL-biblioteket som ett beroende i filen build.gradle, så här:

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

Konfigurera appen så att den använder läget delad enhet

Mer information om hur du konfigurerar konfigurationsfilen finns i konfigurationsdokumentationen.

Ange "shared_device_mode_supported" till true i MSAL-konfigurationsfilen.

Du kanske inte planerar att stödja läget för flera konton. Det kan vara om du inte använder en delad enhet och användaren kan logga in på appen med mer än ett konto samtidigt. I så fall anger du "account_mode" till "SINGLE". Detta garanterar att din app alltid får ISingleAccountPublicClientApplicationoch avsevärt förenklar MSAL-integreringen. Standardvärdet "account_mode" för är "MULTIPLE", så det är viktigt att ändra det här värdet i konfigurationsfilen om du använder "single account" läge.

Här är ett exempel på filen auth_config.json som ingår i appens>>primära>raw-katalog för exempelappen:

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

Identifiera läget delad enhet

Med läget Delad enhet kan du konfigurera Android-enheter som ska delas av flera anställda, samtidigt som du tillhandahåller Hantering av enheten med Microsoft Identity-stöd. Anställda kan logga in på sina enheter och komma åt kundinformation snabbt. När de är klara med sitt skift eller sin uppgift kommer de att kunna logga ut från alla appar på den delade enheten med ett enda klick och enheten är omedelbart redo för nästa medarbetare att använda.

Använd isSharedDevice() för att avgöra om en app körs på en enhet som är i läget delad enhet. Din app kan använda den här flaggan för att avgöra om den ska ändra UX i enlighet med detta.

Här är ett kodfragment som visar hur du kan använda isSharedDevice(). Den kommer från SingleAccountModeFragment klassen i exempelappen:

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

Initiera PublicClientApplication-objektet

Om du anger "account_mode":"SINGLE" i MSAL-konfigurationsfilen kan du på ett säkert sätt omvandla det returnerade programobjektet som en 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 */
  }
});

Identifiera enkelt eller flera kontoläge

Om du skriver en app som endast ska användas för arbetare i frontlinjen på en delad enhet rekommenderar vi att du skriver din app för att endast stödja läget för ett enda konto. Detta omfattar de flesta program som är uppgiftsfokuserade, till exempel appar för medicinska journaler, fakturaappar och de flesta verksamhetsspecifika appar. Detta förenklar din utveckling eftersom många funktioner i SDK:t inte behöver hanteras.

Om din app stöder flera konton och läget för delad enhet måste du utföra en typkontroll och casta till lämpligt gränssnitt enligt nedan.

private IPublicClientApplication mApplication;

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

Hämta den inloggade användaren och ta reda på om en användare har ändrats på enheten

Metoden loadAccount hämtar kontot för den inloggade användaren. Metoden onAccountChanged avgör om den inloggade användaren har ändrats och i så fall rensar du upp:

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

Logga in en användare globalt

Följande loggar in en användare på enheten till andra appar som använder MSAL med Authenticator-appen:

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

Logga ut en användare globalt

Följande tar bort det inloggade kontot och rensar cachelagrade token från inte bara appen utan även från enheten som är i delat enhetsläge:

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

Ta emot sändning för att identifiera global utloggning som initierats från andra program

Om du vill ta emot kontoändringssändningen måste du registrera en sändningsmottagare. Vi rekommenderar att du registrerar sändningsmottagaren via de kontextregistrerade mottagarna.

När en sändning av kontoändring tas emot hämtar du omedelbart den inloggade användaren och avgör om en användare har ändrats på enheten. Om en ändring identifieras initierar du datarensning för tidigare inloggade konton. Vi rekommenderar att du stoppar alla åtgärder och rensar data korrekt.

Följande kodfragment visar hur du kan registrera en sändningsmottagare.

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

Administratörsguide

Följande steg beskriver hur du konfigurerar programmet och placerar enheten i läget delad enhet.

Registrera programmet

Registrera först programmet i organisationens klientorganisation. Ange sedan dessa värden nedan i auth_config.json för att programmet ska kunna köras korrekt.

Information om hur du gör detta finns i Registrera ditt program.

Kommentar

När du registrerar din app använder du snabbstartsguiden till vänster och väljer sedan Android. Detta leder dig till en sida där du uppmanas att ange paketnamn och signaturhash för din app. Dessa är mycket viktiga för att säkerställa att appkonfigurationen fungerar. Sedan får du ett konfigurationsobjekt som du kan använda för din app som du klipper ut och klistrar in i filen auth_config.json.

Configure your Android app page

Du bör välja Gör den här ändringen åt mig och sedan ange de värden som snabbstarten ber om. När det är klart genererar vi alla konfigurationsfiler som du behöver.

Configure your project page

Konfigurera en klientorganisation

I testsyfte konfigurerar du följande i din klientorganisation: minst två anställda, en molnenhetsadministratör och en global administratör. Ange molnenhetsadministratör genom att ändra organisationsroller. Få åtkomst till dina organisationsroller genom att välja Identitetsroller>och administratörer Roller och administratörer>Alla roller och välj sedan Molnenhetsadministratör.> Lägg till de användare som kan placera en enhet i delat läge.

Konfigurera en Android-enhet i delat läge

Ladda ned Authenticator-appen

Ladda ned Microsoft Authenticator-appen från Google Play-butiken. Om du redan har laddat ned appen kontrollerar du att den är den senaste versionen.

Inställningar för autentiseringsappen och registrering av enheten i molnet

Starta Authenticator-appen och gå till huvudkontosidan. När du ser sidan Lägg till konto är du redo att dela enheten.

Authenticator add account screen

Gå till fönstret Inställningar med menyraden till höger. Välj Enhetsregistrering under Arbets- och skolkonton.

Authenticator settings screen

När du klickar på den här knappen uppmanas du att auktorisera åtkomst till enhetskontakter. Detta beror på Androids kontointegrering på enheten. Välj Tillåt.

Authenticator allow access confirmation screen

Molnenhetsadministratören bör ange sin organisations e-post under Eller registrera sig som en delad enhet. Klicka sedan på knappen Registrera som delad enhet och ange deras autentiseringsuppgifter.

Device registration screen in app

App screenshot showing Microsoft sign-in page

Enheten är nu i delat läge.

App screen showing shared device mode enabled

Alla inloggningar och utloggningar på enheten blir globala, vilket innebär att de gäller för alla appar som är integrerade med MSAL och Microsoft Authenticator på enheten. Nu kan du distribuera program till den enhet som använder funktioner i läget delad enhet.

Visa den delade enheten

När du har placerat en enhet i delat läge blir den känd för din organisation och spåras i organisationens klientorganisation. Du kan visa dina delade enheter genom att titta på kopplingstypen.

Screenshot that shows the all devices pane

Köra exempelappen

Exempelprogrammet är en enkel app som anropar graph-API:et i din organisation. Vid första körningen uppmanas du att samtycka eftersom programmet är nytt för ditt anställdas konto.

Application configuration info screen

Nästa steg

Läs mer om att arbeta med Microsofts autentiseringsbibliotek och delat enhetsläge på Android-enheter: