---
title: 活体检测（生物特征自拍）
canonical: https://developer.unico.io/zh-CN/dual-api/developers/sdks-and-tools/flutter/capture-flow/capture-types/liveness
locale: zh-CN
generated_by: markdown-export
---

内嵌活体验证的生物特征自拍采集。SDK 通过 SmartFrames 引导用户，直到获取生物特征有效帧，并以 Base64 + JWT 形式返回图像。

:::secondary[能力]
此采集类型使用 **Liveness** 能力。关于 Liveness 工作原理的概念性概述，请参阅 Liveness 能力页面。
:::

## 工作原理

插件委托给底层原生 SDK：

1. 插件使用 SmartFrame 遮罩打开相机（Android 或 iOS）。
2. 原生 SDK 引导用户将面部置于取景框内。
3. 验证活体 — 仅当用户实际在场时会话才会完成。
4. 通过平台通道返回包含 `base64` 和 `encrypted`（JWT）的 `ResultCamera` 对象。

## 相机模式（智能拍摄）

SDK 默认启用**智能取景**和**自动拍摄**。在构建器中按如下方式配置相机模式：

```dart
UnicoCheckCameraOpener _opener = _unicoCheck
    .setAutoCapture(autoCapture: true)
    .setSmartFrame(smartFrame: true)
    .build();
```

## 开始活体采集

****步骤 2** — 在 `UnicoSelfie` 上实现自拍监听器**

在您的状态类中添加自拍回调：

  | 方法 | 描述 |
  |---|---|
  | `onSuccessSelfie(ResultCamera result)` | 拍摄成功 — 返回含 `base64`（预览）和 `encrypted`（API 用 JWT）的 `ResultCamera` |
  | `onErrorSelfie(UnicoError error)` | 拍摄失败 — 返回包含代码和描述的 `UnicoError` |

  :::warning[Token 过期]
  生成 `encrypted` 与将其提交到 API 之间的间隔不得超过 **10 分钟**。
  :::

  ```dart
  class _MyHomePageState extends State<MyHomePage>
      implements UnicoSelfie {

    @override
    void onSuccessSelfie(ResultCamera result) { }

    @override
    void onErrorSelfie(UnicoError error) { }

  }
  ```

****步骤 3** — 调用 `openCameraSelfie`**

`openCameraSelfie` 方法用于打开相机。它接受 `UnicoSelfie` 监听器的实现：

  ```dart
  _opener.openCameraSelfie(listener: this);
  ```

## 监控数据收集

`openCameraSelfie` 方法提供一个重载，接受通过 `UnicoCheckPrepareInfo` 传入的元数据，以协助识别用户会话和流程：

- `externalUserId`（String，**必填**）— 您系统中的用户标识符。传输前自动使用 SHA-256 进行哈希处理。
- `useCase`（String，可选）— 当前运行的上下文或流程的标识符。以明文形式传输。

```dart
_opener.openCameraSelfie(
  listener: this,
  prepareInfo: UnicoCheckPrepareInfo(
    externalUserId: 'external_user_id',
    useCase: 'use_case', // optional
  ),
);
```

完整的结果处理说明，请参阅[接收结果](/developers/sdks-and-tools/flutter/capture-flow/receiving-the-result)。