Integrar o Login do Google no seu app Android

Para integrar o Login do Google no seu app Android, configure o Login do Google e adicionar um botão ao layout do app para iniciar o fluxo de login.

Antes de começar

Configure um projeto do Console de APIs do Google e configure o projeto do Android Studio.

Configurar o Login do Google e o objeto GoogleSignInClient

  1. No método onCreate da sua atividade de login, configure o Login do Google para solicitar os dados do usuário exigidos pelo seu aplicativo. Por exemplo, para configurar Login do Google para solicitar acesso e informações básicas de perfil, crie um GoogleSignInOptions com o parâmetro DEFAULT_SIGN_IN. Para solicitar a e-mail endereços IP também, crie o objeto GoogleSignInOptions com os requestEmail.

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    Se você precisar solicitar escopos adicionais para acessar as APIs do Google, especifique-os. com requestScopes. Para a melhor experiência do usuário, no login, solicite apenas os escopos necessárias para que seu app funcione o mínimo possível. Solicitar escopos adicionais somente quando necessário, para que seus usuários vejam a tela de consentimento no contexto de uma ação que realizaram. Consulte Solicitar escopos adicionais.

  2. Em seguida, ainda no método onCreate da sua atividade de login, crie uma Objeto GoogleSignInClient com as opções especificadas.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Verificar se já existe um usuário conectado

No método onStart da sua atividade, verifique se um usuário já fez login no seu app com o Google.

// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);

Se GoogleSignIn.getLastSignedInAccount retornar um objeto GoogleSignInAccount (em vez de null), o usuário já fez login no app com o Google. Atualize a interface de forma adequada, ou seja, oculte o botão de login, abra o atividade principal ou o que for apropriado para seu aplicativo.

Se GoogleSignIn.getLastSignedInAccount retornar null, o usuário ainda não conectado ao seu app usando o Google. Atualizar a interface para mostrar o Login do Google .

Adicionar o botão de Login do Google ao app

  1. O botão padrão de login do Google Adicionar o SignInButton no layout do seu aplicativo:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. Opcional: se você estiver usando a imagem padrão do botão de login em vez do fornecendo seus próprios recursos de botão de login, é possível personalizar a com o atributo setSize .

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. Na atividade do Android (por exemplo, no método onCreate), registre o OnClickListener do seu botão para fazer o login do usuário quando clicado:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Iniciar o fluxo de login

  1. Imagem do seletor de conta de login No método onClick da atividade, processe os toques no botão de login criando um intent de login com o getSignInIntent e iniciando a intent com startActivityForResult.

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            // ...
        }
    }
    
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    Ao iniciar a intent, o usuário precisa selecionar uma Conta do Google para fazer login com Se você solicitou escopos além de profile, email e openid, os o usuário também precisa conceder acesso aos recursos solicitados.

  2. Depois que o usuário fizer login, você poderá receber um GoogleSignInAccount para o usuário no método onActivityResult da atividade.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    O objeto GoogleSignInAccount contém informações sobre o usuário usuário, como o nome dele.

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
    
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    Você também pode descobrir o endereço de e-mail do usuário com getEmail, o ID do Google do usuário (para uso do lado do cliente) com getId; e um token de ID para o usuário com getIdToken. Se você precisar transmitir o usuário conectado a um servidor de back-end, enviar o token de ID para seu servidor de back-end e validar o token no servidor.