---
title: 사일런트 재검증
description: Unico의 네트워크 효과 내에서 사용자의 행동 맥락을 분석하는 스마트 재검증 엔진을 사용하여 현재 거래에 대한 신뢰 신호를 제공합니다 — 즉, 예상된 사용자가 맞는지에 대한 신뢰 수준을 제공합니다.
canonical: https://developer.unico.io/ko/dual-api/developers/sdks-and-tools/android/smart-revalidation/silent-revalidation
locale: ko
generated_by: markdown-export
---

## PrepareInfo 속성

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

## 사일런트 재검증 시작

****1단계** — `initializeSDK` 구현**

정적 메서드 `initializeSDK`를 가진 새로운 `UnicoSDK` 클래스/객체를 생성합니다. 이 메서드는 `context`와, `sdkKey`, `bundleId`, `environment`를 포함하는 `UnicoSDKConfig`를 매개변수로 받아 `UnicoSDK` 인스턴스를 반환합니다. 반환된 인스턴스는 보관해 두어야 합니다 — 이후 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` 이후, `externalUserId`를 포함하는 `PrepareInfo`와 함께 `startSilentValidation`을 호출하여 이미 진행 중인 수집(collection)을 식별된 사용자와 연결합니다.

  ### Kotlin

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

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

### Java

:::info[Java에는 Kotlin 브리지가 필요합니다]
    `startSilentValidation`은 Kotlin suspend 함수이므로 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>