---
title: 静默重新验证
description: 使用静默重新验证引擎，在 Unico 网络效应范围内分析用户的行为背景，并为当前交易提供置信度信号。换句话说，我们提供的是判断当前用户是否为该交易预期用户的置信水平。
canonical: https://developer.unico.io/zh-CN/developers/sdks-and-tools/flutter/capture-flow/capture-types/silent-revalidation
locale: zh-CN
generated_by: markdown-export
---

使用静默重新验证引擎，在 Unico 网络效应范围内分析用户的行为背景，并为当前交易提供置信度信号。换句话说，我们提供的是判断当前用户是否为该交易预期用户的置信水平。

:::info[要求]
最低版本：`4.62.0`
:::

## UnicoCheckPrepareInfo 属性

| 属性 | 类型 | 是否必填 | 描述 |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | 您系统中的用户标识符。传输前会自动使用 SHA-256 进行哈希处理，绝不会以明文形式发送。 |

## 开始静默重新验证

****步骤 1** — 在原生代码中实现 `initializeSDK`**

`initializeSDK` 未在 Dart 中暴露。它必须在 Flutter 引擎启动之前运行，因此您需要在应用的原生代码中调用它——Android 上为 `Application.onCreate`，iOS 上为 `application(_:didFinishLaunchingWithOptions:)`。

  :::warning[在应用启动时调用]
  `UnicoSDK.initializeSDK` 必须在应用启动时尽早调用。延迟调用会缩短后台处理时间，并增加认证结果不确定的可能性。
  :::

  ### 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
                )
            )
        }
    }
    ```

    在 `android/app/src/main/AndroidManifest.xml` 中注册该类：

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

    该插件会将原生采集 SDK 暴露给您的应用，因此 `UnicoSDK` 已存在于您的编译 classpath 中——无需在 `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)
        }
    }
    ```

    `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`，默认值为生产环境。

****步骤 2** — 实现 `startSilentValidation`**

在 `initializeSDK` 之后，通过调用 `startSilentValidation` 并传入包含 `externalUserId` 的 `UnicoCheckPrepareInfo`，将已在进行中的采集与已识别的用户关联起来。

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

  返回的 `Future` 会在验证成功启动时完成，失败时抛出 `UnicoError`。

  如果验证发生在流程开始时（例如登录时），请等待 `Future` 完成后再继续执行步骤 3。

  ## 错误

  | 代码 | 含义 |
  |---|---|
  | `75001` | SDK 未初始化。`initializeSDK` 尚未被调用、尚未完成，或调用失败。 |
  | `75000` | 通用采集失败。 |

  `UnicoError.info` 携带流程中失败的步骤。该字段仅在 iOS 上提供，在 Android 上始终为 null。

****步骤 3** — 创建流程并进行认证**

在验证进行的同时，创建验证流程以完成认证。请参阅 [API 参考 ▸ API ▸ 创建流程](/developers/api-reference/api/post-processes)。

  在请求正文中包含与步骤 2 中 `UnicoCheckPrepareInfo` 所发送的相同 `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>