메인 콘텐츠로 건너뛰기
네이티브 iOS 및 Android SDK를 감싸는 크로스 플랫폼 React Native SDK로, 신원 확인을 위한 통합된 TypeScript API를 제공합니다.

GitHub 저장소

GitHub에서 소스 코드와 예제를 확인하세요

npm 패키지

@didit-protocol/sdk-react-native

네이티브 SDK: React Native 및 Expo 앱에 권장되는 방식입니다. 이 SDK는 최상의 사용자 경험, 최적화된 카메라 처리, 완전한 NFC 지원을 위해 네이티브 iOS 및 Android SDK를 감쌉니다.


요구 사항

플랫폼 요구 사항

생체 인식 동의에는 네이티브 4.10.0 이상이 필요합니다. 일리노이주, 텍사스주 또는 콜로라도주 법률이 적용되는 사용자의 경우, Didit은 첫 얼굴 촬영 전에 명시적인 생체 인식 동의를 요청할 수 있습니다. iOS와 Android 네이티브 4.10.0 이상을 고정한 React Native SDK 릴리스는 이 단계를 표시합니다. 이전 버전은 이 단계를 표시할 수 없습니다. 해당 세션은 이전과 같이 실행되며, 결정 결과에는 동의가 수집되지 않은 것으로 보고됩니다(biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). 해당 주에서 사용자를 인증한다면 업그레이드하세요.

설치

Expo (권장)

그다음 app.json(또는 app.config.js)에 구성 플러그인을 추가합니다. NFC는 기본적으로 활성화되어 있습니다:
플러그인이 두 플랫폼을 자동으로 구성합니다:
  • Android: Gradle에 Didit Maven 저장소를 추가하고, diditSdkAndroidNfcEnabled Gradle 속성을 설정하며, BouncyCastle 종속성 및 패키징 규칙을 적용합니다
  • iOS: Podfile에 DiditSDK podspec을 추가합니다(NFC가 활성화된 경우 iOS 15로 고정됨)
플러그인은 Info.plist를 편집하지 않습니다. 같은 파일의 ios.infoPlist 아래에 iOS 권한 키를 추가하고, NFC를 사용하는 경우 ISO7816 select 식별자도 추가합니다. D392F000260100000001을 사용하면 SDK가 JPKI를 통해 일본 마이넘버 카드를 읽을 수 있습니다:

NFC 종속성 비활성화

NFC 지원 없이 빌드하려면(바이너리 크기가 더 작고 NFC 기능이 필요하지 않음) 플러그인 옵션을 전달합니다:
NFC를 비활성화하면 iOS NFC 기능, NFC 권한(entitlements), NFC 관련 프로비저닝 설정이 필요하지 않습니다.
이 SDK는 Expo Go에서 사용할 수 없는 네이티브 모듈(카메라, NFC)을 사용합니다. 개발 빌드를 사용하거나 npx expo prebuild를 실행하여 네이티브 프로젝트를 생성해야 합니다.

React Native CLI

iOS 설정

Podfile에 DiditSDK pod를 추가합니다(CocoaPods trunk에는 등록되어 있지 않습니다). 아래 블록은 DIDIT_SDK_IOS_NFC_ENABLED 환경 변수를 지원하므로, 설치 시점에 NFC 없는 서브스펙(DiditSDK/Core)을 켜거나 끌 수 있습니다:
podspec URL의 태그는 설치된 패키지 버전의 diditNativeSdkVersions.ios와 일치해야 합니다. React Native 4.13.2는 네이티브 iOS 4.13.2와 네이티브 Android 4.13.2에 고정되어 있습니다. podspec이 main을 가리키도록 하지 마십시오. 패키지는 정확히 그 네이티브 iOS 버전에 의존하므로, main이 앞서 나가는 순간 CocoaPods는 DiditSDK에 대해 서로 호환되지 않는 두 가지 요구 사항을 보게 되고 모든 pod install이 실패합니다. Expo 구성 플러그인은 이 URL을 자동으로 생성합니다. 순수 React Native CLI 경로에서만 이 URL을 직접 작성해야 합니다.
그다음 종속성을 설치합니다:
NFC 종속성 없이 다시 빌드하려면 CocoaPods를 정리한 다음 환경 변수를 설정하고 다시 실행합니다:

Android 설정

프로젝트 수준의 settings.gradle에 Didit Maven 저장소를 추가합니다:
BouncyCastle 클래스 중복 충돌과 DiditSDK 전이 종속성이 유발할 수 있는 OSGI MANIFEST.MF 중복을 해결하려면 앱의 android/app/build.gradle(android { ... } 블록 안)에 다음을 추가합니다:
Android NFC 종속성 없이 빌드하려면(me.didit:didit-sdk 대신 me.didit:didit-sdk-core 아티팩트를 사용함) android/gradle.properties에 다음을 추가합니다:
NFC를 포함한 전체 Android SDK를 사용하려면 해당 속성을 제거하거나 true로 설정합니다.

권한

iOS

앱의 Info.plist에 다음 키를 추가하십시오. 필수 iOS 개인정보 보호 키가 없으면 SDK가 해당 보호 리소스에 접근하는 순간 iOS가 앱을 종료합니다.

NFC 구성

칩이 있는 여권 및 신분증의 NFC 읽기를 활성화하려면 다음을 수행하십시오.
  1. Xcode에서 NFC 기능을 추가합니다:
    • 대상을 선택한 후 Signing & Capabilities > + Capability > Near Field Communication Tag Reading을 선택합니다.
  2. Info.plist에 ISO7816 식별자를 추가합니다:
D392F000260100000001을 설정하면 SDK가 일본 마이넘버 카드(My Number Card)를 JPKI를 통해 읽을 수 있습니다. 이 식별자가 없으면 iOS가 해당 카드를 SDK에 전달하지 않습니다. 마이넘버 카드 읽기는 아직 프로덕션에서 활성화되어 있지 않으며, 이 식별자는 다른 문서에는 아무런 영향을 주지 않으므로 지금 추가해도 됩니다.
  1. NFC 태그 읽기가 활성화된 권한 파일(entitlements)을 추가합니다:
앱의 프로비저닝 프로필에 NFC Tag Reading 기능이 포함되어 있는지 확인하십시오. NFC가 비활성화되어 있으면 이 NFC 구성은 필요하지 않습니다.

Android

다음 권한은 SDK의 AndroidManifest.xml에 선언되어 있으며 자동으로 병합됩니다. 카메라 및 NFC 하드웨어 기능은 선택 사항(android:required="false")으로 선언되어 있으므로, 이러한 기능이 없는 기기에도 앱을 설치할 수 있습니다.

빠른 시작


연동 방식

SDK는 두 가지 연동 방식을 지원합니다.

방식 1: 세션 토큰 (프로덕션 권장)

백엔드에서 인증 세션 생성 API를 사용해 세션을 생성한 다음, 토큰을 SDK에 전달합니다.
이 방식을 사용하면 다음 항목을 완전하게 제어할 수 있습니다.
  • 세션을 사용자와 연결 (vendor_data)
  • 사용자 지정 메타데이터 설정
  • 세션별 콜백 구성

방식 2: 워크플로 ID (간편한 연동)

간단한 연동을 원하면 SDK가 워크플로 ID를 사용해 세션을 직접 생성할 수 있습니다.

구성

DiditConfig 객체를 전달하여 SDK 동작을 사용자 지정합니다.
startVerificationWithWorkflow의 경우 구성은 options.config 안에 전달하십시오.

구성 옵션

카메라 옵션

카메라 옵션은 웹 SDK 카메라 옵션과 동일합니다. 각 렌즈는 CameraLens.Front 또는 CameraLens.Back입니다. 기기에 요청한 렌즈가 없으면 SDK는 기기가 가진 첫 번째 카메라를 사용합니다. 카메라가 하나뿐인 기기에서는 카메라 전환 버튼도 표시되지 않습니다. 전환 옵션을 false로 설정하면 해당 단계에서 사용자가 기본 렌즈만 사용하도록 고정됩니다.
테마 및 색상: 색상, 배경 및 소개 화면 설정은 SDK 구성이 아니라 Didit Console의 화이트 라벨 설정에서 구성합니다. 이렇게 하면 모든 플랫폼에서 브랜드가 일관되게 유지됩니다.

언어 지원

SDK는 54개 언어를 지원합니다. 언어를 지정하지 않으면 SDK는 기기 로캘을 사용하며, 대체 언어는 영어입니다.
지원되는 전체 언어 보기 →

고급 옵션

다음 옵션은 SDK가 사용자를 대신해 세션을 생성하는 startVerificationWithWorkflow에서만 사용할 수 있습니다.

연락처 정보 (사전 입력 및 알림)

인증 양식을 미리 채우고 이메일 알림을 활성화하려면 연락처 정보를 제공하십시오.

예상 정보 (교차 검증)

추출된 문서 데이터와 자동으로 교차 검증할 수 있도록 사용자의 예상 정보를 제공하십시오.
ExpectedDetails의 모든 필드는 선택 사항입니다. 전체 타입은 src/types.ts를 참조하십시오.

사용자 지정 메타데이터

세션과 함께 사용자 지정 JSON 메타데이터를 저장합니다(사용자에게 표시되지 않음).

결과 처리

startVerification과 startVerificationWithWorkflow는 모두 Promise<VerificationResult>를 반환합니다. 결과는 구별된 유니온(판별 유니온)이며, 결과를 확인하려면 type 필드를 사용하세요.

결과 케이스

SessionData 속성

오류 유형

연결 끊김

인증 중 기기의 연결이 끊어지면, SDK는 흐름을 “인터넷 연결 없음” 화면으로 대체하여 단계가 로딩 상태에 머무르지 않도록 합니다. SDK는 백그라운드에서 계속 확인하며, Didit에 다시 연결되는 즉시 화면을 자동으로 닫고 사용자는 있던 단계부터 이어서 진행합니다. 이 화면에는 다시 시도 버튼이 있으며, showCloseButton이 true(기본값)이면 인증 종료 버튼도 함께 표시됩니다. 인증을 종료하면 오류가 networkError인 failed 결과로 끝나므로, 앱은 사용자가 연결 문제로 나갔다는 것을 알 수 있습니다.

결과 처리 전체 예제


엔드 투 엔드 예제 (백엔드 세션 → React Native SDK → webhook)

운영 환경에 바로 적용할 수 있는 연동 방식입니다. 백엔드가 세션을 생성하고, RN 앱이 session_token을 받아 SDK로 절차를 실행합니다. 최종 결정은 webhook을 통해 백엔드로 전달되며, 클라이언트 측 결과만으로는 절대 신뢰하지 마세요.

1. 백엔드 — 세션 생성

2. React Native — token 교환 후 SDK 시작

3. 백엔드 — webhook으로 최종 결정 수신

HMAC 서명 검증에 대한 자세한 내용은 webhook 가이드를 참조하세요.

전체 예제


마지막 수정일 2026년 11월 7일