Permita que os usuários se autentiquem com o Firebase usando as contas do Facebook deles. Basta integrar o login do Facebook ao seu aplicativo.
Antes de começar
- Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso.
- No arquivo
build.gradle
no nível do projeto, inclua o repositório Maven do Google nas seçõesbuildscript
eallprojects
. Adicione as dependências da biblioteca do Firebase Authentication para Android ao arquivo do Gradle no nível do aplicativo do módulo (geralmente
app/build.gradle
):implementation 'com.google.firebase:firebase-auth:19.1.0'
- No site Facebook for Developers, acesse o ID e a chave secreta do app.
- Ative o login do Facebook:
- No Console do Firebase, abra a seção Authentication.
- Na guia Método de login, ative o método de login pelo Facebook e especifique o código e a chave secreta do app recebidos do Facebook.
- Em seguida, verifique se o URI de redirecionamento do OAuth (por exemplo,
my-app-12345.firebaseapp.com/__/auth/handler
) está listado como um dos URIs de redirecionamento do OAuth na página de configurações do app Facebook. No site Facebook for Developers, acesse Product Settings > Facebook Login.
Autenticar no Firebase
- Integre o login do Facebook ao seu app seguindo as instruções na documentação do desenvolvedor. Para configurar o objeto
LoginButton
ouLoginManager
, solicite as permissõespublic_profile
eemail
. Se você integrou o login do Facebook usando umLoginButton
, o código da sua atividade de login é semelhante ao seguinte:Java
// Initialize Facebook Login button mCallbackManager = CallbackManager.Factory.create(); LoginButton loginButton = findViewById(R.id.buttonFacebookLogin); loginButton.setReadPermissions("email", "public_profile"); loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d(TAG, "facebook:onSuccess:" + loginResult); handleFacebookAccessToken(loginResult.getAccessToken()); } @Override public void onCancel() { Log.d(TAG, "facebook:onCancel"); // ... } @Override public void onError(FacebookException error) { Log.d(TAG, "facebook:onError", error); // ... } });// ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Pass the activity result back to the Facebook SDK mCallbackManager.onActivityResult(requestCode, resultCode, data); }
Kotlin
// Initialize Facebook Login button callbackManager = CallbackManager.Factory.create() buttonFacebookLogin.setReadPermissions("email", "public_profile") buttonFacebookLogin.registerCallback(callbackManager, object : FacebookCallback<LoginResult> { override fun onSuccess(loginResult: LoginResult) { Log.d(TAG, "facebook:onSuccess:$loginResult") handleFacebookAccessToken(loginResult.accessToken) } override fun onCancel() { Log.d(TAG, "facebook:onCancel") // ... } override fun onError(error: FacebookException) { Log.d(TAG, "facebook:onError", error) // ... } })// ... override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Pass the activity result back to the Facebook SDK callbackManager.onActivityResult(requestCode, resultCode, data) }
- No método
onCreate
da atividade de login, acesse a instância compartilhada do objetoFirebaseAuth
:Java
private FirebaseAuth mAuth;// ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Kotlin
private lateinit var auth: FirebaseAuth// ... // Initialize Firebase Auth auth = FirebaseAuth.getInstance()
- Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
- Depois que um usuário fizer login, use o método de retorno de chamada
LoginButton
doonSuccess
para receber um token de acesso para o usuário conectado, troque-o por uma credencial do Firebase e autentique com o Firebase usando essa credencial:Java
private void handleFacebookAccessToken(AccessToken token) { Log.d(TAG, "handleFacebookAccessToken:" + token); AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(FacebookLoginActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
Kotlin
private fun handleFacebookAccessToken(token: AccessToken) { Log.d(TAG, "handleFacebookAccessToken:$token") val credential = FacebookAuthProvider.getCredential(token.token) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText(baseContext, "Authentication failed.", Toast.LENGTH_SHORT).show() updateUI(null) } // ... } }
signInWithCredential
for concluída, será possível usar o métodogetCurrentUser
para coletar os dados da conta do usuário.
Próximas etapas
Depois que um usuário faz login pela primeira vez, uma nova conta é 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
FirebaseUser
para receber as informações básicas de perfil do usuário. Consulte Gerenciar usuários. Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível usar a variável
auth
para encontrar o ID exclusivo do usuário conectado. Utilize essa informação para controlar o acesso dele aos dados.
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
FirebaseAuth.getInstance().signOut()