Attivazione dell'autenticazione tra app con il Portachiavi iCloud condiviso

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:

  1. 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:

    1. In Xcode, vai a Impostazioni progetto > Funzionalità.
    2. Attiva condivisione portachiavi.
    3. Aggiungi un identificatore di gruppo di portachiavi. Utilizza lo stesso identificatore per tutte le app di cui vuoi condividere lo stato.
  2. 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];
    
  3. 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

  1. 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];
    
  2. 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:

  1. Fai riferimento all'utente corrente per uso futuro.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (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
    }
    
  3. 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];
    
  4. 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
    }];
    
  5. Ora l'utente può essere raggiunto da altre app che hanno accesso allo stesso gruppo di accesso.