Autenticar com o Firebase usando um número de telefone com o Unity

Use o Firebase Authentication para fazer o login de um usuário. Basta enviar uma mensagem SMS para o telefone dele. O usuário faz login utilizando um código de uso único contido na mensagem SMS.

Este documento descreve como implementar um fluxo de login com número de telefone usando o SDK do Firebase.

Antes de começar

  1. Antes de poder usar o Firebase Authentication, é necessário adicionar o SDK do Firebase para Unity (especificamente, FirebaseAuth.unitypackage) ao seu projeto do Unity.

    Encontre instruções detalhadas para essas etapas de configuração inicial em Adicionar Firebase ao seu projeto do Unity.

  2. Caso você ainda não tenha conectado o app ao projeto do Firebase, faça isso no Console do Firebase.

No iOS, note que o login de número de telefone requer um dispositivo físico e não funciona em um simulador.

Preocupações com segurança

A autenticação usando apenas um número de telefone é conveniente, porém menos segura do que os outros métodos disponíveis, já que um número de telefone pode ser facilmente transferido entre usuários. Além disso, em dispositivos com vários perfis de usuário, qualquer um que receba mensagens SMS pode fazer login em uma conta usando o número de telefone do dispositivo.

Caso use o login por número de telefone no seu app, você precisa oferecê-lo junto com métodos de login mais seguros e informar aos usuários as implicações de segurança do uso desse tipo de login.

Ativar o login com número de telefone para o projeto do Firebase

Para fazer login de usuários por SMS, ative primeiro o método de login com número de telefone para o projeto do Firebase:

  1. No Console do Firebase, abra a seção Autenticação.
  2. Na página Método de login, ative o método de login por Número de telefone.

A cota de solicitação de login com número de telefone do Firebase é alta o suficiente para evitar que a maioria dos apps seja afetada. No entanto, se for necessário fazer login de um grande volume de usuários com autenticação por telefone, atualize o plano de preços. Consulte a página de preços.

Como começar a receber notificações de APNs (somente iOS)

Para usar a autenticação de número de telefone no iOS, o app precisa receber notificações de APNs do Firebase. Quando você faz o login de um usuário com número de telefone pela primeira vez em um dispositivo, o Firebase Authentication envia uma notificação push silenciosa ao dispositivo para verificar se a solicitação de login do número de telefone vem do seu app. (Por isso, o login de número de telefone não pode ser usado em um simulador.)

Para ativar notificações de APNs para uso com o Firebase Authentication:

  1. No Xcode, ative notificações push para seu projeto.
  2. Faça upload do certificado de APNs para o Firebase. Se você ainda não tiver um certificado de APNs, consulte o artigo Aprovisionamento de certificados SSL para APNs.

    1. No seu projeto do Firebase console, selecione o ícone de engrenagem, Configurações do projeto e a guia Cloud Messaging.

    2. Para fazer o upload dos certificados de desenvolvimento ou de produção, selecione o botão Carregar certificado. É obrigatório ter ao menos um dos dois certificados.

    3. Selecione o arquivo .p12 de cada um deles e informe a senha, se houver. Verifique se o código de pacote corresponde ao código de pacote do seu app. Selecione Salvar.

Como enviar um código de verificação para o telefone do usuário

Para dar início ao login com número de telefone, apresente ao usuário uma interface em que seja solicitado o número de telefone dele. Em seguida, chame PhoneAuthProvider.VerifyPhoneNumber para solicitar ao Firebase o envio de um código de autenticação por SMS para o número informado pelo usuário:

  1. Solicite o número de telefone do usuário.

    Os requisitos legais variam, mas como prática recomendada e para definir as expectativas dos usuários, informe a eles que, se fizerem login com telefone, poderão receber uma mensagem SMS para verificação. Além disso, poderão ser cobrados por esse serviço.

  2. Chame PhoneAuthProvider.VerifyPhoneNumber e transmita a ele o número de telefone do usuário.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
      verificationCompleted: (credential) =&gt {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) =&gt {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) =&gt {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) =&gt {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    Quando você chama PhoneAuthProvider.VerifyPhoneNumber, gera as ações abaixo:
    • O Firebase, no iOS, envia uma notificação push silenciosa para seu app.
    • O Firebase envia uma mensagem SMS contendo um código de autenticação ao número de telefone especificado e passa uma identificação de verificação para sua função de conclusão. Você precisa do código de verificação e da identificação da verificação para fazer o login do usuário.
  3. Salve a identificação da verificação e restaure-a depois que o app é carregado. Ao fazer isso, você tem a garantia de ter uma identificação da verificação válida caso o app seja encerrado antes que o usuário conclua o fluxo de login (por exemplo, ao alternar para o app de SMS).

    Prossiga com a identificação de verificação da maneira que quiser. Uma maneira simples é salvar a identificação da verificação com UnityEngine.PlayerPrefs.

Se o retorno passado para codeSent é chamado, solicite ao usuário que digite o código de verificação ao recebê-lo na mensagem SMS.

Por outro lado, se o retorno para verificationCompleted é chamado, então a verificação automática foi bem-sucedida e agora você tem uma Credential que pode usar conforme descrito abaixo.

Como fazer login do usuário com código de verificação

Depois que o usuário informar o código de verificação da mensagem SMS ao app, faça o login desse usuário. Para isso, crie um objeto Credential por meio do código e do ID da verificação e o transmita para FirebaseAuth.SignInWithCredential.

  1. Solicite o código de verificação ao usuário.
  2. Crie um objeto Credential do código de verificação e da identificação da verificação.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Faça o login do usuário com o objeto Credential:
    auth.SignInWithCredentialAsync(credential).ContinueWith(task =&gt {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

Próximas etapas

Depois que um usuário faz login pela primeira vez, uma nova conta é criada e vinculada às credenciais, que podem ser o número do telefone, o nome de usuário e a senha ou as informações do provedor de autenticação. Essa nova conta é armazenada como parte do projeto do Firebase e pode ser usada para identificar um usuário em todos os apps do projeto, seja qual for o método de login utilizado.

  • Nos seus apps, é possível consultar as informações básicas de perfil do usuário no objeto Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível usar a variável auth para encontrar o código exclusivo do usuário conectado. Use essa informação para controlar o acesso dele aos dados.

Os usuários podem fazer login no app usando vários provedores de autenticação. Basta vincular as credenciais desses provedores a uma conta de usuário.

Para desconectar um usuário, chame SignOut():

auth.SignOut();

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.