Para integrar o Login do Google em seu aplicativo Android, configure o Login do Google e adicione um botão ao layout do seu aplicativo que inicia o fluxo de login.
Antes de você começar
Configure um projeto do Google API Console e configure seu projeto do Android Studio .
Configurar o Login do Google e o objeto GoogleSignInClient
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 o Login do Google para solicitar o ID dos usuários e as informações básicas do 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 obter a melhor experiência do usuário, ao entrar, solicite apenas os escopos necessários para que seu aplicativo funcione minimamente. Solicite escopos adicionais somente quando precisar deles, para que seus usuários vejam a tela de consentimento no contexto de uma ação que eles executaram. Consulte Solicitando escopos adicionais .Em seguida, também no método
onCreate
da sua 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);
Verifique se há um usuário conectado existente
No método onStart
da sua atividade, verifique se um usuário já fez login no seu aplicativo 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 em seu aplicativo com o Google. Atualize sua interface do usuário de acordo, ou seja, oculte o botão de login, inicie sua atividade principal ou o que for apropriado para seu aplicativo.
Se GoogleSignIn.getLastSignedInAccount
retornar null
, o usuário ainda não fez login no seu aplicativo com o Google. Atualize sua IU para exibir o botão de login do Google.
Adicione o botão de login do Google ao seu aplicativo
Adicione 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" />
Opcional : se você estiver usando o gráfico de botão de login padrão em vez de fornecer seus próprios recursos de 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 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
No método
onClick
da atividade, gerencie os toques no botão de login criando um intent de login com o métodogetSignInIntent
e iniciando o 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 o 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á obter um objeto
GoogleSignInAccount
para o usuário 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 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); } }
Você também pode obter 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 passar o usuário conectado no momento para um servidor de back-end, envie o token de ID para seu servidor de back-end e valide o token no servidor.