Você pode usar Firebase Authentication para criar e usar contas anônimas temporárias e fazer a autenticação no Firebase. Com essas contas, os usuários que ainda não se registraram no seu app podem trabalhar com os dados protegidos pelas regras de segurança. Se um usuário anônimo se registrar no seu app, vincule as credenciais de login à conta anônima para que ele continue trabalhando com os dados protegidos nas sessões futuras.
Antes de começar
- Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.
-
No arquivo Gradle do módulo (nível do app)
(geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione a dependência da biblioteca do Firebase Authentication para Android. Recomendamos o uso do Firebase Android BoM para lidar com o controle de versões da biblioteca.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.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") }
Com o Firebase Android BoM, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar o BoM
Se você preferir não usar o Firebase BoM, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Se você usa várias bibliotecas do Firebase no app, recomendamos utilizar o BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.
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:23.1.0") }
- Caso você ainda não tenha vinculado o app ao projeto do Firebase, faça isso no console do Firebase.
- Ative a autenticação anônima:
- No console do Firebase, abra a seção Auth.
- Na página Métodos de login, ative o método de login Anônimo.
- Opcional: se o projeto teve upgrade para o Firebase Authentication with Identity Platform, você pode ativar a limpeza automática. Quando você faz isso, contas anônimas com mais de 30 dias são automaticamente excluídas. Em projetos com a limpeza automática ativada, a autenticação anônima não é mais contabilizada nos limites de uso ou nas cotas de faturamento. Consulte Limpeza automática.
Fazer a autenticação anônima no Firebase
Quando um usuário não conectado acessar um recurso do app que exige autenticação no Firebase, faça login dele anonimamente executando as seguintes etapas:
- No método
onCreate
da atividade de login, acesse a instância compartilhada do objetoFirebaseAuth
:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
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) }
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); }
- Por fim, chame
signInAnonymously
para fazer login como usuário anônimo:Kotlin
auth.signInAnonymously() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInAnonymously:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInAnonymously:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInAnonymously() .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, "signInAnonymously:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInAnonymously:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
para coletar os dados da conta do usuário.
Converter uma conta anônima em permanente
Quando um usuário anônimo se inscreve no seu app, ele pode continuar trabalhando com a nova conta. Por exemplo, você pode deixar no carrinho de compras dessa conta os itens adicionados antes do registro. Para isso, execute as seguintes etapas:
- Quando o usuário se inscrever, conclua o fluxo de login do provedor de
autenticação do usuário até a chamada de um dos métodos
FirebaseAuth.signInWith
, mas sem incluir essa etapa. Por exemplo, use o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha. Consiga um
AuthCredential
para o novo provedor de autenticação:Login do Google
Kotlin
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Login do Facebook
Kotlin
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Login com e-mail/senha
Kotlin
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Transmita o objeto
AuthCredential
para o métodolinkWithCredential
do usuário que fez login:Kotlin
auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "linkWithCredential:success") val user = task.result?.user updateUI(user) } else { Log.w(TAG, "linkWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); updateUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Se a chamada a linkWithCredential
for realizada corretamente, a nova conta do usuário vai ter acesso
aos dados do Firebase da conta anônima.
Limpeza automática
Se você fez upgrade do seu projeto para o Firebase Authentication with Identity Platform, será possível ativar a limpeza automática no console do Firebase. Quando esse recurso é ativado, você permite que o Firebase exclua automaticamente contas anônimas com mais de 30 dias. Em projetos com a limpeza automática ativada, a autenticação anônima não é contabilizada nos limites de uso ou nas cotas de faturamento.
- Todas as contas anônimas criadas após a ativação da limpeza automática podem ser excluídas automaticamente a qualquer momento 30 dias após a criação.
- As contas anônimas estarão qualificadas para exclusão automática 30 dias depois da ativação da limpeza automática.
- Se você desativar a limpeza automática, todas as contas anônimas programadas para exclusão vão continuar dessa forma.
- Se você fizer "upgrade" de uma conta anônima com vinculação a qualquer método de login, ela não vai ser excluída automaticamente.
Se quiser conferir quantos usuários serão afetados antes de ativar esse recurso e tiver
atualizado o projeto para o Firebase Authentication with Identity Platform, filtre por
is_anon
no Cloud Logging.
Próximas etapas
Agora que os usuários podem se autenticar com o Firebase, use as regras do Firebase para controlar os acessos ao banco de dados.