Você pode permitir que seus usuários se autentiquem no Firebase usando suas Contas do Google.
Antes de você começar
Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.
No arquivo Gradle do módulo (nível do aplicativo) (geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione a dependência para o Firebase Authentication biblioteca para Android. Recomendamos usar o Firebase Android BoM para controlar o controle de versão da biblioteca.Além disso, como parte da configuração do Firebase Authentication, você precisa adicionar o SDK do Google Play Services ao seu aplicativo.
dependencies {
// Import the BoM for the Firebase platform
implementation(platform("com.google.firebase:firebase-bom:32.8.0"))
// Add 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")
// Also add the dependency for the Google Play services library and specify its version
implementation("com.google.android.gms:play-services-auth:21.0.0")
}Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.
Procurando um módulo de biblioteca específico para Kotlin? A partir de outubro de 2023 (Firebase BoM 32.5.0) , tanto os desenvolvedores Kotlin quanto os Java podem depender do módulo da biblioteca principal (para obter detalhes, consulte o FAQ sobre esta iniciativa ).(Alternativa) Adicionar dependências da biblioteca Firebase sem usar o BoM
Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca do Firebase em sua linha de dependência.
Observe que se você usa várias bibliotecas do Firebase no seu aplicativo, é altamente recomendável usar a BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.
dependencies {
// Add 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:22.3.1")
// Also add the dependency for the Google Play services library and specify its version
implementation("com.google.android.gms:play-services-auth:21.0.0")
}Se você ainda não especificou a impressão digital SHA do seu aplicativo, faça isso na página Configurações do console do Firebase. Consulte Autenticando seu cliente para obter detalhes sobre como obter a impressão digital SHA do seu aplicativo.
- Ative o Google como método de login no console do Firebase:
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , ative o método de login do Google e clique em Salvar .
Quando solicitado no console, faça download do arquivo de configuração atualizado do Firebase (
google-services.json
), que agora contém as informações do cliente OAuth necessárias para o login do Google.Mova esse arquivo de configuração atualizado para seu projeto do Android Studio, substituindo o arquivo de configuração correspondente, agora desatualizado. (Consulte Adicionar o Firebase ao seu projeto Android .)
Autenticar com Firebase
- Integre o login do Google One Tap ao seu aplicativo seguindo as etapas na página Fazer login dos usuários com as credenciais salvas . Ao configurar o objeto
BeginSignInRequest
, chamesetGoogleIdTokenRequestOptions
: Você deve passar seu ID de cliente "servidor" para o métodosignInRequest = BeginSignInRequest.builder()
.setGoogleIdTokenRequestOptions(
BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
.setSupported(true)
// Your server's client ID, not your Android client ID.
.setServerClientId(getString(R.string.your_web_client_id))
// Only show accounts previously used to sign in.
.setFilterByAuthorizedAccounts(true)
.build())
.build()signInRequest = BeginSignInRequest.builder()
.setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder()
.setSupported(true)
// Your server's client ID, not your Android client ID.
.setServerClientId(getString(R.string.default_web_client_id))
// Only show accounts previously used to sign in.
.setFilterByAuthorizedAccounts(true)
.build())
.build();
setGoogleIdTokenRequestOptions
. Para encontrar o ID do cliente OAuth 2.0:- Abra a página Credenciais no Console do GCP.
- O ID do cliente do tipo de aplicativo Web é o ID do cliente OAuth 2.0 do seu servidor back-end.
class YourActivity : AppCompatActivity() {
// ...
private val REQ_ONE_TAP = 2 // Can be any integer unique to the Activity
private var showOneTapUI = true
// ...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQ_ONE_TAP -> {
try {
val credential = oneTapClient.getSignInCredentialFromIntent(data)
val idToken = credential.googleIdToken
when {
idToken != null -> {
// Got an ID token from Google. Use it to authenticate
// with Firebase.
Log.d(TAG, "Got ID token.")
}
else -> {
// Shouldn't happen.
Log.d(TAG, "No ID token!")
}
}
} catch (e: ApiException) {
// ...
}
}
}
// ...
}public class YourActivity extends AppCompatActivity {
// ...
private static final int REQ_ONE_TAP = 2; // Can be any integer unique to the Activity.
private boolean showOneTapUI = true;
// ...
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_ONE_TAP:
try {
SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
String idToken = credential.getGoogleIdToken();
if (idToken != null) {
// Got an ID token from Google. Use it to authenticate
// with Firebase.
Log.d(TAG, "Got ID token.");
}
} catch (ApiException e) {
// ...
}
break;
}
}
} - No método
onCreate
da sua atividade de login, obtenha a instância compartilhada do objetoFirebaseAuth
:private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.authprivate FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance(); - Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
override fun onStart() {
super.onStart()
// Check if user is signed in (non-null) and update UI accordingly.
val currentUser = auth.currentUser
updateUI(currentUser)
}@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
updateUI(currentUser);
} - No manipulador
onActivityResult()
(consulte a etapa 1), obtenha o token de ID do Google do usuário, troque-o por uma credencial do Firebase e autentique-se no Firebase usando a credencial do Firebase: Se a chamada paraval googleCredential = oneTapClient.getSignInCredentialFromIntent(data)
val idToken = googleCredential.googleIdToken
when {
idToken != null -> {
// Got an ID token from Google. Use it to authenticate
// with Firebase.
val firebaseCredential = GoogleAuthProvider.getCredential(idToken, null)
auth.signInWithCredential(firebaseCredential)
.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)
updateUI(null)
}
}
}
else -> {
// Shouldn't happen.
Log.d(TAG, "No ID token!")
}
}SignInCredential googleCredential = oneTapClient.getSignInCredentialFromIntent(data);
String idToken = googleCredential.getGoogleIdToken();
if (idToken != null) {
// Got an ID token from Google. Use it to authenticate
// with Firebase.
AuthCredential firebaseCredential = GoogleAuthProvider.getCredential(idToken, null);
mAuth.signInWithCredential(firebaseCredential)
.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());
updateUI(null);
}
}
});
}signInWithCredential
for bem-sucedida, você poderá usar o métodogetCurrentUser
para obter os dados da conta do usuário.
Próximos passos
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.
Nos seus aplicativos, você pode obter informações básicas do perfil do usuário no objeto
FirebaseUser
. Consulte Gerenciar usuários .Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável
auth
e usá-lo para controlar quais dados um usuário pode acessar.
Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.
Para desconectar um usuário, chame signOut
:
Firebase.auth.signOut()
FirebaseAuth.getInstance().signOut();