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 저장소를 추가하고,
diditSdkAndroidNfcEnabledGradle 속성을 설정하며, BouncyCastle 종속성 및 패키징 규칙을 적용합니다 - iOS: Podfile에 DiditSDK podspec을 추가합니다(NFC가 활성화된 경우 iOS 15로 고정됨)
Info.plist를 편집하지 않습니다. 같은 파일의 ios.infoPlist 아래에 iOS 권한 키를 추가하고, NFC를 사용하는 경우 ISO7816 select 식별자도 추가합니다. D392F000260100000001을 사용하면 SDK가 JPKI를 통해 일본 마이넘버 카드를 읽을 수 있습니다:
NFC 종속성 비활성화
NFC 지원 없이 빌드하려면(바이너리 크기가 더 작고 NFC 기능이 필요하지 않음) 플러그인 옵션을 전달합니다:React Native CLI
iOS 설정
Podfile에 DiditSDK pod를 추가합니다(CocoaPods trunk에는 등록되어 있지 않습니다). 아래 블록은 DIDIT_SDK_IOS_NFC_ENABLED 환경 변수를 지원하므로, 설치 시점에 NFC 없는 서브스펙(DiditSDK/Core)을 켜거나 끌 수 있습니다:
Android 설정
프로젝트 수준의settings.gradle에 Didit Maven 저장소를 추가합니다:
MANIFEST.MF 중복을 해결하려면 앱의 android/app/build.gradle(android { ... } 블록 안)에 다음을 추가합니다:
me.didit:didit-sdk 대신 me.didit:didit-sdk-core 아티팩트를 사용함) android/gradle.properties에 다음을 추가합니다:
true로 설정합니다.
권한
iOS
앱의Info.plist에 다음 키를 추가하십시오. 필수 iOS 개인정보 보호 키가 없으면 SDK가 해당 보호 리소스에 접근하는 순간 iOS가 앱을 종료합니다.
NFC 구성
칩이 있는 여권 및 신분증의 NFC 읽기를 활성화하려면 다음을 수행하십시오.-
Xcode에서 NFC 기능을 추가합니다:
- 대상을 선택한 후 Signing & Capabilities > + Capability > Near Field Communication Tag Reading을 선택합니다.
-
Info.plist에 ISO7816 식별자를 추가합니다:
D392F000260100000001을 설정하면 SDK가 일본 마이넘버 카드(My Number Card)를 JPKI를 통해 읽을 수 있습니다. 이 식별자가 없으면 iOS가 해당 카드를 SDK에 전달하지 않습니다. 마이넘버 카드 읽기는 아직 프로덕션에서 활성화되어 있지 않으며, 이 식별자는 다른 문서에는 아무런 영향을 주지 않으므로 지금 추가해도 됩니다.
- NFC 태그 읽기가 활성화된 권한 파일(entitlements)을 추가합니다:
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을 통해 백엔드로 전달되며, 클라이언트 측 결과만으로는 절대 신뢰하지 마세요.