Modyfikowanie aplikacji systemu iOS lub iPadOS w celu obsługi trybu urządzenia udostępnionego

Z tego samouczka dowiesz się, jak zmodyfikować aplikację dla systemu iOS lub iPadOS w celu obsługi trybu udostępnionego urządzenia (SDM). SDM to funkcja Microsoft Entra ID, która umożliwia organizacjom konfigurowanie urządzenia z systemem iOS, iPadOS lub Androidem do łatwego udostępniania go wielu pracownikom, co jest powszechną praktyką w środowiskach pracy pracowników pierwszej linii.

W tym samouczku nauczysz się następujących rzeczy:

  • Dodano obsługę trybu pojedynczego konta.
  • Skonfiguruj aplikację tak, aby korzystała z narzędzia SDM.
  • Wykryj tryb urządzenia współdzielonego.
  • Określ, czy zalogowany użytkownik uległ zmianie.

Wymagania wstępne

Wykrywanie trybu udostępnionego urządzenia

Wykrywanie trybu udostępnionego urządzenia jest ważne dla aplikacji. Wiele aplikacji wymaga zmiany środowiska użytkownika (UX), gdy aplikacja jest używana na urządzeniu udostępnionym. Na przykład Twoja aplikacja może zawierać funkcję „Zarejestruj się”, co nie jest odpowiednie w przypadku pracownika pierwszej linii, ponieważ prawdopodobnie ma on już konto. Możesz również dodać dodatkowe zabezpieczenia do sposobu, w jaki aplikacja obsługuje dane, jeśli działa ona w trybie urządzenia współdzielonego.

Użyj interfejsu getDeviceInformationWithParameters:completionBlock: API w elemecie MSALPublicClientApplication , aby określić, czy aplikacja jest uruchomiona na urządzeniu w trybie urządzenia udostępnionego.

Poniższe fragmenty kodu pokazują przykłady użycia interfejsu 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
}];

Pobierz zalogowanego użytkownika i ustal, czy użytkownik zmienił się na urządzeniu

Inną ważną częścią obsługi trybu udostępnionego urządzenia jest określenie stanu użytkownika na urządzeniu i wyczyszczenie danych aplikacji, jeśli użytkownik uległ zmianie lub jeśli na urządzeniu nie ma żadnego użytkownika. Odpowiadasz za zapewnienie, że dane nie wyciekły do innego użytkownika.

Za pomocą interfejsu getCurrentAccountWithParameters:completionBlock: API możesz wysyłać zapytania o obecnie zalogowane konto na urządzeniu.

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

Globalne logowanie użytkownika

Po skonfigurowaniu urządzenia jako urządzenia udostępnionego aplikacja może wywołać acquireTokenWithParameters:completionBlock: interfejs API w celu zalogowania się na koncie. Konto będzie dostępne globalnie dla wszystkich kwalifikujących się aplikacji na urządzeniu po pierwszym zalogowaniu się na koncie.

Objective-C

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

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Globalnie wyloguj użytkownika

Poniższy kod usuwa zalogowane konto i czyści buforowane tokeny nie tylko z aplikacji, ale także z urządzenia, które jest w trybie urządzenia udostępnionego. Nie powoduje to jednak wyczyszczenia danych z aplikacji. Musisz wyczyścić dane z aplikacji i wyczyścić wszystkie buforowane dane, które aplikacja może wyświetlać użytkownikowi.

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

}];

Wtyczka Microsoft Enterprise SSO dla urządzeń Apple czyści stan tylko dla aplikacji. Stan nie jest czyszczony w przeglądarce Safari. Możesz użyć opcjonalnej właściwości signoutFromBrowser, pokazanej w przykładowych fragmentach kodu, aby spowodować wylogowanie w przeglądarce Safari. Powoduje to krótkie uruchomienie przeglądarki na urządzeniu.

Odbieranie emisji w celu wykrywania globalnego wylogowania zainicjowanego z innych aplikacji

Aby odebrać emisję zmiany konta, należy zarejestrować odbiornik emisji. Po odebraniu sygnału zmiany konta natychmiast sprawdź zalogowanego użytkownika i ustal, czy użytkownik zmienił się na urządzeniu. Jeśli zostanie wykryta zmiana, zainicjuj czyszczenie danych dla wcześniej zalogowanego konta. Zaleca się prawidłowe zatrzymywanie wszystkich operacji i czyszczenie danych.

Poniższy fragment kodu pokazuje, jak można zarejestrować odbiornik emisji.

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 

} 

Aby uzyskać więcej informacji na temat dostępnych opcji dla CFNotificationAddObserver lub zobaczyć odpowiadające im sygnatury metod w języku Swift, zobacz:

W przypadku systemu iOS aplikacja wymaga uprawnienia do działania w tle i nasłuchiwania powiadomień Darwin. Należy dodać uprawnienie działania w tle, aby obsługiwać inną operację wykonywaną w tle — aplikacja może zostać odrzucona z Apple App Store, jeśli ma uprawnienie działania w tle wyłącznie do nasłuchiwania powiadomień Darwin. Jeśli aplikacja jest już skonfigurowana do wykonywania operacji w tle, możesz dodać odbiornik w ramach tej operacji. Aby uzyskać więcej informacji na temat funkcji w tle systemu iOS, zobacz Konfigurowanie trybów wykonywania w tle

Aplikacje firmy Microsoft obsługujące tryb urządzenia współdzielonego

Te aplikacje firmy Microsoft obsługują tryb urządzenia współdzielonego platformy Microsoft Entra:

Ważna

Publiczna wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub mają ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Uniwersalne postanowienia licencyjne dotyczące usług online.

MDM innych firm, które obsługują tryb udostępnionego urządzenia

Ci zewnętrzni dostawcy rozwiązań Mobile Zarządzanie urządzeniami (MDM) obsługują tryb urządzenia udostępnionego Microsoft Entra:

Następne kroki

Aby zobaczyć tryb udostępnionego urządzenia w działaniu, poniższy przykład kodu w serwisie GitHub pokazuje, jak uruchomić aplikację dla pracowników pierwszej linii na urządzeniu z systemem iOS w trybie udostępnionego urządzenia:

Przykład interfejsu API Microsoft Graph dla MSAL iOS Swift