Para compartilhar estados de autenticação em vários aplicativos ou extensões nas plataformas Apple, armazene o estado de autenticação em um conjunto de chaves compartilhadas usando o Serviço de conjunto de chaves (em inglês). Em seguida, configure os aplicativos para usar o conjunto de chaves compartilhadas.
Isso permite que os usuários realizem estas ações:
- Façam login uma vez e em todos os aplicativos que pertencem ao mesmo grupo de acesso.
- Saiam uma vez e de todos os aplicativos que pertencem ao mesmo grupo de acesso.
Compartilhar o estado de autenticação entre aplicativos
Para compartilhar o estado de autenticação entre aplicativos:
Configure um grupo de acesso para os aplicativos.
É possível usar um grupo de acesso de conjunto de chaves ou um grupo de aplicativos. Consulte Como compartilhar o acesso aos itens do conjunto de chaves entre uma coleção de aplicativos (em inglês) para detalhes.
Para configurar um grupo de acesso de conjunto de chaves, faça o seguinte para cada aplicativo:
- No Xcode, acesse Project settings > Capabilities.
- Ative o Compartilhamento de conjunto de chaves.
- Adicione um identificador de grupo de conjunto de chaves. Use o mesmo identificador para todos os aplicativos em que você quer compartilhar o estado.
Em cada aplicativo, defina o grupo de acesso ao grupo de acesso do conjunto de chaves ou grupo de aplicativo criado na etapa 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];
Em pelo menos um aplicativo, faça login em um usuário com qualquer método de login.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
O mesmo usuário atual está disponível em todos os aplicativos no grupo de acesso.
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
Mudar para um conjunto de chaves não compartilhado
Defina o grupo de acesso como
nil
para interromper o compartilhamento do estado de autenticação.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];
Faça o login de um usuário com qualquer método de login. O estado do usuário não estará disponível para nenhum outro aplicativo.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Migrar um usuário conectado para um conjunto de chaves compartilhado
Para migrar um usuário que já tenha feito login em um estado compartilhado:
Faça uma referência ao usuário atual para uso futuro.
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
(Opcional) Verifique o estado de autorização do grupo de acesso que você quer compartilhar.
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 }
Use um grupo de acesso que você configurou anteriormente nas configurações do projeto.
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];
Atualize o usuário atual.
Swift
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Objective-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
O usuário agora pode ser acessado por outros aplicativos que acessem o mesmo grupo.