---
title: 사일런트 재검증
description: 사일런트 재검증 엔진을 사용하여 유니코의 네트워크 효과 내에서 사용자의 행동 컨텍스트를 분석하고 현재 거래에 대한 신뢰 신호를 제공합니다. 다시 말해, 해당 사용자가 거래에서 예상된 사용자일 신뢰 수준을 제공합니다.
canonical: https://developer.unico.io/ko/developers/sdks-and-tools/flutter/capture-flow/capture-types/silent-revalidation
locale: ko
generated_by: markdown-export
---

사일런트 재검증 엔진을 사용하여 유니코의 네트워크 효과 내에서 사용자의 행동 컨텍스트를 분석하고 현재 거래에 대한 신뢰 신호를 제공합니다. 다시 말해, 해당 사용자가 거래에서 예상된 사용자일 신뢰 수준을 제공합니다.

:::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()`에서, 번들은 `getBundleIdentifier()`에서 가져옵니다:

    ```swift
    final class YourUnicoConfig: NSObject, AcessoBioConfigDataSource {
        func getBundleIdentifier() -> String { "your_bundle_id" }
        func getHostKey() -> String { "your_sdk_key" }
    }
    ```

  `environment`를 생략하면 기본값은 운영 환경(production)입니다.

****2단계** — `startSilentValidation` 구현**

`initializeSDK` 이후, `externalUserId`를 포함하는 `UnicoCheckPrepareInfo`와 함께 `startSilentValidation`을 호출하여 이미 진행 중인 수집을 식별된 사용자와 연결하세요.

  ```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`를 던집니다.

  로그인처럼 플로우 시작 시점에 검증이 이루어지는 경우, 3단계로 넘어가기 전에 `Future`가 완료되기를 기다리세요.

  ## 오류

  | 코드 | 의미 |
  |---|---|
  | `75001` | SDK가 초기화되지 않았습니다. `initializeSDK`가 호출되지 않았거나, 아직 완료되지 않았거나, 실패했습니다. |
  | `75000` | 일반적인 캡처 실패입니다. |

  `UnicoError.info`는 실패한 플로우 단계를 담고 있습니다. iOS에서만 제공되며 Android에서는 항상 null입니다.

****3단계** — 프로세스 생성 및 인증**

검증이 진행되는 동안, 인증을 완료하기 위한 검증 프로세스를 생성하세요. [API 참조 ▸ API ▸ Create Process](/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>