获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Autenticar com o Firebase anonimamente no Android

Você pode usar o Firebase Authentication para criar e usar contas anônimas temporárias para autenticar com o Firebase. Essas contas anônimas temporárias podem ser usadas para permitir que usuários que ainda não se inscreveram no seu aplicativo trabalhem com dados protegidos por regras de segurança. Se um usuário anônimo decidir se inscrever em seu aplicativo, você poderá vincular suas credenciais de entrada à conta anônima para que ele possa continuar a trabalhar com seus dados protegidos em sessões futuras.

Antes de você começar

  1. Se ainda não o fez, adicione o Firebase ao seu projeto Android .
  2. No arquivo Gradle do módulo (nível do aplicativo) (geralmente <project>/<app-module>/build.gradle ), adicione a dependência da biblioteca Android do Firebase Authentication. Recomendamos usar o Firebase Android BoM para controlar o controle de versão da biblioteca.

    Java

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

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca do 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 em seu aplicativo, é altamente recomendável usar o 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:21.1.0'
    }
    

    Kotlin+KTX

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

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca do 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 em seu aplicativo, é altamente recomendável usar o 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-ktx:21.1.0'
    }
    
  3. Se você ainda não conectou seu aplicativo ao projeto do Firebase, faça isso no Firebase console .
  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 , habilite o método de login anônimo .
    3. Opcional : se você atualizou seu projeto para o Firebase Authentication com Identity Platform , pode ativar a limpeza automática. Quando você habilita essa configuração, contas anônimas com mais de 30 dias serão excluídas automaticamente. Em projetos com limpeza automática habilitada, a autenticação anônima não contará mais para limites de uso ou cotas de cobrança. Consulte Limpeza automática .

Autenticar com o Firebase anonimamente

Quando um usuário desconectado usa um recurso de aplicativo que exige autenticação com o Firebase, faça login do usuário anonimamente seguindo as etapas a seguir:

  1. No método onCreate da sua atividade, obtenha 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 bem-sucedido, você poderá usar o método getCurrentUser para obter os dados da conta do usuário.

Converter uma conta anônima em uma conta permanente

Quando um usuário anônimo se inscreve no seu aplicativo, você pode permitir que ele continue trabalhando com a nova conta. Por exemplo, você pode disponibilizar os itens que o usuário adicionou ao carrinho de compras antes de se inscrever no novo carrinho de compras da conta. Para isso, conclua as seguintes etapas:

  1. Quando o usuário se inscrever, conclua o fluxo de login para o provedor de autenticação do usuário até, mas não incluindo, chamar um dos métodos FirebaseAuth.signInWith . Por exemplo, obtenha o token de ID do Google do usuário, o token de acesso do Facebook ou o endereço de e-mail e a senha.
  2. Obtenha 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)
    Entrar no Facebook

    Java

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

    Kotlin+KTX

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

    Java

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

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  3. Passe o objeto AuthCredential para o método linkWithCredential do usuário de 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 para linkWithCredential for bem-sucedida, a nova conta do usuário poderá acessar os dados do Firebase da conta anônima.

Limpeza automática

Se você atualizou seu projeto para o Firebase Authentication com Identity Platform , pode ativar a limpeza automática no Firebase console. Ao ativar esse recurso, você permite que o Firebase exclua automaticamente contas anônimas com mais de 30 dias. Em projetos com limpeza automática habilitada, a autenticação anônima não contará para limites de uso ou cotas de cobrança.

  • Quaisquer contas anônimas criadas após habilitar a limpeza automática podem ser excluídas automaticamente a qualquer momento após 30 dias após a criação.
  • As contas anônimas criadas antes de habilitar a limpeza automática estarão qualificadas para exclusão automática a partir de 30 dias após a habilitação da limpeza automática.
  • Se você desativar a limpeza automática, todas as contas anônimas programadas para serem excluídas permanecerão programadas para serem excluídas. Essas contas não contam para limites de uso ou cotas de faturamento.
  • Se você "atualizar" uma conta anônima vinculando-a a qualquer método de login, a conta não será excluída automaticamente.

Se você quiser ver quantos usuários serão afetados antes de ativar esse recurso e tiver feito upgrade do seu projeto para o Firebase Authentication com Identity Platform , filtre por is_anon no Cloud Logging .

Próximos passos

Agora que os usuários podem se autenticar no Firebase, você pode controlar o acesso deles aos dados no banco de dados do Firebase usando as regras do Firebase .