Självstudie: Lägga till stöd för läget delad enhet i ditt Android-program

I den här självstudien lär sig Android-utvecklare hur de lägger till stöd för delat enhetsläge i ett Android-program med hjälp av Microsoft Authentication Library (MSAL) för Android.

I den här självstudien:

  • Skapa eller ändra ett befintligt Android-programprojekt.
  • Aktivera och identifiera läget för delad enhet
  • Identifiera ett eller flera kontoläge
  • Identifiera en användarväxel
  • Aktivera global inloggning och utloggning

Skapa eller ändra ett befintligt Android-program

För att slutföra resten av självstudien måste du skapa ett nytt eller ändra ett befintligt Android-program. Om du inte redan har gjort det kan du läsa självstudien om MSAL Android för vägledning om hur du integrerar MSAL med din Android-app, loggar in en användare, anropar Microsoft Graph och loggar ut en användare. Om du föredrar att använda ett slutfört kodexempel för inlärning och testning klonar du 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.+'
}

Lägga till stöd för enstaka kontoläge

Program som skrivits med Microsoft Authentication Library (MSAL) SDK kan hantera ett enda konto eller flera konton. Mer information finns i läget för ett enskilt konto eller läget för flera konton.

De Microsofts identitetsplattform funktioner som är tillgängliga för din app varierar beroende på om programmet körs i läget för ett konto eller flera konton.

Appar för delat enhetsläge fungerar bara i läge med ett enda konto.

Viktig

Program som endast stöder läget för flera konton kan inte köras på en delad enhet. Om en anställd läser in en app som inte stöder ett kontoläge körs den inte på den delade enheten.

Appar som skrivits innan MSAL SDK släpptes körs i läget för flera konton och måste uppdateras för att stödja enkontoläge innan de kan köras på en enhet med delat läge. Stöd för både ett konto och flera konton

Din app kan skapas för att stödja körning på både personliga enheter och delade enheter. Om din app för närvarande har stöd för flera konton och du vill ha stöd för läget för delad enhet lägger du till stöd för ett kontoläge.

Du kan också vilja att appen ändrar sitt beteende beroende på vilken typ av enhet den körs på. Använd ISingleAccountPublicClientApplication.isSharedDevice() för att avgöra när du ska köra i enkontoläge.

Det finns två olika gränssnitt som representerar vilken typ av enhet programmet är på. När du begär en programinstans från MSAL:s programfabrik tillhandahålls rätt programobjekt automatiskt.

Följande objektmodell illustrerar vilken typ av objekt du kan få och vad det innebär i kontexten för en delad enhet:

Diagram över arvsmodellen för offentliga klientprogram.

Du måste göra en typkontroll och casta till rätt gränssnitt när du hämtar objektet PublicClientApplication . Följande kod söker efter flera kontolägen eller enskilda kontolägen och omvandlar programobjektet på rätt sätt:

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

Följande skillnader gäller beroende på om din app körs på en delad eller personlig enhet:

Enhet för delat läge Personlig enhet
Konton Enskilt konto Flera konton
Logga in Global Global
Logga ut Global Varje program kan styra om utloggningen är lokal för appen.
Kontotyper som stöds Endast arbetskonton Personliga konton och arbetskonton stöds

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å den auth_config.json fil som ingår i app>main>res>raw-katalogen i 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 kan de 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);
}

Registrera programmet och konfigurera klientorganisationen för testning

Innan du kan konfigurera programmet och placera enheten i läget delad enhet måste du registrera programmet i organisationens klientorganisation. Du anger sedan dessa värden 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.

Not

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.

Konfigurera din Android-appsida

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 du är klar genererar Microsoft Entra-ID alla konfigurationsfiler som du behöver.

I testsyfte konfigurerar du följande roller i din klientorganisation – minst två anställda och en molnenhetsadministratör. Om du vill ange molnenhetsadministratör måste du ändra organisationsroller. Från administrationscentret för Microsoft Entra går du till dina organisationsroller genom att välja Identitetsroller>>och administratörer Roller och administratörer Alla roller och sedan Molnenhetsadministratör.> Lägg till de användare som kan placera en enhet i delat läge.

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.

Skärmen Information om programkonfiguration

Nästa steg

Konfigurera en Android-enhet för att köra appar i delat enhetsläge och testa din app.