Ändern Sie Ihre iOS- oder iPadOS-Anwendung, um den Modus für gemeinsam genutzte Geräte zu unterstützen

In diesem Lernprogramm erfahren Sie, wie Sie eine iOS- oder iPadOS-Anwendung ändern, um den modus für gemeinsame Geräte (Shared Device Mode, SDM) zu unterstützen. SDM ist eine Microsoft Entra ID-Funktion, mit der Organisationen ein iOS-, iPadOS- oder Android-Gerät für die einfache gemeinsame Nutzung durch mehrere Mitarbeitende konfigurieren können, was in Arbeitsumgebungen mit Frontline-Mitarbeitenden gängige Praxis ist.

In diesem Tutorial lernen Sie:

  • Fügen Sie Unterstützung für den Einzelkontomodus hinzu.
  • Konfigurieren Sie Ihre App für die Verwendung von SDM.
  • Erkennen des Modus für gemeinsam genutzte Geräte.
  • Ermitteln Sie, ob sich der angemeldete Benutzer geändert hat.

Voraussetzungen

Freigegebenen Gerätemodus erkennen

Das Erkennen des Modus für gemeinsam genutzte Geräte ist für Ihre Anwendung wichtig. Viele Anwendungen erfordern eine Anpassung der User Experience (UX), wenn die Anwendung auf einem gemeinsam genutzten Gerät verwendet wird. Ihre Anwendung kann z. B. über ein "Registrierungsfeature" verfügen, das für mitarbeiter in Service und Produktion nicht geeignet ist, da sie wahrscheinlich bereits über ein Konto verfügen. Möglicherweise möchten Sie auch zusätzliche Sicherheit für die Verarbeitung von Daten ihrer Anwendung hinzufügen, wenn sie sich im modus für gemeinsam genutzte Geräte befindet.

Verwenden Sie die getDeviceInformationWithParameters:completionBlock: API in MSALPublicClientApplication, um festzustellen, ob eine App auf einem Gerät im Modus für freigegebene Geräte ausgeführt wird.

Die folgenden Codeausschnitte zeigen Beispiele für die Verwendung der getDeviceInformationWithParameters:completionBlock: API.

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

Den angemeldeten Benutzer abrufen und feststellen, ob der Benutzer auf dem Gerät gewechselt hat

Ein weiterer wichtiger Bestandteil der Unterstützung des modus für gemeinsam genutzte Geräte ist die Bestimmung des Zustands des Benutzers auf dem Gerät und das Löschen von Anwendungsdaten, wenn sich ein Benutzer geändert hat oder kein Benutzer überhaupt auf dem Gerät vorhanden ist. Sie sind dafür verantwortlich, sicherzustellen, dass Daten nicht an einen anderen Benutzer verloren gehen.

Sie können die API verwenden getCurrentAccountWithParameters:completionBlock: , um das aktuell angemeldete Konto auf dem Gerät abzufragen.

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

Globales Anmelden eines Benutzers

Wenn ein Gerät als freigegebenes Gerät konfiguriert ist, kann Ihre Anwendung die acquireTokenWithParameters:completionBlock: API aufrufen, um sich beim Konto anzumelden. Das Konto ist global für alle berechtigten Apps auf dem Gerät verfügbar, nachdem sich die erste App beim Konto angemeldet hat.

Objective-C

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

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Globales Abmelden eines Benutzers

Der folgende Code entfernt das angemeldete Konto und löscht zwischengespeicherte Token nicht nur aus der App, sondern auch vom Gerät, das sich im Modus für freigegebene Geräte befindet. Die Daten werden jedoch nicht aus Ihrer Anwendung gelöscht. Sie müssen die Daten in Ihrer Anwendung löschen und alle zwischengespeicherten Daten löschen, die Ihre Anwendung dem Benutzer möglicherweise anzeigt.

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

}];

Das Microsoft Enterprise-SSO-Plug-In für Apple-Geräte löscht den Status nur für Anwendungen. Es löscht nicht den Status im Safari-Browser. Sie können die optionale Eigenschaft signoutFromBrowser verwenden, die in Codeausschnitten angezeigt wird, um in Safari eine Abmeldung im Browser auszulösen. Dadurch wird der Browser kurz auf dem Gerät gestartet.

Empfangen einer Übertragung zur Erkennung einer von anderen Anwendungen initiierten globalen Abmeldung

Um die Übertragung für eine Kontoänderung zu empfangen, müssen Sie einen Übertragungsempfänger registrieren. Wenn eine Kontoänderungsübertragung empfangen wird, rufen Sie sofort die angemeldeten Benutzer ab und ermitteln, ob ein Benutzer auf dem Gerät geändert wurde. Wenn eine Änderung erkannt wird, initiieren Sie die Datenbereinigung für ein zuvor angemeldetes Konto. Es wird empfohlen, alle Vorgänge ordnungsgemäß zu beenden und eine Datenbereinigung durchzuführen.

Der folgende Codeausschnitt zeigt, wie Sie einen Übertragungsempfänger registrieren können.

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 

} 

Weitere Informationen zu den für CFNotificationAddObserver verfügbaren Optionen oder zu den entsprechenden Methodensignaturen in Swift finden Sie unter:

Für iOS erfordert Ihre App eine Hintergrundberechtigung, um im Hintergrund aktiv zu bleiben und Darwin-Benachrichtigungen anzuhören. Die Hintergrundberechtigung darf nur hinzugefügt werden, um einen anderen Vorgang im Hintergrund zu unterstützen – Ihre App kann vom Apple App Store abgelehnt werden, wenn sie eine Hintergrundberechtigung nur zum Lauschen auf Darwin-Benachrichtigungen verwendet. Wenn Ihre App bereits für den Abschluss von Hintergrundvorgängen konfiguriert ist, können Sie den Listener als Teil dieses Vorgangs hinzufügen. Weitere Informationen zu iOS-Hintergrundfunktionen finden Sie unter Konfigurieren von Hintergrundausführungsmodi

Microsoft Anwendungen, die den gemeinsam genutzten Gerätemodus unterstützen

Diese Microsoft-Anwendungen unterstützen den Microsoft Entra-Modus für gemeinsam genutzte Geräte:

Important

Die öffentliche Vorschau wird ohne Vereinbarung auf Serviceebene bereitgestellt und wird für Produktionsworkloads nicht empfohlen. Einige Features werden möglicherweise nicht unterstützt oder verfügen über eingeschränkte Funktionen. Weitere Informationen finden Sie unter "Universelle Lizenzbedingungen für Onlinedienste".

MDMs von Drittanbietern, die den gemeinsam genutzten Gerätemodus unterstützen

Diese Drittanbieter von Mobile Geräteverwaltung (MDM) unterstützen den Microsoft Entra-Modus für gemeinsam genutzte Geräte:

Nächste Schritte

Um den Modus für gemeinsam genutzte Geräte in Aktion zu sehen, enthält das folgende Codebeispiel für GitHub ein Beispiel für die Ausführung einer Frontline-Worker-App auf einem iOS-Gerät im Modus für gemeinsam genutzte Geräte:

MSAL iOS Swift Microsoft Graph-API-Beispiel