É possível integrar o Firebase Authentication a um sistema de autenticação personalizado modificando o servidor de autenticação para produzir tokens assinados personalizados quando um usuário faz login. Seu app recebe e usa esse token para se autenticar com o Firebase.
Antes de começar
- Adicione o Firebase ao seu projeto em C++.
- Para consultar as chaves de servidor do seu projeto, siga estas etapas:
    - Acesse a página Contas de serviço nas configurações do seu projeto.
- Clique em Gerar uma nova chave privada na parte inferior da seção SDK Admin do Firebase da página Contas de serviço.
- O novo par de chaves pública/privada da conta de serviço é salvo automaticamente no seu computador. Copie esse arquivo para seu servidor de autenticação.
 
Autenticar no Firebase
A classeAuth é o gateway para todas as chamadas de API.- Adicione os arquivos de cabeçalho Auth e App:
#include "firebase/app.h" #include "firebase/auth.h" 
- No código de inicialização, crie uma
classe firebase::App.#if defined(__ANDROID__) firebase::App* app = firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity); #else firebase::App* app = firebase::App::Create(firebase::AppOptions()); #endif // defined(__ANDROID__) 
- Adquira a classe firebase::auth::Authpara seufirebase::App. Há um mapeamento de um para um entreAppeAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app); 
Auth::SignInWithCustomToken com o token do servidor de autenticação.
- Quando os usuários fazem login no seu app, envie as credenciais de login deles (por exemplo, nome de usuário e senha) para seu servidor de autenticação. O servidor verifica as credenciais e retorna um token personalizado se elas forem válidas.
- Depois de receber o token personalizado do servidor de autenticação, transmita-o para Auth::SignInWithCustomTokene faça o login do usuário.firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token); 
- Se seu programa tiver uma rotina de atualização regular, por exemplo, 30 ou 60
    vezes por segundo, será possível verificar os resultados uma vez por ciclo usando
    Auth::SignInWithCustomTokenLastResult:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomTokenLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.user.display_name().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } } 
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::Userpara receber as informações básicas de perfil do usuário.firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // 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 firebase::auth::User::Token() instead. std::string uid = user.uid(); } 
- Nas Regras de segurança Firebase Realtime Database e Cloud Storage, você pode acessar o ID exclusivo do usuário conectado pela variável - authe 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();