Para compartir estados de autenticación entre múltiples aplicaciones o extensiones en plataformas Apple, almacene el estado de autenticación en un llavero compartido usando Servicios de Llavero y configure sus aplicaciones para usar el llavero compartido.
Esto permite a los usuarios:
- Inicie sesión una vez y acceda a todas las aplicaciones que pertenecen al mismo grupo de acceso.
- Cierre sesión una vez y cierre sesión en todas las aplicaciones que pertenecen al mismo grupo de acceso.
Compartir el estado de autenticación entre aplicaciones
Para compartir el estado de autenticación entre aplicaciones:
Configure un grupo de acceso para sus aplicaciones.
Puede utilizar un grupo de acceso a llaveros o un grupo de aplicaciones. Consulte Compartir acceso a elementos de llavero entre una colección de aplicaciones para obtener más detalles.
Para configurar un grupo de acceso a llaveros, haga lo siguiente para cada aplicación:
- En Xcode, vaya a Configuración del proyecto > Capacidades .
- Habilite el uso compartido de llaveros.
- Agregue un identificador de grupo de llaveros. Utilice el mismo identificador para todas las aplicaciones que desee compartir.
En cada aplicación, configure el grupo de acceso al grupo de acceso al llavero o al grupo de aplicaciones que creó en el paso anterior.
Rápido
do { try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1") } catch let error as NSError { print("Error changing user access group: %@", error) }
C objetivo
[FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1" error:nil];
En al menos una aplicación, inicie sesión como usuario con cualquier método de inicio de sesión.
Rápido
Auth.auth().signInAnonymously { result, error in // User signed in }
C objetivo
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
El mismo usuario actual está disponible en todas las aplicaciones del grupo de acceso.
Rápido
var user = Auth.auth().currentUser
C objetivo
FIRUser *user = FIRAuth.auth.currentUser;
Volver a un llavero no compartido
Configure el grupo de acceso en
nil
para dejar de compartir el estado de autenticación.Rápido
do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }
C objetivo
[FIRAuth.auth useUserAccessGroup:nil error:nil];
Inicie sesión como usuario con cualquier método de inicio de sesión. El estado de usuario no estará disponible para ninguna otra aplicación.
Rápido
Auth.auth().signInAnonymously { result, error in // User signed in }
C objetivo
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Migrar un usuario que ha iniciado sesión a un llavero compartido
Para migrar un usuario que ya inició sesión a un estado compartido:
Haga una referencia al usuario actual para uso futuro.
Rápido
var user = Auth.auth().currentUser
C objetivo
FIRUser *user = FIRAuth.auth.currentUser;
(Opcional) Verifique el estado de autenticación del grupo de acceso que desea compartir.
Rápido
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 }
C objetivo
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 }
Utilice un grupo de acceso que configuró previamente en la configuración del proyecto.
Rápido
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }
C objetivo
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
Actualiza el usuario actual.
Rápido
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
C objetivo
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
Ahora otras aplicaciones que tienen acceso al mismo grupo de acceso pueden acceder al usuario.