Para integrar Google Sign-In en su aplicación de Android, configure Google Sign-In y agregue un botón al diseño de su aplicación que inicia el flujo de inicio de sesión.
Antes de que empieces
Configure un proyecto de la Consola API de Google y configure su proyecto de Android Studio .
Configurar el inicio de sesión de Google y el objeto GoogleSignInClient
En el método
onCreate
de su actividad deonCreate
deonCreate
, configure elonCreate
sesión de Google para solicitar los datos de usuario requeridos por su aplicación. Por ejemplo, para configurar el inicio de sesión de Google para solicitar el ID de los usuarios y la información de perfil básica, cree un objetoGoogleSignInOptions
con el parámetroDEFAULT_SIGN_IN
. Para solicitar también las direcciones de correo electrónico de los usuarios, cree el objetoGoogleSignInOptions
con la opciónrequestEmail
.// 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();
Si necesita solicitar ámbitos adicionales para acceder a las API de Google, especifíquelos con
requestScopes
. Para obtener la mejor experiencia de usuario, al iniciar sesión, solo solicite los alcances necesarios para que su aplicación funcione mínimamente. Solicite ámbitos adicionales solo cuando los necesite, de modo que sus usuarios vean la pantalla de consentimiento en el contexto de una acción que realizaron. Consulte Solicitud de ámbitos adicionales .Luego, también en el método
onCreate
de su actividad deonCreate
deonCreate
, cree un objetoGoogleSignInClient
con las opciones que especificó.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Compruebe si existe un usuario que haya iniciado sesión
En el método onStart
su actividad, compruebe si un usuario ya ha onStart
en su aplicación con 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);
Si GoogleSignIn.getLastSignedInAccount
devuelve un objeto GoogleSignInAccount
(en lugar de null
), el usuario ya ha GoogleSignIn.getLastSignedInAccount
GoogleSignInAccount
en su aplicación con Google. Actualice su IU en consecuencia, es decir, oculte el botón de inicio de sesión, inicie su actividad principal o lo que sea apropiado para su aplicación.
Si GoogleSignIn.getLastSignedInAccount
devuelve null
, el usuario aún no ha GoogleSignIn.getLastSignedInAccount
en su aplicación con Google. Actualice su interfaz de usuario para mostrar el botón de inicio de sesión de Google.
Agrega el botón de inicio de sesión de Google a tu aplicación
Agregue
SignInButton
en el diseño de su aplicación:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Opcional : si está utilizando el gráfico del botón de inicio de sesión predeterminado en lugar de proporcionar sus propios activos de botón de inicio de sesión, puede personalizar el tamaño del botón con el método
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
En la actividad de Android (por ejemplo, en el método
onCreate
), registre elOnClickListener
su botón paraOnClickListener
sesión como usuario cuandoOnClickListener
clic en él:findViewById(R.id.sign_in_button).setOnClickListener(this);
Iniciar el flujo de inicio de sesión
En el método
onClick
la actividad, maneje losgetSignInIntent
botón de inicio de sesión creando una intención de inicio de sesión con el métodogetSignInIntent
y comenzando la intención constartActivityForResult
.@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); }
Al iniciar la intención, el usuario debe seleccionar una cuenta de Google para iniciar sesión. Si solicitó ámbitos más allá del
profile
,email
yopenid
, también se le solicita al usuario que otorgue acceso a los recursos solicitados.Una vez que el usuario
GoogleSignInAccount
, puede obtener un objetoGoogleSignInAccount
para el usuario en el métodoonActivityResult
la actividad.@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); } }
El objeto
GoogleSignInAccount
contiene información sobre el usuario queGoogleSignInAccount
, como el nombre del usuario.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); } }
También puede obtener la dirección de correo electrónico del usuario con
getEmail
, el ID de Google del usuario (para uso del lado del cliente) congetId
y un token de ID para el usuario congetIdToken
. Si necesita pasar el usuario actualmente conectado a un servidor backend, envíe el token de ID a su servidor backend y valide el token en el servidor.