Para compartilhar estados de autenticação entre vários apps ou extensões em plataformas Apple, armazene o estado de autenticação em uma chave compartilhada usando os Serviços de Chaves e configure seus aplicativos para usarem a chave compartilhada.
Isso permite que os usuários:
- Faça login uma vez e faça login em todos os aplicativos que pertencem ao mesmo grupo de acesso.
- Saia uma vez e saia de todos os aplicativos que pertencem ao mesmo grupo de acesso.
Compartilhe o estado de autenticação entre aplicativos
Para compartilhar o estado de autenticação entre aplicativos:
Configure um grupo de acesso para seus aplicativos.
Você pode usar um grupo de acesso de chaves ou um grupo de aplicativos. Consulte Compartilhando acesso a itens de chaveiro entre uma coleção de aplicativos para obter detalhes.
Para configurar um grupo de acesso às chaves, faça o seguinte para cada aplicativo:
- No Xcode, vá para Configurações do projeto > Capacidades .
- Ative o compartilhamento de chaveiro.
- Adicione um identificador de grupo de chaves. Use o mesmo identificador para todos os aplicativos cujo estado você deseja compartilhar.
Em cada aplicativo, defina o grupo de acesso para o grupo de acesso de chaves ou grupo de aplicativos que você criou na etapa anterior.
Rápido
do { try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1") } catch let error as NSError { print("Error changing user access group: %@", error) }
Objetivo-C
[FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1" error:nil];
Em pelo menos um aplicativo, faça login de um usuário com qualquer método de login.
Rápido
Auth.auth().signInAnonymously { result, error in // User signed in }
Objetivo-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
O mesmo usuário atual está disponível em todos os aplicativos do grupo de acesso.
Rápido
var user = Auth.auth().currentUser
Objetivo-C
FIRUser *user = FIRAuth.auth.currentUser;
Volte para um chaveiro não compartilhado
Defina o grupo de acesso como
nil
para interromper o compartilhamento do estado de autenticação.Rápido
do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }
Objetivo-C
[FIRAuth.auth useUserAccessGroup:nil error:nil];
Faça login em um usuário com qualquer método de login. O estado do usuário não estará disponível para nenhum outro aplicativo.
Rápido
Auth.auth().signInAnonymously { result, error in // User signed in }
Objetivo-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Migrar um usuário conectado para uma chave compartilhada
Para migrar um usuário que já fez login para um estado compartilhado:
Faça uma referência ao usuário atual para uso futuro.
Rápido
var user = Auth.auth().currentUser
Objetivo-C
FIRUser *user = FIRAuth.auth.currentUser;
(Opcional) Verifique o estado de autenticação do grupo de acesso que você deseja compartilhar.
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 }
Objetivo-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 }
Use um grupo de acesso definido anteriormente nas configurações do projeto.
Rápido
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }
Objetivo-C
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
Atualize o usuário atual.
Rápido
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Objetivo-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
O usuário agora pode ser acessado por outros apps que tenham acesso ao mesmo grupo de acesso.