Habilita la autenticación entre apps con el llavero compartido de Apple

Para compartir los estados de autenticación entre varias apps o extensiones en plataformas de Apple, almacena el estado de autenticación en un llavero compartido con Keychain Services y configura tus apps para que lo usen.

Esta acción permite a los usuarios hacer lo siguiente:

  • Acceder una vez y mantener la sesión abierta en todas las apps que pertenezcan al mismo grupo de acceso
  • Salir una vez y mantener la sesión cerrada en todas las apps que pertenezcan al mismo grupo de acceso

Comparte el estado de autenticación entre apps

Sigue estos pasos para compartir el estado de autenticación entre apps:

  1. Configura un grupo de acceso para tus apps.

    Puedes usar un grupo de acceso con llavero o un grupo de apps. Para obtener detalles, consulta Comparte el acceso a elementos en llaveros entre un grupo de apps.

    Para configurar un grupo de acceso con llavero, haz lo siguiente en cada app:

    1. En Xcode, ve a Configuración del proyecto > Funciones.
    2. Habilita la opción “Uso compartido de llaveros”.
    3. Agrega un identificador de grupo de llaveros. Usa el mismo identificador para todas las apps que quieres que compartan el estado.
  2. En cada app, configura el grupo de acceso según el grupo de acceso con llavero o el grupo de apps que creaste en el paso anterior.

    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. Al menos en una app, haz que un usuario acceda con cualquier método de acceso.

    Swift

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

    Objective-C

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

    El mismo usuario actual está disponible en todas las apps del grupo de acceso.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

Cambia a un llavero no compartido

  1. Configura el grupo de acceso en nil para dejar de compartir el estado de autenticación.

    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. Haz que un usuario acceda con cualquier método de acceso. El estado del usuario no estará disponible para ninguna otra app.

    Swift

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

    Objective-C

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

Migra un usuario activo a un llavero compartido

Sigue estos pasos para migrar un usuario activo a un estado compartido:

  1. Haz una referencia al usuario actual para usarla más adelante.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. Verifica el estado de autenticación del grupo de acceso que quieres compartir (opcional).

    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. Usa un grupo de acceso que ya hayas establecido en la configuración del proyecto.

    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. Actualiza al usuario actual.

    Swift

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Ahora, otras apps que tienen acceso al mismo grupo de acceso pueden acceder al usuario.