Cómo guardar contraseñas con la función para guardar credenciales

Para habilitar el acceso con One Tap para los usuarios recurrentes, puedes solicitarles que guarden su contraseña en Google. El usuario podrá acceder con sus contraseñas guardadas en tu app y en la Web.

Cuando inicies el flujo para guardar la contraseña, el usuario verá un diálogo de hoja inferior que le permitirá elegir si desea guardar su contraseña y en qué Cuenta de Google quiere guardarla.

Guardar captura de pantalla de contraseña

Iniciar diálogo de la hoja inferior para guardar contraseñas

Debes iniciar el cuadro de diálogo para guardar la contraseña después de haber autenticado el nombre de usuario y la contraseña con tu backend. Mantén las credenciales en la memoria durante la autenticación. Una vez que hayas confirmado que las credenciales son válidas, inicia el diálogo de guardado de la siguiente manera:

  1. Crea un objeto SignInPassword nuevo. Se debe inicializar con el ID de usuario que usan con tu servicio (por ejemplo, su nombre de usuario o dirección de correo electrónico) y la contraseña que deseas guardar.

    private static final int REQUEST_CODE_GIS_SAVE_PASSWORD = 2; /* unique request id */
    private void savePassword() {
        SignInPassword signInPassword = new SignInPassword(userId, password);
        ...
    
  2. Crea un objeto SavePasswordRequest

    SavePasswordRequest savePasswordRequest =
        SavePasswordRequest.builder().setSignInPassword(signInPassword).build();
    
  3. Obtén un objeto PendingIntent para mostrar el diálogo de guardado de contraseña de Identity.getCredentialSavingClient y, luego, inicia el flujo:

    Identity.getCredentialSavingClient(activity)
       .savePassword(savePasswordRequest)
       .addOnSuccessListener(
           result -> {
               startIntentSenderForResult(
                   result.getPendingIntent().getIntentSender(),
                   REQUEST_CODE_GIS_SAVE_PASSWORD,
                   /* fillInIntent= */ null,
                   /* flagsMask= */ 0,
                   /* flagsValue= */ 0,
                   /* extraFlags= */ 0,
                   /* options= */ null);
           })
    

Cómo controlar los resultados de guardado de contraseñas

Controla el resultado del flujo de guardado de contraseñas en onActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_GIS_SAVE_PASSWORD) {
        if (resultCode == Activity.RESULT_OK) {
            /* password was saved */
        } else if (resultCode == Activity.RESULT_CANCELED) {
            /* password saving was cancelled */
        }
    }
}
private ActivityResultLauncher<IntentSenderRequest> savePasswordHandler =
    registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
        // handle intent result here
    });