Para integrar o Login do Google no 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
Configure um projeto do Console de APIs do Google e configure seu projeto do Android Studio.
Configurar o Login do Google e o objeto GoogleSignInClient
No método
onCreate
da atividade de login, configure o Login do Google para solicitar os dados do usuário exigidos pelo seu app. Por exemplo, para configurar o Login do Google para solicitar informações básicas de ID do usuário e perfil, crie um objetoGoogleSignInOptions
com o parâmetroDEFAULT_SIGN_IN
. Para solicitar também os endereços de e-mail dos usuários, crie o objetoGoogleSignInOptions
com a opçãorequestEmail
.// 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 ter a melhor experiência do usuário, no login, solicite apenas os escopos necessários para o funcionamento mínimo do app. Solicite escopos adicionais apenas quando precisar deles para que os usuários vejam a tela de consentimento no contexto de uma ação realizada. Consulte Solicitar escopos adicionais.Em seguida, também no método
onCreate
da atividade de login, crie um objetoGoogleSignInClient
com as opções especificadas.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Procurar 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 seu app com o Google.
Atualize a IU de forma adequada, ou seja, oculte o botão de login, inicie a
atividade principal ou o que for mais adequado para seu app.
Se GoogleSignIn.getLastSignedInAccount
retornar null
, isso significa que o usuário ainda não
fez login no app com o Google. Atualize a IU para exibir o botão de Login do Google.
Adicionar o botão de Login do Google ao seu app
Adicione a
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" />
Opcional: se você estiver usando o gráfico padrão do botão de login em vez de fornecer os recursos do botão de login, poderá 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);
Na atividade do Android, por exemplo, no método
onCreate
, registre oOnClickListener
do botão para fazer login do usuário quando clicado:findViewById(R.id.sign_in_button).setOnClickListener(this);
Iniciar o fluxo de login
No método
onClick
da atividade, processe os toques no botão de login criando uma intent de login com o métodogetSignInIntent
e iniciando a intent comstartActivityForResult
.@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); }
Iniciar a intent solicita que o usuário selecione uma Conta do Google para fazer login. Se você solicitou escopos além de
profile
,email
eopenid
, o usuário também será solicitado a conceder acesso aos recursos solicitados.Depois que o usuário fizer login, você poderá receber um objeto
GoogleSignInAccount
para ele no métodoonActivityResult
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 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); } }
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) comgetId
e um token de ID do usuário comgetIdToken
. Se for necessário transmitir o usuário conectado no momento a um servidor de back-end, envie o token de ID para o servidor de back-end e valide o token no servidor.