Permita que os usuários se autentiquem com o Firebase usando a própria conta do GitHub. Basta integrar o login genérico do OAuth baseado na Web ao seu app usando o SDK do Firebase para realizar o fluxo de login completo.
Antes de começar
Para fazer login de usuários usando contas do GitHub, primeiro ative o GitHub como provedor de login do seu projeto do Firebase:
Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso.
- No Console do Firebase, abra a seção Auth.
- Na guia Método de login, ative o provedor GitHub.
- Adicione o ID do cliente e a chave secreta do cliente do console de desenvolvimento do provedor à
configuração correspondente:
- Registre o app como um aplicativo de desenvolvedor no GitHub e receba o ID do cliente e a chave secreta do cliente do OAuth 2.0 do app.
- Em seguida, verifique se o URI de redirecionamento do OAuth do Firebase (por exemplo,
my-app-12345.firebaseapp.com/__/auth/handler
), está definido como o URL de retorno de chamada de autorização na página de configurações do app no GitHub (em inglês).
- Clique em Salvar.
Use a Lista de materiais (BoM, pela sigla em inglês) do Firebase para Android para declarar a dependência da biblioteca Android do Firebase Authentication no arquivo do Gradle, geralmente
app/build.gradle
, do módulo (nível do app).Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:29.3.1') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth' }
Ao usar a BoM do Firebase para Android, seu app sempre usará versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Declare as dependências das bibliotecas do Firebase sem usar a BoM.
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Caso você use várias bibliotecas do Firebase no seu app, recomendamos usar a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.
dependencies { // Declare the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth:21.0.3' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:29.3.1') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx' }
Ao usar a BoM do Firebase para Android, seu app sempre usará versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Declare as dependências das bibliotecas do Firebase sem usar a BoM.
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Caso você use várias bibliotecas do Firebase no seu app, recomendamos a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.
dependencies { // Declare the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx:21.0.3' }
Caso você ainda não tenha especificado a impressão digital SHA-1 do seu app, faça isso na página de configurações do Console do Firebase. Consulte Como autenticar seu cliente para mais detalhes sobre como conseguir a impressão digital SHA-1 do seu app.
Processar o fluxo de login com o SDK do Firebase
Se você está desenvolvendo um app Android, a maneira mais fácil de autenticar seus usuários com o Firebase usando contas do GitHub é processando todo o fluxo de login com o SDK do Firebase para Android.
Para processar o fluxo de login dessa forma, siga estas etapas:
Crie uma instância de um OAuthProvider usando o Builder com o ID do provedor github.com.
OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
Opcional: especifique outros parâmetros de OAuth personalizados que você quer enviar com a solicitação de OAuth.
// Target specific email with login hint. provider.addCustomParameter("login", "your-email@gmail.com");
Para saber quais parâmetros são aceitos pelo GitHub, consulte a documentação do GitHub para OAuth (em inglês). Não é possível transmitir os parâmetros exigidos pelo Firebase com
setCustomParameters()
. Esses parâmetros são client_id, response_type, redirect_uri, state, scope e response_mode.Opcional: especifique os outros escopos de OAuth 2.0 além do perfil básico que você quer solicitar ao provedor de autenticação. Se o aplicativo exigir acesso a dados particulares de usuários das APIs do GitHub, será preciso solicitar autorização para acessá-las em Permissões de APIs, no console do desenvolvedor do GitHub. Os escopos de OAuth solicitados precisam corresponder exatamente àqueles pré-configurados nas permissões de APIs do app.
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { add("user:email"); } }; provider.setScopes(scopes);
Use o objeto de provedor do OAuth para a autenticação com o Firebase. Lembre-se de que, ao contrário de outras operações do FirebaseAuth, isso assumirá o controle da sua IU mostrando uma Guia personalizada do Chrome. Como resultado, não faça referência à sua atividade nos
OnSuccessListener
eOnFailureListener
anexados, porque eles serão imediatamente desconectados quando a operação iniciar a IU.Primeiro, verifique se você já recebeu uma resposta. O login por meio desse método coloca sua atividade em segundo plano, o que significa que ela pode ser recuperada pelo sistema durante o fluxo de login. Para evitar uma nova tentativa do usuário, caso isso aconteça, verifique se um resultado já está presente.
Para verificar se há um resultado pendente, chame
getPendingAuthResult
:Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Para iniciar o fluxo de login, chame
startActivityForSignInWithProvider
:firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Se o processo foi bem-sucedido, o token de acesso OAuth associado ao provedor poderá ser recuperado com o objeto
OAuthCredential
retornado.Com o token de acesso OAuth, é possível chamar a API GitHub (em inglês).
Por exemplo, para receber informações básicas de perfil, chame a API REST transmitindo o token de acesso no cabeçalho
Authorization
:Os exemplos acima se concentram nos fluxos de login, mas também é possível vincular um provedor do GitHub a um usuário atual usando
startActivityForLinkWithProvider
. Por exemplo, vincule vários provedores ao mesmo usuário e permita o login com qualquer um deles.// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // GitHub credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
É possível usar o mesmo padrão com
startActivityForReauthenticateWithProvider
, que pode ser utilizado para recuperar credenciais novas de operações confidenciais que exigem um login recente.// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
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.
-
Você pode receber as informações básicas de perfil do usuário do objeto
FirebaseUser
nos seus aplicativos. Consulte Gerenciar usuários. Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível receber o ID exclusivo do usuário conectado da variável
auth
e usar esse ID 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
:
Java
FirebaseAuth.getInstance().signOut();
Kotlin+KTX
Firebase.auth.signOut()