---
title: Тихая ревалидация
description: Использует движок Тихая ревалидация, который анализирует поведенческий контекст пользователя в рамках сетевого эффекта Unico и выдаёт сигнал уверенности для текущей транзакции. Другими словами, мы предоставляем уровень уверенности в том, что это именно тот пользователь, который ожидается в транзакции.
canonical: https://developer.unico.io/ru/dual-api/developers/sdks-and-tools/ios/capture-flow/capture-types/silent-revalidation
locale: ru
generated_by: markdown-export
---

Использует движок Тихая ревалидация, который анализирует поведенческий контекст пользователя в рамках сетевого эффекта Unico и выдаёт сигнал уверенности для текущей транзакции. Другими словами, мы предоставляем уровень уверенности в том, что это именно тот пользователь, который ожидается в транзакции.

:::info[Требование]
Минимальная версия: `3.3.0`
:::

## Атрибуты PrepareInfo

| Атрибут | Тип | Обязательно | Описание |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | Идентификатор пользователя в вашей системе. Автоматически хешируется с помощью SHA-256 перед передачей, никогда не отправляется в открытом виде. |

## Запуск тихой ревалидации

****Шаг 1** — Реализуйте `initializeSDK`**

Вызовите статический метод `UnicoSDK.initializeSDK`, передав ваш `AcessoBioConfigDataSource` и `environment`.

  :::warning[Вызывайте его при запуске приложения]
  `UnicoSDK.initializeSDK` должен вызываться как можно раньше при запуске приложения (например, в `application(_:didFinishLaunchingWithOptions:)`). Более поздний вызов сокращает время фоновой обработки и увеличивает вероятность неопределённых ответов аутентификации.
  :::

  ### Swift

    ```swift
    UnicoSDK.initializeSDK(
        config: YourUnicoConfig(),
        environment: .UAT
    )
    ```

### Objective-C

    ```objectivec
    [UnicoSDK initializeSDKWithConfig:[YourUnicoConfig new] environment:UAT];
    ```

  `config` — это тот же `AcessoBioConfigDataSource`, который вы уже реализовали для захвата — `sdkKey` берётся из `getHostKey()`, а bundle — из `getBundleIdentifier()`:

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

  Если `environment` не указан, по умолчанию используется `.PROD`.

****Шаг 2** — Реализуйте `startSilentValidation`**

После `initializeSDK` свяжите уже выполняющийся сбор данных с идентифицированным пользователем, вызвав `startSilentValidation` с `PrepareInfo`, содержащим `externalUserId`.

  ### Swift

    ```swift
    let prepareInfo = PrepareInfo(externalUserId: "external_user_id")

    UnicoSDK.startSilentValidation(prepareInfo: prepareInfo) { result in
        switch result {
        case .success:
            break
        case .failure(let error):
            print(error.code, error.desc, error.info)
        }
    }
    ```

### Objective-C

    ```objectivec
    PrepareInfo *prepareInfo = [[PrepareInfo alloc] initWithExternalUserId:@"external_user_id"
                                                                  useCase:nil];

    [UnicoSDK startSilentValidationWithPrepareInfo:prepareInfo
                                   errorCompletion:^(ErrorBio * _Nullable error) {
        if (error == nil) {
            // ...
        } else {
            // error.code, error.desc, error.info
        }
    }];
    ```

  Если валидация происходит в начале потока, например при входе в систему, дождитесь успешного колбэка, прежде чем переходить к Шагу 3.

  ## Ошибки

  | Код | Смысл |
  |---|---|
  | `75001` | SDK не инициализирован. `initializeSDK` не был вызван, ещё не завершился или завершился с ошибкой. |
  | `75000` | Общая ошибка захвата. |

****Шаг 3** — Создайте процесс и выполните аутентификацию**

Пока валидация выполняется, создайте процесс верификации для завершения аутентификации. См. [Справочник API ▸ API ▸ Создание процесса](/dual-api/developers/api-reference/api/post-processes).

  Включите в тело запроса тот же `externalUserId`, который был отправлен в `PrepareInfo` на Шаге 2 — именно это позволяет бэкенду сопоставить создание процесса с уже выполняющейся валидацией.

  ```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"
    }'
  ```

  Ответ содержит поле `silentAuth.result` с результатом аутентификации:

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

  | Поле | Тип | Описание |
  |---|---|---|
  | `silentAuth.result` | string | `yes` или `no` — см. возможные значения ниже. |

  <details>
  **`silentAuth.result` — возможные значения**

  | Значение | Смысл |
  |---|---|
  | `yes` | Аутентификация одобрена, пользователь распознан с достаточной уверенностью, дополнительный захват не требуется. |
  | `no` | Недостаточно данных для одобрения в тихом режиме. Рекомендуется аутентификация с помощью биометрии (селфи) или другого альтернативного метода. |

</details>