Para integrar el Acceso con Google en tu app para Android, configura Acceso con Google y agregar un botón al diseño de tu app que inicie el flujo de acceso
Antes de comenzar
Configura un proyecto de la Consola de API de Google y tu proyecto de Android Studio.
Configura el Acceso con Google y el objeto GoogleSignInClient
En el método
onCreate
de tu actividad de acceso, configura el Acceso con Google como solicitar los datos del usuario requeridos por tu app. Por ejemplo, para configurar Acceso con Google para solicitar datos de Google y la información básica del perfil, crea unGoogleSignInOptions
objeto con el parámetroDEFAULT_SIGN_IN
. Solicitar a los usuarios correo electrónico externas, crea el objetoGoogleSignInOptions
con el 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 necesitas solicitar permisos adicionales para acceder a las APIs de Google, especifícalos con
requestScopes
. Para obtener la mejor experiencia del usuario, durante el acceso, solicita únicamente los permisos que estén o requeridas para que tu app funcione mínimamente. Solicita cualquier permiso adicional solo cuando los necesitas, de modo que los usuarios vean la pantalla de consentimiento en la el contexto de una acción que realizó. Consulta Solicita ámbitos adicionales.Luego, también en el método
onCreate
de tu actividad de acceso, crea unGoogleSignInClient
con las opciones que especificaste.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Cómo buscar un usuario existente que haya accedido a su cuenta
En el método onStart
de tu actividad, verifica si un usuario ya accedió a su cuenta.
tu 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
muestra un objeto GoogleSignInAccount
(en lugar de null
), el usuario ya accedió a tu app con Google.
Actualiza tu IU según corresponda, es decir, oculta el botón de acceso, inicia tu
la actividad principal o lo que sea apropiado para tu app.
Si GoogleSignIn.getLastSignedInAccount
muestra null
, significa que el usuario aún no lo ha hecho.
accediste a tu app con Google. Actualiza tu IU para mostrar el botón de Acceso con Google.
Agrega el botón de Acceso con Google a tu app
Agrega el
SignInButton
al diseño de tu 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 usas el gráfico del botón de acceso predeterminado en lugar del proporcionar tus propios recursos del botón de acceso, puedes personalizar tamaño con el atributo
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
), registra El elementoOnClickListener
de tu botón para que el usuario acceda cuando hace clic en él:findViewById(R.id.sign_in_button).setOnClickListener(this);
Cómo iniciar el flujo de acceso
En el método
onClick
de la actividad, controla los toques en los botones de acceso creando un intent de acceso congetSignInIntent
e iniciar el intent 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); }
Cuando se inicia el intent, se le solicita al usuario que seleccione una Cuenta de Google para acceder tus amigos. Si solicitaste alcances más allá de
profile
,email
yopenid
, la al usuario también se le pide que otorgue acceso a los recursos solicitados.Después de que el usuario acceda, puedes obtener un objeto
GoogleSignInAccount
para él en el métodoonActivityResult
de 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 que accedió usuario, como su nombre.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 puedes obtener la dirección de correo electrónico del usuario con
getEmail
, el ID de Google del usuario (para uso del cliente) congetId
y un token de ID para el usuario congetIdToken
. Si necesitas pasar el usuario que accedió a un servidor de backend, envía el token de ID a tu servidor de backend y valida el token en el servidor.