Per condividere gli stati di autenticazione tra più app o estensioni sulle piattaforme Apple, memorizza lo stato di autenticazione in un portachiavi condiviso utilizzando Keychain Services e configura le tue app in modo che utilizzino il portachiavi condiviso.
In questo modo, gli utenti possono:
- Accedi una volta e accedi a tutte le app che appartengono allo stesso gruppo di accesso.
- Esci una volta sola ed esci da tutte le app che appartengono allo stesso accesso gruppo.
Condividi lo stato di autenticazione tra app
Per condividere lo stato di autenticazione tra app:
Configura un gruppo di accesso per le tue app.
Puoi utilizzare un gruppo di accesso di portachiavi o un gruppo di app. Consulta la sezione Condividere l'accesso agli elementi del portachiavi tra una raccolta di app per maggiori dettagli.
Per configurare un gruppo di accesso al portachiavi, procedi nel seguente modo per ogni app:
- In Xcode, vai a Impostazioni progetto > Funzionalità.
- Attiva condivisione portachiavi.
- Aggiungi un identificatore di gruppo di portachiavi. Utilizza lo stesso identificatore per tutte le app di cui vuoi condividere lo stato.
In ogni app, imposta il gruppo di accesso sul gruppo di accesso al portachiavi o sul gruppo di app che hai creato nel passaggio precedente.
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];
In almeno un'app, fai accedere un utente con qualsiasi metodo di accesso.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Lo stesso utente corrente è disponibile in tutte le app del gruppo di accesso.
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
Torna a un portachiavi non condiviso
Imposta il gruppo di accesso su
nil
per interrompere la condivisione dello stato di autenticazione.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];
Consenti l'accesso a un utente con qualsiasi metodo di accesso. Lo stato dell'utente non sarà disponibile a qualsiasi altra app.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Eseguire la migrazione di un utente che ha eseguito l'accesso a un portachiavi condiviso
Per eseguire la migrazione di un utente che ha già eseguito l'accesso a uno stato condiviso:
Fai riferimento all'utente corrente per uso futuro.
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
(Facoltativo) Controlla lo stato di autenticazione del gruppo di accesso che vuoi condividere.
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 }
Utilizza un gruppo di accesso impostato in precedenza nelle impostazioni del progetto.
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];
Aggiorna l'utente corrente.
Swift
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Objective-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
Ora l'utente può essere raggiunto da altre app che hanno accesso allo stesso gruppo di accesso.