---
title: Revalidación Silenciosa
description: Utiliza el motor de Revalidación Silenciosa, que analiza el contexto de comportamiento del usuario dentro del efecto de red de Unico y ofrece la señal de confianza para la transacción actual. En otras palabras, ofrecemos el nivel de confianza de que se trata del usuario esperado en la transacción.
canonical: https://developer.unico.io/es/developers/sdks-and-tools/flutter/capture-flow/capture-types/silent-revalidation
locale: es
generated_by: markdown-export
---

Utiliza el motor de Revalidación Silenciosa, que analiza el contexto de comportamiento del usuario dentro del efecto de red de Unico y ofrece la señal de confianza para la transacción actual. En otras palabras, ofrecemos el nivel de confianza de que se trata del usuario esperado en la transacción.

:::info[Requisito]
Versión mínima: `4.62.0`
:::

## Atributos de UnicoCheckPrepareInfo

| Atributo | Tipo | Requerido | Descripción |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | Identificador del usuario en su sistema. Se aplica hash automáticamente con SHA-256 antes de la transmisión, nunca se envía en texto plano. |

## Iniciar una Revalidación Silenciosa

****Paso 1** — Implementar `initializeSDK` en el código nativo**

`initializeSDK` no está expuesto en Dart. Debe ejecutarse antes de que se inicie el motor de Flutter, por lo que se llama en el código nativo de su aplicación — `Application.onCreate` en Android y `application(_:didFinishLaunchingWithOptions:)` en iOS.

  :::warning[Llámelo al iniciar la aplicación]
  `UnicoSDK.initializeSDK` debe llamarse lo antes posible al iniciar la aplicación. Llamarlo más tarde reduce el tiempo de procesamiento en segundo plano y aumenta la probabilidad de respuestas de autenticación no concluyentes.
  :::

  ### Android

    ```kotlin
    import android.app.Application
    import com.acesso.acessobio_android.onboarding.UnicoSDK
    import com.acesso.acessobio_android.onboarding.models.Environment
    import com.acesso.acessobio_android.onboarding.models.UnicoSDKConfig

    class MainApplication : Application() {
        override fun onCreate() {
            super.onCreate()

            UnicoSDK.initializeSDK(
                this,
                UnicoSDKConfig(
                    sdkKey = "your_sdk_key",
                    bundleId = "your_bundle_id",
                    environment = Environment.UAT
                )
            )
        }
    }
    ```

    Registre la clase en `android/app/src/main/AndroidManifest.xml`:

    ```xml
    <application android:name=".MainApplication">
    ```

    El plugin expone el SDK de captura nativo a su aplicación, por lo que `UnicoSDK` ya está en su classpath de compilación — no se necesita ninguna dependencia adicional en `android/app/build.gradle`.

### iOS

    ```swift
    import AcessoBio
    import Flutter
    import UIKit

    @main
    class AppDelegate: FlutterAppDelegate {
        override func application(
            _ application: UIApplication,
            didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
        ) -> Bool {
            UnicoSDK.initializeSDK(config: YourUnicoConfig(), environment: .UAT)

            GeneratedPluginRegistrant.register(with: self)
            return super.application(application, didFinishLaunchingWithOptions: launchOptions)
        }
    }
    ```

    El `config` es un `AcessoBioConfigDataSource` — el `sdkKey` proviene de `getHostKey()` y el bundle de `getBundleIdentifier()`:

    ```swift
    final class YourUnicoConfig: NSObject, AcessoBioConfigDataSource {
        func getBundleIdentifier() -> String { "your_bundle_id" }
        func getHostKey() -> String { "your_sdk_key" }
    }
    ```

  Si se omite `environment`, el valor predeterminado es producción.

****Paso 2** — Implementar `startSilentValidation`**

Después de `initializeSDK`, asocie la recolección ya en curso con el usuario identificado llamando a `startSilentValidation` con un `UnicoCheckPrepareInfo` que contenga el `externalUserId`.

  ```dart
  import 'package:unico_check/unico_check.dart';

  try {
    await UnicoSilentAuthDefault().startSilentValidation(
      UnicoCheckPrepareInfo(externalUserId: 'external_user_id'),
    );
  } on UnicoError catch (error) {
    // error.code, error.description, error.info
  }
  ```

  El `Future` devuelto se completa cuando la validación se inicia correctamente, y lanza `UnicoError` en caso de fallo.

  Si la validación ocurre al inicio del flujo, por ejemplo en el inicio de sesión, espere a que el `Future` se complete antes de continuar con el Paso 3.

  ## Errores

  | Código | Significado |
  |---|---|
  | `75001` | SDK no inicializado. No se llamó a `initializeSDK`, aún no ha terminado o falló. |
  | `75000` | Fallo genérico de captura. |

  `UnicoError.info` contiene el paso del flujo que falló. Se proporciona en iOS y siempre es nulo en Android.

****Paso 3** — Crear el proceso y autenticar**

Con la validación en curso, cree el proceso de verificación para completar la autenticación. Consulte [Referencia de la API ▸ API ▸ Crear Proceso](/developers/api-reference/api/post-processes).

  Incluya el mismo `externalUserId` enviado en el `UnicoCheckPrepareInfo` del Paso 2 en el cuerpo de la solicitud — esto es lo que permite que el backend correlacione la creación del proceso con la validación ya en curso.

  ```bash
  curl -X POST https://api.id.unico.app/processes/v1 \
    -H "Authorization: Bearer $TOKEN" \
    -H "APIKEY: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "subject": {
        "duiType": 1,
        "code": "12345678909",
        "name": "Luke Skywalker",
        "gender": "M",
        "birthDate": "2000-05-20",
        "email": "luke@example.com",
        "phone": "5519725570707"
      },
      "useCase": "Onboarding",
      "externalUserId": "external_user_id"
    }'
  ```

  La respuesta incluye el campo `silentAuth.result` con el resultado de la autenticación:

  ```json
  {
      "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
      "status": 3,
      "silentAuth": {
          "result": "yes"
      }
  }
  ```

  | Campo | Tipo | Descripción |
  |---|---|---|
  | `silentAuth.result` | string | `yes` o `no` — consulte los valores posibles a continuación. |

  <details>
  **`silentAuth.result` — valores posibles**

  | Valor | Significado |
  |---|---|
  | `yes` | Autenticación aprobada, usuario reconocido con confianza suficiente, no se necesita captura adicional. |
  | `no` | Datos insuficientes para aprobar de forma silenciosa. Se recomienda autenticar mediante biometría (selfie) u otro método alternativo. |

</details>