Ativar autenticação entre aplicativos com o conjunto de chaves compartilhadas da Apple

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:

  1. 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:

    1. No Xcode, acesse Project settings > Capabilities.
    2. Ative o Compartilhamento de conjunto de chaves.
    3. Adicione um identificador de grupo de conjunto de chaves. Use o mesmo identificador para todos os aplicativos em que você quer compartilhar o estado.
  2. 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];
    
  3. 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

  1. 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];
    
  2. 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:

  1. 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;
    
  2. (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
    }
    
  3. 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];
    
  4. 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
    }];
    
  5. O usuário agora pode ser acessado por outros aplicativos que acessem o mesmo grupo.