Włączanie uwierzytelniania w różnych aplikacjach za pomocą udostępnionego pęku kluczy Apple

Aby udostępniać stany uwierzytelniania w wielu aplikacjach lub rozszerzeniach na platformach Apple, zapisz stan uwierzytelniania w udostępnianym łańcuchu kluczy za pomocą usług łańcucha kluczy i skonfiguruj aplikacje tak, aby korzystały z tego łańcucha.

Dzięki temu użytkownicy mogą:

  • zalogować się raz i być zalogowani we wszystkich aplikacjach należących do tej samej grupy dostępu;
  • wylogować się raz i być wylogowani we wszystkich aplikacjach należących do tej samej grupy dostępu.

Udostępnianie stanu uwierzytelniania między aplikacjami

Aby udostępniać stan uwierzytelniania między aplikacjami:

  1. Skonfiguruj grupę dostępu dla swoich aplikacji.

    Możesz użyć grupy dostępu do łańcucha kluczy lub grupy aplikacji. Więcej informacji znajdziesz w artykule Udostępnianie dostępu do elementów łańcucha kluczy w kolekcji aplikacji.

    Aby skonfigurować grupę dostępu do łańcucha kluczy, wykonaj te czynności w przypadku każdej aplikacji:

    1. W Xcode otwórz Ustawienia projektu > Możliwości.
    2. Włącz udostępnianie łańcucha kluczy.
    3. Dodaj identyfikator grupy łańcucha kluczy. Użyj tego samego identyfikatora we wszystkich aplikacjach, w których chcesz udostępniać stan.
  2. W każdej aplikacji ustaw grupę dostępu na grupę dostępu do łańcucha kluczy lub grupę aplikacji utworzoną w poprzednim kroku.

    Swift

    do {
      try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1")
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. W co najmniej 1 aplikacji zaloguj użytkownika za pomocą dowolnej metody logowania.

    Swift

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objective-C

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                               NSError *_Nullable error) {
      // User signed in
    }];
    

    Ten sam bieżący użytkownik jest dostępny we wszystkich aplikacjach w grupie dostępu.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

Powrót do nieudostępnianego łańcucha kluczy

  1. Aby zatrzymać udostępnianie stanu uwierzytelniania, ustaw grupę dostępu na nil.

    Swift

    do {
      try Auth.auth().useUserAccessGroup(nil)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. Zaloguj użytkownika za pomocą dowolnej metody logowania. Stan użytkownika nie będzie dostępny w żadnej innej aplikacji.

    Swift

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objective-C

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                       NSError *_Nullable error) {
      // User signed in
    }];
    

Migracja zalogowanego użytkownika do udostępnianego łańcucha kluczy

Aby przeprowadzić migrację użytkownika, który jest już zalogowany, do stanu udostępnianego:

  1. Utwórz odniesienie do bieżącego użytkownika do wykorzystania w przyszłości.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (Opcjonalnie) Sprawdź stan uwierzytelniania grupy dostępu, którą chcesz udostępnić.

    Swift

    let accessGroup = "TEAMID.com.example.group1"
    var tempUser: User?
    do {
      try tempUser = Auth.auth().getStoredUser(forAccessGroup: accessGroup)
    } catch let error as NSError {
      print("Error getting stored user: %@", error)
    }
    if tempUser != nil {
      // A user exists in the access group
    } else {
      // No user exists in the access group
    }
    

    Objective-C

    NSString *accessGroup = @"TEAMID.com.example.group1";
    FIRUser *tempUser = [FIRAuth getStoredUserForAccessGroup:accessGroup
                                                       error:nil];
    if (tempUser) {
      // A user exists in the access group
      } else {
      // No user exists in the access group
    }
    
  3. Użyj grupy dostępu, którą wcześniej skonfigurowano w ustawieniach projektu.

    Swift

    do {
      try Auth.auth().useUserAccessGroup(accessGroup)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. Zaktualizuj bieżącego użytkownika.

    Swift

    Auth.auth().updateCurrentUser(user!) { error in
      // Error handling
    }
    

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Użytkownik jest teraz dostępny dla innych aplikacji, które mają dostęp do tej samej grupy dostępu.