Ändra ditt iOS- eller iPadOS-program för att stödja läget för delad enhet

I den här självstudien får du lära dig hur du ändrar ett iOS- eller iPadOS-program för att stödja SDM (Shared Device Mode). SDM är en Microsoft Entra ID funktion som gör det möjligt för organisationer att konfigurera en iOS-, iPadOS- eller Android-enhet för enkel delning mellan flera anställda, vilket är en vanlig praxis i arbetsinställningarna i frontlinjen.

I den här handledningen kommer du att:

  • Lägg till stöd för läge för enskilt konto.
  • Konfigurera din app så att den använder SDM.
  • Identifiera läget för delad enhet.
  • Identifiera om den inloggade användaren har ändrats.

Förutsättningar

Identifiera läget för delad enhet

Det är viktigt att identifiera läget för delad enhet för ditt program. Många program kräver en ändring i användarupplevelsen (UX) när programmet används på en delad enhet. Ditt program kan till exempel ha en "registreringsfunktion", vilket inte är lämpligt för en frontlinjearbetare eftersom de förmodligen redan har ett konto. Du kanske också vill lägga till extra säkerhet i programmets hantering av data om det är i läget för delad enhet.

Använd API:et getDeviceInformationWithParameters:completionBlock:MSALPublicClientApplication i för att avgöra om en app körs på en enhet i läget delad enhet.

Följande kodfragment visar exempel på användning av API:et getDeviceInformationWithParameters:completionBlock: .

Swift

application.getDeviceInformation(with: nil, completionBlock: { (deviceInformation, error) in

    guard let deviceInfo = deviceInformation else {
        return
    }

    let isSharedDevice = deviceInfo.deviceMode == .shared
    // Change your app UX if needed
})

Objective-C

[application getDeviceInformationWithParameters:nil
                                completionBlock:^(MSALDeviceInformation * _Nullable deviceInformation, NSError * _Nullable error)
{
    if (!deviceInformation)
    {
        return;
    }

    BOOL isSharedDevice = deviceInformation.deviceMode == MSALDeviceModeShared;
    // Change your app UX if needed
}];

Hämta den inloggade användaren och avgör om användaren på enheten har ändrats

En annan viktig del av stöd för läget för delad enhet är att fastställa användarens tillstånd på enheten och rensa programdata om en användare har ändrats eller om det inte finns någon användare alls på enheten. Du ansvarar för att se till att data inte läcker ut till en annan användare.

Du kan använda getCurrentAccountWithParameters:completionBlock: API:et för att fråga det inloggade kontot på enheten.

Swift

let msalParameters = MSALParameters()
msalParameters.completionBlockQueue = DispatchQueue.main

application.getCurrentAccount(with: msalParameters, completionBlock: { (currentAccount, previousAccount, error) in

    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
})

Objective-C

MSALParameters *parameters = [MSALParameters new];
parameters.completionBlockQueue = dispatch_get_main_queue();

[application getCurrentAccountWithParameters:parameters
                             completionBlock:^(MSALAccount * _Nullable account, MSALAccount * _Nullable previousAccount, NSError * _Nullable error)
{
    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
}];

Logga in en användare globalt

När en enhet har konfigurerats som en delad enhet kan ditt program anropa API:et acquireTokenWithParameters:completionBlock: för att logga in på kontot. Kontot kommer att vara tillgängligt globalt för alla berättigade appar på enheten efter att den första appen har loggat in på kontot.

Objective-C

MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"api://myapi/scope"] webviewParameters:[self msalTestWebViewParameters]];

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Logga ut en användare globalt

Följande kod tar bort det inloggade kontot och rensar cachelagrade token från inte bara appen, utan även från enheten som är i läget för delad enhet. Det rensar dock inte data från ditt program. Du måste rensa data från ditt program och rensa alla cachelagrade data som ditt program kan visa för användaren.

Swift

let account = .... /* account retrieved above */

let signoutParameters = MSALSignoutParameters(webviewParameters: self.webViewParamaters!)
signoutParameters.signoutFromBrowser = true // To trigger a browser signout in Safari.

application.signout(with: account, signoutParameters: signoutParameters, completionBlock: {(success, error) in
    if let error = error {

        // Signout failed

        return

    }

    // Sign out completed successfully

})

Objective-C

MSALAccount *account = ... /* account retrieved above */;

MSALSignoutParameters *signoutParameters = [[MSALSignoutParameters alloc] initWithWebviewParameters:webViewParameters];

signoutParameters.signoutFromBrowser = YES; // To trigger a browser signout in Safari.

[application signoutWithAccount:account signoutParameters:signoutParameters completionBlock:^(BOOL success, NSError * _Nullable error)

{

    if (!success)

    {

        // Signout failed

        return;

    }

    // Sign out completed successfully

}];

Plugin-programmet Microsoft Enterprise SSO för Apple-enheter rensar endast tillståndet för program. Den rensar inte statusen på Safari. Du kan använda den valfria signoutFromBrowser egenskapen som visas i kodfragment för att utlösa en webbläsarloggning i Safari. Detta gör att webbläsaren startas en kort stund på enheten.

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. När en sändning om kontoändring tas emot ska du omedelbart hämta den inloggade användaren och avgöra 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.

NSString *const MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";

- (void) registerDarwinNotificationListener 

{ 

   CFNotificationCenterRef center =

   CFNotificationCenterGetDarwinNotifyCenter(); 

   CFNotificationCenterAddObserver(center, nil,

   sharedModeAccountChangedCallback,

   (CFStringRef)MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY, 

   nil, CFNotificationSuspensionBehaviorDeliverImmediately); 

} 

// CFNotificationCallbacks used specifically for Darwin notifications leave userInfo unused 

void sharedModeAccountChangedCallback(CFNotificationCenterRef center, void * observer, CFStringRef name, void const * object, __unused CFDictionaryRef userInfo) 

{ 

    // Invoke account cleanup logic here 

} 

Mer information om de tillgängliga alternativen för CFNotificationAddObserver, eller om du vill se motsvarande metodsignaturer i Swift, finns i:

För iOS kräver din app en bakgrundsbehörighet för att förbli aktiv i bakgrunden och lyssna på Darwin-meddelanden. Bakgrundsfunktionen måste läggas till för att stödja en annan bakgrundsåtgärd – appen kan bli föremål för avslag från Apple App Store om den bara har en bakgrundsfunktion för att lyssna efter Darwin-meddelanden. Om appen redan har konfigurerats för att slutföra bakgrundsåtgärder kan du lägga till lyssnaren som en del av den åtgärden. Mer information om iOS-bakgrundsfunktioner finns i Konfigurera bakgrundskörningslägen

Microsoft program som stöder läget för delad enhet

Dessa Microsoft-program stöder Microsoft Entra-läge för delad enhet:

Important

Offentlig förhandsversion tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller har begränsade funktioner. Mer information finns i Universella licensvillkor för onlinetjänster.

MdM:er från tredje part som stöder läget för delad enhet

Dessa MDM-leverantörer (Mobile Správa zariadení) från tredje part stöder Microsoft Entra delat enhetsläge:

Nästa steg

Om du vill se läget för delad enhet i praktiken innehåller följande kodexempel på GitHub ett exempel på hur du kör en arbetsapp i frontlinjen på en iOS-enhet i läget för delad enhet:

MSAL iOS Swift Microsoft Graph API Exempel