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

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

Cuando inicies el flujo para guardar contraseñas, se le mostrará al usuario un diálogo de hoja inferior que le permitirá elegir si quiere guardar su contraseña y en qué Cuenta de Google quiere hacerlo.

Captura de pantalla de la contraseña guardada

Inicia el diálogo de la hoja inferior para guardar la contraseña

Debes iniciar el diálogo de guardar contraseña después de autenticar el nombre de usuario y la contraseña con tu backend. Mantén las credenciales en la memoria durante la autenticación. Después de confirmar que las credenciales son válidas, inicia el diálogo de guardar haciendo lo siguiente:

  1. Crea un objeto SignInPassword nuevo. Se debe inicializar con el ID de usuario que usa 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 PendingIntent para mostrar el diálogo de guardar contraseña desde 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 del 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
    });