---
title: 静默重新验证
description: 使用智能重新验证引擎,在 Unico 的网络效应中分析用户的行为背景,为当前交易提供置信度信号——换句话说,提供该用户是预期用户的置信度。
canonical: https://developer.unico.io/zh-CN/dual-api/developers/sdks-and-tools/android/smart-revalidation/silent-revalidation
locale: zh-CN
generated_by: markdown-export
---

## PrepareInfo 属性

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

## 启动静默重新验证

****步骤 1** — 实现 `initializeSDK`**

创建一个新的 `UnicoSDK` 类/对象,包含一个静态的 `initializeSDK` 方法,该方法返回 `UnicoSDK` 实例,接收 `context` 和一个包含您的 `sdkKey`、`bundleId` 和 `environment` 的 `UnicoSDKConfig`。请保留返回的实例——稍后从 Java 调用 `startSilentValidation` 时需要用到它。

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

  ### Kotlin

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

### Java

    ```java
    UnicoSDK sdk = UnicoSDK.initializeSDK(
        context,
        new UnicoSDKConfig("your_sdk_key", "your_bundle_id", Environment.UAT)
    );
    ```

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

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

  ### Kotlin

    ```kotlin
    val prepareInfo = PrepareInfo(
        externalUserId = "external_user_id"
    )

    UnicoSDK.startSilentValidation(prepareInfo)
        .onSuccess { result -> /* ... */ }
        .onFailure { error -> /* ... */ }
    ```

### Java

:::info[Java 需要一个 Kotlin 桥接]
    `startSilentValidation` 是一个 Kotlin 挂起函数,无法直接从 Java 调用。请在您的项目中添加一个小型 Kotlin 桥接类,用于启动协程并暴露一个纯回调接口。
    :::

    ```kotlin
    interface SilentAuthCallback {
        fun onSuccess(success: Boolean)
        fun onFailure(message: String?)
    }

    object SilentAuthBridge {

        @JvmStatic
        fun startSilentValidation(
            owner: LifecycleOwner,
            sdk: UnicoSDK,
            externalUserId: String,
            callback: SilentAuthCallback
        ) {
            owner.lifecycleScope.launch {
                val result = sdk.startSilentValidation(PrepareInfo(externalUserId, null))
                result.onSuccess { callback.onSuccess(it.success) }
                    .onFailure { callback.onFailure(it.message) }
            }
        }
    }
    ```

    ```java
    SilentAuthBridge.startSilentValidation(this, sdk, externalUserId, new SilentAuthCallback() {
        @Override
        public void onSuccess(boolean success) {
            /* ... */
        }

        @Override
        public void onFailure(String message) {
            /* ... */
        }
    });
    ```

  如果验证发生在流程的开始阶段,例如登录时,请在进入步骤 3 之前先等待 `onSuccess` 回调。

****步骤 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",
      "imageBase64": "/9j/4AAQSkZJR..."
    }'
  ```

  响应中包含 `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>