Abilitazione dell'autenticazione tra app con portachiavi Apple condiviso

Per condividere gli stati di autenticazione tra più app o estensioni sulle piattaforme Apple, archivia lo stato di autenticazione in un portachiavi condiviso utilizzando Servizi Portachiavi e configura le tue app per utilizzare il portachiavi condiviso.

Ciò consente agli utenti di:

  • Accedi una volta e accedi a tutte le app che appartengono allo stesso gruppo di accesso.
  • Esci una volta e sarai disconnesso da tutte le app che appartengono allo stesso gruppo di accesso.

Condividi lo stato di autenticazione tra le app

Per condividere lo stato di autenticazione tra le app:

  1. Configura un gruppo di accesso per le tue app.

    Puoi utilizzare un gruppo di accesso portachiavi o un gruppo di app. Per maggiori dettagli, consulta Condivisione dell'accesso agli elementi del portachiavi in ​​una raccolta di app .

    Per impostare un gruppo di accesso al portachiavi, procedi come segue per ciascuna app:

    1. In Xcode, vai su Impostazioni progetto > Funzionalità .
    2. Abilita la condivisione del portachiavi.
    3. Aggiungi un identificatore di gruppo 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 del portachiavi o sul gruppo di app creato nel passaggio precedente.

    Veloce

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

    Obiettivo-C

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. In almeno un'app, accedi come utente con qualsiasi metodo di accesso.

    Veloce

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

    Obiettivo-C

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

    Lo stesso utente corrente è disponibile in tutte le app nel gruppo di accesso.

    Veloce

    var user = Auth.auth().currentUser
    

    Obiettivo-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.

    Veloce

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

    Obiettivo-C

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. Accedi come utente con qualsiasi metodo di accesso. Lo stato utente non sarà disponibile per altre app.

    Veloce

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

    Obiettivo-C

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

Migrare un utente che ha effettuato l'accesso a un portachiavi condiviso

Per eseguire la migrazione di un utente che ha già effettuato l'accesso a uno stato condiviso:

  1. Fare un riferimento all'utente corrente per un utilizzo futuro.

    Veloce

    var user = Auth.auth().currentUser
    

    Obiettivo-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (Facoltativo) Controlla lo stato di autenticazione del gruppo di accesso che desideri condividere.

    Veloce

    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
    }
    

    Obiettivo-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 che hai impostato in precedenza nelle impostazioni del progetto.

    Veloce

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

    Obiettivo-C

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. Aggiorna l'utente corrente.

    Veloce

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

    Obiettivo-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Ora è possibile accedere all'utente da altre app che hanno accesso allo stesso gruppo di accesso.