Estamos descontinuando a biblioteca da plataforma JavaScript de login do Google para web . A biblioteca ficará indisponível para download após a data de suspensão de uso de 31 de março de 2023. Em vez disso, use os novos Serviços de identidade do Google para Web .
Por padrão, os IDs de cliente recém-criados agora são impedidos de usar a Biblioteca de plataforma mais antiga, os IDs de cliente existentes não são afetados. Novos IDs de cliente criados antes de 29 de julho de 2022 podem definir `plugin_name` para permitir o uso da Biblioteca do Google Platform.

Integrar o Login do Google ao seu app Android

Para integrar o Login do Google ao seu app Android, configure o Login do Google e adicione um botão ao layout do app, que inicia o fluxo de login.

Antes de começar

Configurar um projeto do Console de APIs do Google e um projeto do Android Studio.

Configurar o Login do Google e o objeto GoogleSignInClient

  1. No método onCreate da atividade de login, configure o Login do Google para solicitar os dados do usuário exigidos pelo app. Por exemplo, para configurar o Login do Google e solicitar informações básicas e o ID dos usuários, crie um objeto GoogleSignInOptions com o parâmetro DEFAULT_SIGN_IN. Para solicitar endereços de e-mail de usuários, crie o objeto GoogleSignInOptions com a opção 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 uma melhor experiência do usuário, no login, solicite apenas os escopos necessários para que o app funcione minimamente. Solicite escopos adicionais apenas quando precisar deles, para que os usuários vejam a tela de consentimento no contexto de uma ação que eles executaram. Consulte Solicitar escopos adicionais.

  2. Em seguida, também no método onCreate da atividade de login, crie um objeto GoogleSignInClient com as opções especificadas.

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

Verificar se há 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), isso significa que o usuário já fez login no app com o Google. Atualize a IU da forma adequada, ou seja, oculte o botão de login, inicie sua atividade principal ou o que for apropriado para o app.

Se GoogleSignIn.getLastSignedInAccount retornar null, isso significa que o usuário ainda não fez login no seu app com o Google. Atualize a IU para exibir o botão do Login do Google.

Adicionar o botão do Login do Google ao seu app

  1. O botão de login padrão do Google Adicione 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 o gráfico padrão do botão de login em vez de fornecer seus próprios recursos, é possível personalizar o tamanho do botão com o método 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 botão para fazer 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 uma intent de login com o método 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. Se você solicitar escopos além de profile, email e openid, o usuário também será solicitado a conceder acesso aos recursos solicitados.

  2. Depois que o usuário fizer login, você poderá receber um objeto GoogleSignInAccount para ele 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 conectado, como o nome do usuário.

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

    Também é possível receber 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 no momento a um servidor de back-end, envie o token de ID para seu servidor de back-end e valide o token no servidor.