我们停止了谷歌登录在JavaScript平台的图书馆网络。对于认证和用户登录,使用新的谷歌身份服务的SDK两种网络Android的替代。

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

Para integrar el inicio de sesión de Google en su aplicación de Android, configure el inicio de sesión de Google y agregue un botón al diseño de su aplicación que inicie el flujo de inicio de sesión.

Antes de que empieces

Configure un proyecto de Google API Console y configure su proyecto de Android Studio .

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

  1. En el método onCreate de su actividad de inicio de sesión, configure el inicio de 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 básica del perfil, cree un objeto GoogleSignInOptions con el parámetro DEFAULT_SIGN_IN . Para solicitar también las direcciones de correo electrónico de los usuarios, cree el objeto GoogleSignInOptions con la opción requestEmail .

    // 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 ámbitos necesarios para que su aplicación funcione mínimamente. Solicite alcances adicionales solo cuando los necesite, para que sus usuarios vean la pantalla de consentimiento en el contexto de una acción que realizaron. Consulte Solicitud de ámbitos adicionales .

  2. Luego, también en el método onCreate de su actividad de inicio de sesión, cree un objeto GoogleSignInClient con las opciones que especificó.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Buscar un usuario registrado existente

En el método onStart de su actividad, verifique si un usuario ya inició sesión 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 iniciado sesión en 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 devuelve null , el usuario aún no ha iniciado sesión en su aplicación con Google. Actualice su interfaz de usuario para mostrar el botón de inicio de sesión de Google.

Agregue el botón de inicio de sesión de Google a su aplicación

  1. El botón estándar de inicio de sesión de Google 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" />
    
  2. Opcional : si usa 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);
    
  3. En la actividad de Android (por ejemplo, en el método onCreate ), registre el OnClickListener de su botón para que el usuario inicie sesión cuando se haga clic:

    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 el método onClick de la actividad, controle las pulsaciones del botón de inicio de sesión creando una intención de inicio de sesión con el método getSignInIntent 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, se solicita al usuario que seleccione una cuenta de Google para iniciar sesión. Si solicitó ámbitos más allá de profile , email y openid , también se le solicita al usuario que conceda acceso a los recursos solicitados.

  2. Después de que el usuario inicie sesión, puede obtener un objeto GoogleSignInAccount para el usuario en el método onActivityResult 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 inició sesión, 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 , la identificación de Google del usuario (para uso del lado del cliente) con getId y un token de identificación para el usuario con getIdToken . 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.