---
title: 라이브니스 (생체 인식 셀피)
canonical: https://developer.unico.io/ko/dual-api/developers/sdks-and-tools/flutter/capture-flow/capture-types/liveness
locale: ko
generated_by: markdown-export
---

임베디드 라이브니스 검증을 포함한 생체 인식 셀피 캡처. SDK는 SmartFrames를 통해 생체 인식적으로 유효한 프레임을 얻을 때까지 사용자를 안내하고 이미지를 Base64 + JWT로 반환합니다.

:::secondary[기능]
이 캡처 유형은 **라이브니스** 기능을 사용합니다. 라이브니스 작동 방식에 대한 개념적 개요는 라이브니스 기능 페이지를 참조하세요.
:::

## 작동 방식

플러그인은 기반 네이티브 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[토큰 만료]
  `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)을 참조하세요.