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

Si quieres habilitar el acceso con One Tap para los usuarios recurrentes, puedes pedirles que guarden su contraseña con Google. El usuario podrá acceder con su contraseñas 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 les permite elegir si desean guardar su contraseña y en qué Cuenta de Google se quiere guardar.

Captura de pantalla de Guardar contraseña

Abrir diálogo para guardar la hoja inferior

Deberías abrir el cuadro de diálogo para guardar la contraseña después de autenticar la nombre de usuario y contraseña con tu backend. Mantén las credenciales en la memoria mientras autenticando. Una vez que confirmes que las credenciales son válidas, inicia el Guardar de la siguiente manera:

  1. Crea un objeto SignInPassword nuevo. Debe inicializarse con el usuario ID que usan con tu servicio (por ejemplo, el nombre de usuario o la dirección de correo electrónico) y la contraseña que quieres 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 una PendingIntent para mostrar el diálogo para guardar la contraseña 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 cuando se guardan las 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
    });