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:
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:
- W Xcode otwórz Ustawienia projektu > Możliwości.
- Włącz udostępnianie łańcucha kluczy.
- Dodaj identyfikator grupy łańcucha kluczy. Użyj tego samego identyfikatora we wszystkich aplikacjach, w których chcesz udostępniać stan.
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];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().currentUserObjective-C
FIRUser *user = FIRAuth.auth.currentUser;
Powrót do nieudostępnianego łańcucha kluczy
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];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:
Utwórz odniesienie do bieżącego użytkownika do wykorzystania w przyszłości.
Swift
var user = Auth.auth().currentUserObjective-C
FIRUser *user = FIRAuth.auth.currentUser;(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 }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];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 }];Użytkownik jest teraz dostępny dla innych aplikacji, które mają dostęp do tej samej grupy dostępu.