메인 콘텐츠로 건너뛰기
서버 기반으로 동작하는 경량 Android SDK로, 최소한의 설정만으로 신원 확인을 수행할 수 있습니다.

GitHub 저장소

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

네이티브 SDK: Android 앱에는 이 방식을 권장합니다. 네이티브 SDK는 최적의 사용자 경험, 최적화된 카메라 처리, 그리고 전체 NFC 지원을 제공합니다.


요구 사항

API 수준별 기능 지원: 문서 및 얼굴 자동 감지에는 API 24+가 필요합니다(Didit 자체 경량 감지기는 didit-sdk-core에 포함되어 있습니다). API 23 기기에서는 SDK가 타이머 셔터 버튼을 사용하는 수동 촬영으로 대체됩니다. 그 밖의 모든 기능은 API 23+ 전체 범위에서 작동합니다.
생체 인식 동의에는 네이티브 SDK 4.10.0 이상이 필요합니다. Illinois, Texas 또는 Colorado 주법의 적용을 받는 사용자의 경우, Didit은 첫 얼굴 촬영 전에 명시적인 생체 인식 동의를 요청할 수 있습니다. Android SDK 4.10.0 이상에서는 이 단계가 표시됩니다. 이전 버전에서는 이 단계를 표시할 수 없으며, 해당 세션은 이전과 같이 진행되고 결정 결과에는 동의가 수집되지 않은 것으로 보고됩니다(biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). 해당 주에서 사용자를 확인한다면 업그레이드하세요.

설치

1단계: 저장소 추가

settings.gradle.kts의 repositories 블록에 Didit Maven 저장소를 추가하세요:
Groovy 방식인 settings.gradle을 사용하는 경우에는 다음과 같이 작성하세요:

2단계: 의존성 추가

앱의 build.gradle.kts에 SDK 의존성을 추가하세요: (!) 버전은 GitHub 저장소에서 최신 버전을 반드시 확인하세요.
Groovy 방식인 build.gradle을 사용하는 경우에는 다음과 같이 작성하세요:

SDK 변형

Android SDK는 별도의 아티팩트로 제공되므로, 앱은 사용하는 기능에 해당하는 바이너리 크기만 부담합니다. 위의 me.didit:didit-sdk는 전체 번들입니다. 앱에 맞는 아티팩트를 선택하세요: 4.6.0부터 네이티브 WalletConnect 지갑 서명은 선택적 추가 기능인 me.didit:didit-sdk-wallet으로 별도 제공됩니다. 전체 번들 me.didit:didit-sdk에는 이미 포함되어 있으므로, 번들을 설치한다면 달라지는 것은 없습니다. 더 가벼운 아티팩트를 사용하면서 지갑 소유권 확인을 앱 내부에서 네이티브로 실행하고 싶다면, 해당 아티팩트와 함께 me.didit:didit-sdk-wallet을 추가하세요. 이 추가 기능이 없어도 SDK는 보안 브라우저 흐름을 통해 지갑 소유권을 확인하므로 기능은 어느 경우든 계속 작동합니다. WalletConnect를 didit-sdk-core에서 분리하면서, 이를 필요로 하지 않는 모든 빌드에서 여러 메가바이트 분량의 지갑 관련 의존성도 제거되었습니다. 모든 아티팩트는 같은 버전으로 배포되므로, 모두 4.13.2로 맞춰 주세요.

다운로드 크기 줄이기

자동 캡처에 사용되는 감지 모델은 런타임에 다운로드되어 캐시되므로, 앱 크기에는 전혀 포함되지 않습니다. 자동 캡처가 앱에 추가하는 것은 ML 런타임의 네이티브 라이브러리이며, 그 크기는 CPU 아키텍처별로 다릅니다. arm64-v8a는 약 10MB, armeabi-v7a는 약 7MB, x86 에뮬레이터 아키텍처 두 가지는 각각 약 13MB입니다. 이 비용을 한 번만 치르려면 다음과 같이 하세요:
  1. Android App Bundle(AAB)을 게시하세요. Google Play는 기기의 아키텍처와 언어에 맞는 것만 전달하므로, arm64 휴대폰에는 네이티브 코드가 약 10MB(압축 다운로드 약 4MB)만 설치됩니다. 반면 범용 APK에는 네 가지 아키텍처가 모두 들어가 40MB를 넘는데, 이것이 예상보다 큰 크기로 측정되는 가장 흔한 원인입니다.
  2. APK 하나만 배포하고 사용자층이 ARM 휴대폰과 태블릿인 경우, 포함되는 아키텍처를 제한하세요:
    실제로 사용자가 쓰는 모든 ABI는 유지하세요. Chromebook이나 기타 x86 기기를 지원한다면 x86_64를 추가하거나, 어떤 기기도 지원을 잃지 않도록 ABI별 APK 분할을 게시하세요.
  3. R8을 활성화하세요. 릴리스 빌드 타입에 isMinifyEnabled = true와 isShrinkResources = true를 설정하세요(Groovy build.gradle을 사용한다면 minifyEnabled true와 shrinkResources true). SDK에는 자체 컨슈머 규칙이 포함되어 있어 추가 설정 없이 사용하지 않는 SDK 코드가 제거됩니다.
  4. resConfigs(...)로 포함되는 언어를 제한하세요. APK 빌드에서 SDK의 48개 로케일 전체가 필요하지 않다면 이 설정을 사용하세요. Google Play에서는 AAB 언어 분할이 이를 자동으로 처리합니다.

3단계: 패키징 제외 설정 추가

빌드 충돌을 방지하려면 앱의 android 블록에 다음을 추가하세요:
이제 끝입니다! Gradle이 모든 전이 의존성을 자동으로 해결합니다.

권한

SDK에는 다음 권한이 필요합니다. 이 권한은 SDK의 AndroidManifest.xml에 선언되어 있으며 앱의 매니페스트에 자동으로 병합됩니다.

카메라 및 NFC 기능

SDK는 android.hardware.camera와 android.hardware.nfc를 선택적 기능(android:required="false")으로 선언합니다. 이렇게 하면 카메라나 NFC 하드웨어가 없는 기기에도 앱을 설치할 수 있으며, SDK는 런타임에 하드웨어가 없는 상황을 적절히 처리합니다.

빠른 시작

1단계: SDK 초기화

Application.onCreate()에서 SDK를 초기화합니다:

2단계: 인증 시작 및 결과 처리


통합 방식

SDK는 두 가지 통합 방식을 지원합니다. 백엔드가 필요하지 않습니다. SDK가 Didit Console의 워크플로 ID를 사용해 세션을 직접 생성합니다. vendorData만 사용할 수 있습니다.

방법 2: 백엔드 세션 (프로덕션 권장)

백엔드가 인증 세션 생성 API(POST /v3/session/)를 호출해 세션을 생성하며, 이때 전체 파라미터(contact_details, expected_details, metadata, callback 등)를 사용할 수 있습니다. 이후 session_token을 SDK에 전달합니다.
이 방식으로 다음 항목을 완전하게 제어할 수 있습니다.
  • 세션을 사용자와 연결하기 (vendor_data)
  • 사용자 지정 메타데이터 설정
  • 세션별 콜백 구성
  • 교차 검증을 위한 연락처 정보 및 예상 정보 제공

구성

SDK 동작을 사용자 지정합니다:

구성 옵션

카메라 옵션

카메라 옵션은 Web SDK 카메라 옵션과 같습니다. 각 렌즈는 CameraLens.FRONT 또는 CameraLens.BACK입니다. 기기에 요청한 렌즈가 없으면 SDK는 기기에 있는 첫 번째 카메라를 사용합니다. 카메라가 하나뿐인 기기에서는 카메라 전환 버튼도 표시되지 않습니다. 전환 옵션을 false로 설정하면 해당 단계의 기본 렌즈로 사용자를 고정할 수 있습니다.
showLanguageSelector, showCloseButton, showExitConfirmation, closeOnComplete 옵션은 Web SDK의 DiditSdkConfiguration과 일치합니다. 모바일 전용 옵션인 languageLocale과 fontFamily는 모바일 SDK가 전체 인증 UI를 네이티브로 렌더링하기 때문에 존재합니다(iframe 안에서 호스팅 프런트엔드에 렌더링을 위임하는 Web SDK와 다릅니다).
테마 및 색상: 색상, 배경, 인트로 화면 설정은 SDK 구성이 아니라 Didit Console의 화이트 라벨 설정에서 구성합니다. 이렇게 하면 모든 플랫폼에서 브랜딩이 일관되게 유지됩니다.

언어 지원

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

고급 옵션

고급 세션 파라미터(contact_details, expected_details, metadata, callback)를 사용하려면 백엔드 세션 방식을 사용하세요. 백엔드가 인증 세션 생성 API를 전체 파라미터와 함께 호출한 뒤 session_token을 SDK에 전달합니다.

결과 처리

VerificationResult sealed 클래스는 인증의 결과를 제공합니다:

결과 케이스

SessionData 속성

오류 유형

모든 오류는 me.didit.sdk.VerificationError의 sealed 하위 클래스입니다:

연결 끊김

인증 도중 기기의 연결이 끊기면, SDK는 단계가 계속 로딩 중인 상태로 두지 않고 흐름을 “인터넷 연결 없음” 화면으로 덮어 표시합니다. SDK는 백그라운드에서 계속 연결을 확인하며, Didit에 다시 연결되는 즉시 화면을 스스로 닫고, 사용자는 있던 단계부터 이어서 진행합니다. 이 화면에는 Try Again 버튼과, showCloseButton이 true(기본값)일 때 Exit Verification 버튼이 표시됩니다. 종료하면 인증이 VerificationResult.Failed(error = VerificationError.NetworkError, session = ...)로 끝나므로, 앱은 사용자가 연결 문제로 나갔다는 것을 알 수 있습니다.

전체 결과 처리 예제


SDK 상태 관찰

맞춤형 로딩 UI를 위해 SDK 상태를 관찰할 수 있습니다:

ProGuard / R8

SDK에는 자체 소비자 ProGuard 규칙이 포함되어 있습니다. 추가 설정은 필요하지 않습니다. R8 전체 모드를 사용하는 경우, gradle.properties에 다음을 추가해야 할 수 있습니다:

엔드 투 엔드 예제 (백엔드 세션 → Android SDK → 결과)

이 패턴은 프로덕션 환경에서 바로 사용할 수 있는 연동 방식입니다. 백엔드가 세션을 생성하면 Android 앱이 session_token을 받고, SDK가 흐름을 실행합니다.

1. 백엔드 — 세션 생성

2. Android — 토큰 교환 및 SDK 시작

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

SDK 결과는 UI 피드백에 편리하지만, 공식 결과는 webhook으로 전달됩니다. HMAC 검증은 webhook 가이드를 참고하세요.

전체 예제


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