Participe do Firebase Summit on-line e presencialmente em 18 de outubro de 2022. Veja como o Firebase pode ajudar você a acelerar o desenvolvimento de apps, lançar seu aplicativo com confiança e fazer o escalonamento facilmente. Inscreva-se agora

Autenticar anonimamente com o Firebase no Android

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Use o 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

  1. Adicione o Firebase ao seu projeto do Android caso ainda não tenha feito isso.
  2. No seu arquivo Gradle do módulo (nível do app) (geralmente <project>/<app-module>/build.gradle), adicione a dependência da biblioteca Android do Firebase Authentication. Para gerenciar o controle de versões das bibliotecas, recomendamos usar a BoM do Firebase para Android.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.4.1')
    
        // 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 a BoM do Firebase para Android, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.

    (Alternativa) Adicionar 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.

    Se você usa 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 {
        // 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:21.0.8'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.4.1')
    
        // 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-ktx'
    }
    

    Com a BoM do Firebase para Android, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.

    (Alternativa) Adicionar 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.

    Se você usa 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 {
        // 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-ktx:21.0.8'
    }
    
  3. Caso você ainda não tenha vinculado o app ao projeto do Firebase, faça isso no Console do Firebase.
  4. Ative a autenticação anônima:
    1. No Console do Firebase, abra a seção Auth.
    2. Na página Métodos de login, ative a opção Anônimo.
    3. Opcional: se o projeto teve upgrade para o Firebase Authentication com o 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:

  1. No método onCreate da atividade de login, acesse a instância compartilhada do objeto FirebaseAuth:

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth
  2. 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+KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  3. Por fim, chame signInAnonymously para fazer login como usuário anônimo:

    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);
                    }
                }
            });

    Kotlin+KTX

    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)
                }
            }
    Se o login for concluído, use o método getCurrentUser para coletar os dados da conta do usuário.

Converter uma conta anônima em permanente

Quando um usuário anônimo se registra 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:

  1. Quando o usuário se inscrever, conclua o fluxo de login do provedor de autenticação até a chamada de um dos métodos FirebaseAuth.signInWith, mas sem incluir essa etapa. Por exemplo, consiga o token do ID do Google, o token de acesso do Facebook ou o endereço de e-mail e a senha do usuário.
  2. Consiga um AuthCredential para o novo provedor de autenticação:

    Login do Google

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Login do Facebook

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    Login com e-mail/senha

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  3. Transmita o objeto AuthCredential para o método linkWithCredential do usuário que fez login:

    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);
                    }
                }
            });

    Kotlin+KTX

    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)
                }
            }

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 projeto para o Firebase Authentication com o Identity Platform, então é 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 criadas antes da limpeza automática estarão qualificadas para exclusão automática 30 dias após a ativação.
  • Se você desativar a limpeza automática, todas as contas anônimas programadas para exclusão vão continuar dessa forma. Essas contas não são contabilizadas nos limites de uso ou nas cotas de faturamento.
  • 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 ver quantos usuários serão afetados antes de ativar esse recurso e tiver atualizado o projeto para o Firebase Authentication com o Identity Platform, será possível filtrar por is_anon em 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.