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:
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:
- En Xcode, ve a Configuración del proyecto > Funciones.
- Habilita la opción “Uso compartido de llaveros”.
- Agrega un identificador de grupo de llaveros. Usa el mismo identificador para todas las apps que quieres que compartan el estado.
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];
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
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];
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:
Haz una referencia al usuario actual para usarla más adelante.
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
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 }
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];
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 }];
Ahora, otras apps que tienen acceso al mismo grupo de acceso pueden acceder al usuario.