Autenticar usando o Login do Google no Android

Integrando o Login do Google ao seu app, você pode permitir a autenticação de usuários no Firebase com Contas do Google.

Antes de começar

  1. Adicione o Firebase ao projeto do Android.
  2. Adicione as dependências para o Firebase Authentication e o Login do Google ao seu arquivo build.gradle no nível do app:
    implementation 'com.google.firebase:firebase-auth:16.0.3'
    implementation 'com.google.android.gms:play-services-auth:16.0.0'
    
  3. Se você ainda não conectou o app ao projeto do Firebase, faça isso no Console do Firebase.
  4. Caso você ainda não tenha especificado a impressão digital SHA-1 do seu app, faça isso na página de configurações do Console do Firebase. Consulte Como autenticar um cliente para mais detalhes sobre como conseguir a impressão digital SHA-1 do app.
  5. Ative o Login do Google no Console do Firebase:
    1. No Console do Firebase, abra a seção Autenticação.
    2. Na guia Método de login, ative o Login do Google e clique em Salvar.

Autenticar com o Firebase

  1. Para integrar o Login do Google no seu app, siga as etapas na página Como integrar o Login do Google no seu app Android. Quando você configurar o objeto GoogleSignInOptions, chame: requestIdToken
            // Configure Google Sign In
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
    
    Você precisa enviar o código do cliente do servidor para o método requestIdToken. Para encontrar o código do cliente OAuth 2.0:
    1. Abra a página Credenciais no Console da API.
    2. O código do cliente de tipo Aplicativo da Web é seu código do cliente OAuth 2.0 do servidor de back-end.
    Depois de integrar o Login do Google, sua atividade de login terá um código semelhante a:
        private void signIn() {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
            if (requestCode == RC_SIGN_IN) {
                Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                try {
                    // Google Sign In was successful, authenticate with Firebase
                    GoogleSignInAccount account = task.getResult(ApiException.class);
                    firebaseAuthWithGoogle(account);
                } catch (ApiException e) {
                    // Google Sign In failed, update UI appropriately
                    Log.w(TAG, "Google sign in failed", e);
                    // ...
                }
            }
        }
    
  2. No método onCreate da atividade de login, encontre a instância compartilhada do objeto FirebaseAuth:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  3. Ao inicializar sua atividade, verifique se o usuário está conectado no momento:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  4. Depois que um usuário se conectar, consiga um token de código do objeto GoogleSignInAccount, troque o token por uma credencial do Firebase e faça a autenticação:
        private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
            Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            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());
                                Snackbar.make(findViewById(R.id.main_layout), "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
                                updateUI(null);
                            }
    
                            // ...
                        }
                    });
        }
    
    Se a chamada para signInWithCredential for bem-sucedida, você poderá usar o método getCurrentUser 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 apps, é possível acessar informações básicas de perfil do usuário por meio do objeto FirebaseUser. 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 código exclusivo do usuário conectado. Use essa informação para controlar quais dados ele pode acessar.

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:

FirebaseAuth.getInstance().signOut();

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.