---
title: 静默重新验证
description: 使用静默重新验证引擎，在 Unico 网络效应范围内分析用户的行为背景，并为当前交易提供置信度信号。换句话说，我们提供的是判断当前用户是否为该交易预期用户的置信水平。
canonical: https://developer.unico.io/zh-CN/dual-api/developers/sdks-and-tools/ios/capture-flow/capture-types/silent-revalidation
locale: zh-CN
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` 并传入包含 `externalUserId` 的 `PrepareInfo`，将已在进行中的采集与已识别的用户关联起来。

  ### 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)。

  在请求正文中包含与步骤 2 中 `PrepareInfo` 所发送的相同 `externalUserId`——这样后端才能将流程创建与已在进行中的验证关联起来。

  ```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>