Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Primeiros passos com o Firebase Authentication em C++

Use o Firebase Authentication para permitir que os usuários façam login no seu app com um ou mais métodos de login, inclusive login com endereço de e-mail e senha, além de provedores de identidade federados como o Login do Google e do Facebook. Veja neste tutorial os primeiros passos com o Firebase Authentication e como adicionar ao app um login com endereço de e-mail e senha.

Conecte o projeto em C++ ao Firebase

Antes de usar o Firebase Authentication, é necessário:

  • 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.

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

A adição do Firebase ao projeto em C++ envolve tarefas no Console do Firebase e no projeto em C++ aberto (por exemplo, você faz o download dos arquivos de configuração do Firebase no console e os move para o projeto em C++).

Inscrição 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::User*> 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::User*> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::User*>& 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::User*> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

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

firebase::Future<firebase::auth::User*> 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 != nullptr) {
      // 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: