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

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

:::info[요구 사항]
최소 버전: `3.3.0`
:::

## PrepareInfo 속성

| 속성 | 유형 | 필수 | 설명 |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | 사용자 시스템 내 식별자입니다. 전송 전에 SHA-256으로 자동 해시 처리되며, 평문으로 전송되지 않습니다. |

## 사일런트 재검증 시작하기

****Step 1** — `initializeSDK` 구현**

정적 `UnicoSDK.initializeSDK` 메서드를 호출하여 `AcessoBioConfigDataSource`와 `environment`를 전달하세요.

  :::warning[앱 실행 시 호출하세요]
  `UnicoSDK.initializeSDK`는 앱 실행 시 가능한 한 빨리 호출되어야 합니다(예: `application(_:didFinishLaunchingWithOptions:)`). 더 늦게 호출하면 백그라운드 처리 시간이 줄어들고 인증 응답이 결론에 이르지 못할 가능성이 높아집니다.
  :::

  ### Swift

    ```swift
    UnicoSDK.initializeSDK(
        config: YourUnicoConfig(),
        environment: .UAT
    )
    ```

### Objective-C

    ```objectivec
    [UnicoSDK initializeSDKWithConfig:[YourUnicoConfig new] environment:UAT];
    ```

  `config`는 캡처를 위해 이미 구현한 것과 동일한 `AcessoBioConfigDataSource`이며, `sdkKey`는 `getHostKey()`에서, 번들은 `getBundleIdentifier()`에서 가져옵니다:

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

  `environment`를 생략하면 기본값은 `.PROD`입니다.

****Step 2** — `startSilentValidation` 구현**

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

  ### Swift

    ```swift
    let prepareInfo = PrepareInfo(externalUserId: "external_user_id")

    UnicoSDK.startSilentValidation(prepareInfo: prepareInfo) { result in
        switch result {
        case .success:
            break
        case .failure(let error):
            print(error.code, error.desc, error.info)
        }
    }
    ```

### Objective-C

    ```objectivec
    PrepareInfo *prepareInfo = [[PrepareInfo alloc] initWithExternalUserId:@"external_user_id"
                                                                  useCase:nil];

    [UnicoSDK startSilentValidationWithPrepareInfo:prepareInfo
                                   errorCompletion:^(ErrorBio * _Nullable error) {
        if (error == nil) {
            // ...
        } else {
            // error.code, error.desc, error.info
        }
    }];
    ```

  로그인처럼 플로우 시작 시점에 검증이 이루어지는 경우, 3단계로 넘어가기 전에 성공 콜백을 기다리세요.

  ## 오류

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

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

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

  응답에는 인증 결과를 담은 `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>