Use Firebase Authentication para fazer o login de um usuário. Basta enviar uma mensagem SMS para o smartphone dele. O usuário faz login com 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
-
Antes de usar Firebase Authentication, você precisa adicionar o SDK Unity do Firebase (especificamente,
FirebaseAuth.unitypackage
) ao seu projeto do Unity.Encontre instruções detalhadas para essas etapas de configuração inicial em Como adicionar o Firebase ao seu projeto do Unity.
- Caso você ainda não tenha vinculado o app ao projeto do Firebase, faça isso no console do Firebase.
- Confira os requisitos da plataforma para fazer o login com número de telefone:
- O login com número de telefone é válido apenas para plataformas móveis.
- No iOS, é necessário ter um dispositivo físico para fazer login com número de telefone. Esse processo não funciona em simuladores.
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 com 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 por número de telefone para o projeto do Firebase:
- No console do Firebase, abra a seção Autenticação.
- Na página Método de login, ative o método de login por Número de telefone.
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ê conecta um usuário usando o número de telefone dele pela primeira vez em um dispositivo, o Firebase Authentication envia uma notificação push silenciosa ao dispositivo. Isso é feito para verificar se a solicitação de login do número de telefone vem do seu app. Por esse motivo, o login com o número de telefone não pode ser usado em um simulador.
Para ativar notificações de APNs para uso com Firebase Authentication:
- No Xcode, ative notificações push para seu projeto.
Faça upload do certificado de APNs para o Firebase. Se você ainda não tiver um certificado de APNs, crie um no Apple Developer Member Center.
-
No seu projeto do Console do Firebase, selecione o ícone de engrenagem, Configurações do projeto e a guia Cloud Messaging.
-
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.
-
Selecione o arquivo .p12 de cada um deles e informe a senha, se houver. Verifique se o ID do pacote desse certificado corresponde ao ID do pacote do seu app. Selecione Salvar.
-
Enviar um código de verificação ao telefone do usuário
Para dar início ao login com número de telefone, apresente ao usuário uma interface que solicite
o número dele e, em seguida, chame
PhoneAuthProvider.VerifyPhoneNumber
para pedir que o Firebase
envie um código de autenticação ao telefone do usuário por SMS:
-
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.
- Chame
PhoneAuthProvider.VerifyPhoneNumber
e transmita a ele um PhoneAuthOptions que contenha o número de telefone do usuário. Quando você chamaPhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth); provider.VerifyPhoneNumber( new Firebase.Auth.PhoneAuthOptions { PhoneNumber = phoneNumber, TimeoutInMilliseconds = phoneAuthTimeoutMs, ForceResendingToken = null }, verificationCompleted: (credential) => { // 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) => { // The verification code was not sent. // `error` contains a human readable explanation of the problem. }, codeSent: (id, token) => { // 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) => { // 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. });
PhoneAuthProvider.VerifyPhoneNumber
, o Firebase faz o seguinte:- 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 um ID de verificação para a função de conclusão. Você precisa do código de verificação e do ID de verificação para fazer o login do usuário.
-
Salve o ID de verificação e restaure-a depois que o app é carregado. Ao fazer isso, você tem a garantia de ter um ID de verificação válido caso o app seja encerrado antes que o usuário conclua o fluxo de login (por exemplo, ao alternar para o app de SMS).
Conserve o ID de verificação da maneira que quiser. Uma maneira simples de fazer isso é salvando-o com
UnityEngine.PlayerPrefs
.
Se o retorno de chamada passado para codeSent
for chamado, você poderá solicitar que o usuário digite o código de verificação quando recebê-lo na mensagem SMS.
Por outro lado, se o retorno de chamada de verificationCompleted
for chamado, a verificação automática será bem-sucedida e você terá um PhoneAuthCredential
com o qual poderá usar, conforme descrito abaixo.
Fazer login do usuário com o 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 PhoneAuthCredential
por meio do código e do ID de verificação e o transmita para
FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
.
- Solicite o código de verificação ao usuário.
- Crie um objeto
Credential
do código de verificação e do ID de verificação.PhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- Faça o login do usuário com o objeto
PhoneAuthCredential
:auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } FirebaseUser newUser = task.Result.User; 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 de usuário é 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, use o objeto
Firebase.Auth.FirebaseUser
para receber as informações básicas de perfil do usuário.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 Firebase Realtime Database e Cloud Storage, você pode acessar o ID exclusivo do usuário conectado pela variável
auth
e usar essas informações para controlar quais dados um usuário pode acessar.
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();