Começar a usar o Firebase Authentication no Unity

Você pode usar Firebase Authentication para permitir que os usuários façam login no seu jogo usando um ou mais métodos de login, incluindo login com endereço de e-mail e senha e provedores de identidade federados, como o Login do Google e do Facebook. Este tutorial mostra uma introdução ao Firebase Authentication e como adicionar no seu jogo um login com endereço de e-mail e senha.

Antes de começar

Antes de usar o Firebase Authentication, você precisa:

  • registrar seu projeto do Unity e configurá-lo para usar o Firebase.

    • Se o projeto do Unity já usa o Firebase, ele já está registrado e configurado para essa plataforma.

    • Se você não tiver um projeto do Unity, faça o download de um app de exemplo.

  • Adicione o SDK do Firebase para Unity (especificamente FirebaseAuth.unitypackage) ao seu projeto do Unity.

Adicionar o Firebase ao projeto do Unity envolve tarefas no Console do Firebase e no projeto aberto do Unity. Por exemplo, fazer o download dos arquivos de configuração do Firebase no console e mover para o projeto do Unity.

Login de novos usuários

Crie um formulário que permita que novos usuários se inscrevam no seu jogo usando endereço de e-mail e senha. Quando um usuário preencher o formulário, valide o endereço de e-mail e a senha informados por ele e envie-os para o método CreateUserWithEmailAndPasswordAsync:

auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
    return;
  }

  // Firebase user has been created.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Firebase user created successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

Login de usuários existentes

Crie um formulário que permita que usuários atuais façam login com um endereço de e-mail e senha. Quando um usuário preencher o formulário, chame o método SignInWithEmailAndPasswordAsync:

auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

Definir um manipulador de eventos de alteração do estado de autenticação e coletar dados do usuário

Para responder a eventos de login e logout, anexe um manipulador de eventos ao objeto de autenticação global. Esse manipulador é chamado sempre que o estado de login do usuário é alterado. O manipulador é executado somente depois que o objeto de autenticação é totalmente inicializado e depois que todas as chamadas de rede são concluídas. Por isso, ele é a melhor maneira de verificar informações sobre o usuário conectado.

Registre o manipulador de eventos usando o campo StateChanged do objeto FirebaseAuth. Quando um usuário fizer login corretamente, você poderá verificar as informações sobre ele no manipulador de eventos.

Por fim, quando o objeto tiver Destroy chamado, ele vai chamar OnDestroy automaticamente. Limpe as referências do objeto Auth em OnDestroy.

void InitializeFirebase() {
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null
        && auth.CurrentUser.IsValid();
    if (!signedIn && user != null) {
      DebugLog("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      DebugLog("Signed in " + user.UserId);
      displayName = user.DisplayName ?? "";
      emailAddress = user.Email ?? "";
      photoUrl = user.PhotoUrl ?? "";
    }
  }
}

void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

Próximas etapas

Saiba como adicionar suporte para outros provedores de identidade e contas de convidados anônimos: