Primeiros passos com o Firebase Authentication em C++

Você pode usar Firebase Authentication para permitir que os usuários façam login no seu app 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 app um login com endereço de e-mail e senha.

Conectar o projeto em C++ ao Firebase

Antes de usar o Firebase Authentication, você precisa:

  • Registrar seu projeto em C++ e configurá-lo para usar o Firebase.

    Se o projeto em C++ já usa o Firebase, então ele já está registrado e configurado para o Firebase.

  • Adicione o SDK do Firebase para C++ ao seu projeto em C++.

Adicionar o Firebase ao projeto em C++ envolve tarefas no console do Firebase e no projeto em C++ aberto (por exemplo, fazer o download dos arquivos de configuração do Firebase pelo console e movê-los para o projeto em C++).

Login de novos usuários

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

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

É possível verificar o status da operação de criação de conta registrando um retorno de chamada no objeto de classe Future CreateUserWithEmailAndPasswordLastResult ou pesquisando o status no ciclo de atualização caso você esteja criando um jogo ou app com um ciclo de atualização periódica.

Por exemplo, com uma classe Future:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

Ou, para pesquisar, faça algo como o seguinte exemplo no loop de atualização do seu jogo:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Login dos usuários

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 SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

Para conseguir o resultado da operação de login, siga o mesmo procedimento da inscrição.

Definir um listener do estado de autenticação e coletar dados da conta

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

Crie o listener implementando a classe abstrata firebase::auth::AuthStateListener. Por exemplo, para criar um listener para receber informações sobre o usuário quando ele fizer login com sucesso:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

Anexe o listener ao método AddAuthStateListener do objeto firebase::auth::Auth:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Próximas etapas

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