Estamos interrumpiendo la Biblioteca de la plataforma de acceso de Google JavaScript para web . Para la autenticación y el usuario de inicio de sesión, utilice el nuevo Google SDK servicios de identidad, tanto para web y Android en su lugar .

Integración del inicio de sesión de Google en su aplicación de Android

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

Configurar un proyecto de Google API de consola y configurar su proyecto Android Studio .

Configurar el inicio de sesión de Google y el objeto GoogleSignInClient

  1. En el inicio de sesión de actividad onCreate método, de configuración de sesión de Google para solicitar los datos de usuario requeridos por la aplicación. Por ejemplo, para configurar acceso de Google a los usuarios ID de petición y la información básica de perfil, crear un GoogleSignInOptions objeto con el DEFAULT_SIGN_IN parámetro. Para direcciones de correo electrónico de los usuarios de petición, así, crean las GoogleSignInOptions objeto con la requestEmail opción.

    // 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 alcances adicionales para acceso a las API de Google, especificarlos con requestScopes . Para obtener la mejor experiencia de usuario, al iniciar sesión, solo solicite los ámbitos 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. Ver Solicitando ámbitos adicionales .

  2. Entonces, también en el inicio de sesión de actividad onCreate método, crear un GoogleSignInClient objeto con las opciones especificadas.

    // 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 su actividad onStart método, comprobar si un usuario ya ha accedido a 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 GoogleSignInAccount objeto (en lugar de null ), el usuario ya ha accedido a su aplicación con Google. Actualice su interfaz de usuario 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 vuelve null , el usuario aún no ha accedido a 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

  1. El botón de inicio de sesión de Google estándar Añadir el SignInButton en la disposición 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" />
    
  2. Opcional: Si está utilizando el inicio de sesión predeterminado botón gráfico en lugar de proporcionar su propio inicio de sesión activos botón, se puede personalizar el tamaño del botón con el setSize método.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. En la actividad de Android (por ejemplo, en el onCreate método), registro de su botón de OnClickListener para iniciar sesión en el usuario al hacer clic en:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Iniciar el flujo de inicio de sesión

  1. Imagen del selector de cuenta de inicio de sesión En la actividad del onClick método, mango de inicio de sesión en los grifos de botón mediante la creación de un inicio de sesión de intención con el getSignInIntent método, e iniciando la intención con startActivityForResult .

    @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ó alcances más allá de profile , email , y openid , el usuario también es un mensaje para otorgar acceso a los recursos solicitados.

  2. Después el usuario inicia sesión, se puede obtener una GoogleSignInAccount objeto para el usuario en la actividad de la onActivityResult método.

    @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 GoogleSignInAccount objeto contiene información acerca de la firma en el usuario, 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 , del usuario ID de Google (para el uso del lado del cliente) con getId , y un ID de símbolo para el usuario con getIdToken . Si tiene que pasar el momento, han accedido a su usuario a un servidor back-end, enviar el ID de contadores a su servidor backend y validar el token en el servidor.