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 inicie o fluxo de login.
Antes de começar
Configure um projeto do Console de APIs do Google e um 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 de usuário necessários no acesso ao app. Por exemplo, para configurar o Login do Google para solicitar o ID e as informações básicas de perfil dos usuários, 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 extras para acessar as APIs do Google, especifique-os com
requestScopes
. Para garantir a melhor experiência do usuário, ao fazer login, solicite apenas os escopos necessários para que o app funcione minimamente. Solicite outros escopos apenas quando precisar deles. Assim, os usuários vão ver a tela de consentimento no contexto de uma ação que eles realizaram. Consulte Como solicitar mais escopos.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);
Verificar se já existe um usuário conectado
No método onStart
da atividade, verifique se um usuário já fez login no
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á terá feito login no seu app com o Google.
Atualize a interface de acordo com isso. Ou seja, oculte o botão de login, inicie a
atividade principal ou o que for apropriado para seu app.
Se GoogleSignIn.getLastSignedInAccount
retornar null
, o usuário ainda não fez
login no seu app com o Google. Atualize a interface para mostrar o botão
de Login do Google.
Adicionar o botão de Login do Google ao app
Adicione o
SignInButton
ao layout do 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 do botão de login padrão em vez de fornecer seus próprios recursos, personalize 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); }
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
eopenid
, o usuário também vai precisar 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); } }
Você também pode 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 para o usuário comgetIdToken
. Se você precisar transmitir o usuário conectado no momento para um servidor de back-end, envie o token de ID para o servidor de back-end e valide o token no servidor.