O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Autenticar usando Apple e Unity

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode permitir que seus usuários se autentiquem no Firebase usando o ID Apple deles usando o SDK do Firebase para realizar o fluxo de login OAuth 2.0 de ponta a ponta.

Antes de você começar

Para fazer login de usuários usando a Apple, primeiro configure Fazer login com a Apple no site do desenvolvedor da Apple e, em seguida, ative a Apple como provedor de login para seu projeto do Firebase.

Junte-se ao Programa de Desenvolvedores da Apple

Entrar com a Apple só pode ser configurado por membros do Apple Developer Program .

Configurar login com a Apple

O Apple Sign In deve estar ativado e configurado corretamente em seu projeto do Firebase. A configuração do Apple Developer varia entre as plataformas Android e Apple. Siga a seção "Configurar login com a Apple" dos guias iOS+ e/ou Android antes de continuar.

Ativar a Apple como provedor de login

  1. No console do Firebase , abra a seção Auth . Na guia Método de login , habilite o provedor Apple .
  2. Defina as configurações do provedor de login da Apple:
    1. Se você estiver implantando seu aplicativo apenas em plataformas Apple, poderá deixar os campos ID do serviço, ID da equipe da Apple, chave privada e ID da chave vazios.
    2. Para suporte em dispositivos Android:
      1. Adicione o Firebase ao seu projeto Android . Certifique-se de registrar a assinatura SHA-1 do seu aplicativo ao configurá-lo no Firebase console.
      2. No console do Firebase , abra a seção Auth . Na guia Método de login , habilite o provedor Apple . Especifique o ID do serviço que você criou na seção anterior. Além disso, na seção de configuração do fluxo de código OAuth, especifique seu ID de equipe da Apple e a chave privada e o ID da chave que você criou na seção anterior.

Cumpra os requisitos de dados anônimos da Apple

Entrar com a Apple oferece aos usuários a opção de anonimizar seus dados, incluindo seu endereço de e-mail, ao fazer login. Os usuários que escolhem essa opção têm endereços de e-mail com o domínio privaterelay.appleid.com . Ao usar o Login com a Apple em seu aplicativo, você deve cumprir todas as políticas ou termos de desenvolvedor aplicáveis ​​da Apple em relação a esses IDs Apple anônimos.

Isso inclui a obtenção de qualquer consentimento necessário do usuário antes de associar qualquer informação pessoal de identificação direta a um ID Apple anônimo. Ao usar o Firebase Authentication, isso pode incluir as seguintes ações:

  • Vincule um endereço de e-mail a um ID Apple anônimo ou vice-versa.
  • Vincular um número de telefone a um ID Apple anônimo ou vice-versa
  • Vincule uma credencial social não anônima (Facebook, Google, etc) a um ID Apple anônimo ou vice-versa.

A lista acima não é exaustiva. Consulte o Contrato de Licença do Apple Developer Program na seção Membership da sua conta de desenvolvedor para garantir que seu aplicativo atenda aos requisitos da Apple.

Acesse a classe Firebase.Auth.FirebaseAuth

A classe FirebaseAuth é o gateway para todas as chamadas de API. Ele pode ser acessado por meio de FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Gerencie o fluxo de login com o SDK do Firebase

O processo de login com a Apple varia entre as plataformas Apple e Android.

Nas plataformas da Apple

  1. Instale um plug-in de terceiros para lidar com nonce de login da Apple e geração de token, como o pacote de armazenamento de ativos da Unity do Unity . Pode ser necessário alterar o código para sondar a string de nonce aleatório gerada em seu estado de string bruta para uso em operações do Firebase (ou seja, armazenar uma cópia dela antes que o formulário SHA256 de resumo do nonce seja criado).

  2. Use a string de token resultante e o nonce bruto para criar uma credencial do Firebase e fazer login no Firebase.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

  3. O mesmo padrão pode ser usado com ReauthenticateAsync que pode ser usado para recuperar novas credenciais para operações confidenciais que exigem login recente. Para obter mais informações, consulte Gerenciar usuários .

  4. Ao vincular com o Apple Sign In em plataformas da Apple, você pode encontrar um erro informando que uma conta existente do Firebase já foi vinculada à conta da Apple. Quando isso ocorrer, uma Firebase.Auth.FirebaseAccountLinkException será lançada em vez da Firebase.FirebsaeException padrão. A exceção inclui uma propriedade UserInfo.UpdatedCredential que, se válida, pode ser usada para fazer login do usuário vinculado à Apple por meio de FirebaseAuth.SignInWithCredential . A credencial atualizada contorna a necessidade de gerar um novo token de entrada da Apple com nonce para a operação de entrada.

    Observe que LinkWithCredentialAsync continuará a lançar o Firebase.FirebaseException padrão em falhas de link e, portanto, não poderá retornar uma credencial atualizada.

    auth.CurrentUser.LinkAndRetrieveDataWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompleted) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( signInTask => {
                      // Handle Sign in result.
                    });
                } else {
                  DebugLog("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });
    

No Android

No Android, autentique seus usuários com o Firebase integrando o login OAuth genérico baseado na Web ao seu aplicativo usando o SDK do Firebase para realizar o fluxo de login de ponta a ponta.

Para lidar com o fluxo de login com o SDK do Firebase, siga estas etapas:

  1. Construa uma instância de um FederatedOAuthProviderData configurado com o ID do provedor apropriado para a Apple.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. Opcional: especifique escopos adicionais do OAuth 2.0 além do padrão que você deseja solicitar ao provedor de autenticação.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. Opcional: se você quiser exibir a tela de login da Apple em um idioma diferente do inglês, defina o parâmetro locale . Consulte os documentos Entrar com a Apple para obter as localidades com suporte.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. Depois que os dados do seu provedor forem configurados, use-os para criar um FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Autentique-se com o Firebase usando o objeto do provedor Auth. Observe que, diferentemente de outras operações do FirebaseAuth, isso assumirá o controle da sua interface do usuário, exibindo uma visualização da Web na qual o usuário pode inserir suas credenciais.

    Para iniciar o fluxo de login, chame signInWithProvider :

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. O mesmo padrão pode ser usado com ReauthenticateWithProvider que pode ser usado para recuperar novas credenciais para operações confidenciais que exigem login recente.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. E você pode usar linkWithCredential() para vincular diferentes provedores de identidade a contas existentes.

    Observe que a Apple exige que você obtenha o consentimento explícito dos usuários antes de vincular suas contas da Apple a outros dados.

    Por exemplo, para vincular uma conta do Facebook à conta atual do Firebase, use o token de acesso obtido ao fazer login do usuário no Facebook:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkAndRetrieveDataWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkAndRetrieveDataWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkAndRetrieveDataWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.SignInResult signInResult = task.Result;
          Firebase.Auth.FirebaseUser user = signInResult.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Entrar com o Apple Notes

Ao contrário de outros provedores compatíveis com o Firebase Auth, a Apple não fornece um URL de foto.

Além disso, quando o usuário opta por não compartilhar seu e-mail com o aplicativo, a Apple fornece um endereço de e-mail exclusivo para esse usuário (no formato xyz@privaterelay.appleid.com ), que é compartilhado com seu aplicativo. Se você configurou o serviço de retransmissão de e-mail privado, a Apple encaminha os e-mails enviados para o endereço anônimo para o endereço de e-mail real do usuário.

A Apple só compartilha informações do usuário, como o nome de exibição, com aplicativos na primeira vez que um usuário faz login. Normalmente, o Firebase armazena o nome de exibição na primeira vez que um usuário faz login com a Apple, que você pode obter com getCurrentUser().getDisplayName() . No entanto, se você já usou a Apple para fazer login de um usuário no aplicativo sem usar o Firebase, a Apple não fornecerá ao Firebase o nome de exibição do usuário.

Próximos passos

Depois que um usuário entra pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais — ou seja, o nome de usuário e a senha, número de telefone ou informações do provedor de autenticação — com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do projeto, independentemente de como o usuário faça login.

Nos seus aplicativos, você pode obter as informações básicas do perfil do usuário no objeto firebase::auth::user. Consulte Gerenciar usuários .

Nas regras de segurança do Firebase Realtime Database e do Cloud Storage, você pode obter o ID de usuário exclusivo do usuário conectado na variável de autenticação e usá-lo para controlar quais dados um usuário pode acessar.