Langsung ke konten utama
SDK iOS ringan dan digerakkan oleh server untuk verifikasi identitas dengan konfigurasi minimal. Versi terbaru: 4.13.2.

Repositori GitHub

Lihat kode sumber, rilis, dan log perubahan lengkap di GitHub

SDK Native: Ini adalah pendekatan yang direkomendasikan untuk aplikasi iOS. SDK native memberikan pengalaman pengguna terbaik, penanganan kamera yang dioptimalkan, dan dukungan NFC penuh.


Persyaratan

Kompatibilitas Versi iOS

Persetujuan biometrik memerlukan SDK native 4.10.0 atau yang lebih baru. Untuk orang yang tercakup oleh hukum Illinois, Texas, atau Colorado, Didit dapat meminta persetujuan biometrik secara eksplisit sebelum pengambilan wajah pertama. SDK iOS 4.10.0 dan yang lebih baru menampilkan langkah tersebut. Versi sebelumnya tidak dapat menampilkan langkah ini: sesi mereka berjalan seperti biasa, dan laporan keputusan menyatakan bahwa persetujuan tidak dikumpulkan (biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). Tingkatkan versi jika Anda memverifikasi orang di negara bagian tersebut.

Instalasi

Sejak 4.0.0, SDK tersedia dalam beberapa varian yang dapat diinstal, sehingga aplikasi Anda hanya menanggung ukuran biner dari fitur yang benar-benar digunakan. Pilih tepat satu varian: satu subspec CocoaPods dan satu produk library SwiftPM.
  • Core: footprint terkecil, dengan pengambilan dokumen dan swafoto otomatis menggunakan detektor ringan milik Didit sendiri. Tidak ada OpenSSL.xcframework dan tidak ada runtime CoreNFC.
  • AutoDetection: tidak digunakan lagi sejak 4.11.0 dan identik dengan Core. Gunakan Core sebagai gantinya.
  • NFC: Core ditambah pembacaan chip paspor/eID NFC.
  • All: semua fitur. Ini adalah default saat Anda menginstal DiditSDK tanpa menyebutkan subspec/produk.
Yang ditambahkan setiap varian ke bundle aplikasi Anda (arm64 Mach-O, diukur terhadap 4.9.0): Core ~11.1 MB, NFC ~11.7 MB ditambah ~4 MB OpenSSL, AutoDetection ~16.0 MB, All ~16.6 MB ditambah OpenSSL. Model deteksi itu sendiri diunduh saat runtime dan di-cache, sehingga tidak pernah dihitung terhadap ukuran unduhan aplikasi Anda. Sejak 4.11.0, pengambilan otomatis berjalan di detektor ringan milik Didit sendiri di setiap varian. TensorFlow Lite tidak lagi menjadi bagian dari SDK, dan framework menjadi lebih kecil karena terjemahannya dimuat dari luar biner. Sejak 4.6.0, framework yang dikirimkan tidak lagi memuat Swift ABI descriptors (metadata build yang disalin Xcode ke setiap aplikasi tetapi tidak pernah dibaca) atau video tutorial yang tidak dapat diputar oleh varian tersebut. Saat memperbarui dari 4.5.4 atau sebelumnya, aplikasi Anda menyusut sekitar 7-8 MB dengan sendirinya, tanpa perubahan kode. App Store mengompres biner untuk pengiriman, sehingga biaya over-the-air lebih rendah. Periksa laporan ukuran aplikasi di App Store Connect untuk selisih per perangkat yang tepat.
Varian NFC dan All menyertakan OpenSSL.xcframework (OpenSSL 3.3.3, dikirim sebagai OpenSSL-Universal 3.3.3001 melalui NFCPassportReader), yang diperlukan untuk autentikasi chip NFC dan membutuhkan iOS 15.0+. Rilis hingga dan termasuk 4.0.6 menyertakan OpenSSL 1.1.1s; 4.0.7 dan yang lebih baru mengirimkan OpenSSL 3.3.3 dengan privacy manifest dan tanda tangan kodenya sendiri. Selalu instal 4.0.7 atau yang lebih baru. Perlu dicatat bahwa pembaruan menyelaraskan versi OpenSSL, tetapi tidak menghapus benturan embed: jika dependensi lain di aplikasi Anda juga meng-embed OpenSSL.framework (nama file sama, bundle id com.github.krzyzanowskim.OpenSSL yang sama), kedua salinan akan bertabrakan pada tahap embed, terlepas dari versinya. Simpan tepat satu salinan. Misalnya, timpa paket lain berdasarkan identitas SPM agar menggunakan OpenSSL.xcframework yang dipublikasikan Didit, sehingga biner di bundle adalah yang dibangun bersama SDK ini. Varian Core dan AutoDetection tidak menautkan OpenSSL sama sekali.
import DiditSDK sama di kode aplikasi Anda, apa pun varian yang Anda instal.

Swift Package Manager (Direkomendasikan)

Tambahkan package ke proyek Anda menggunakan Xcode:
  1. Buka File > Add Package Dependencies
  2. Masukkan URL repositori:
  1. Pilih versi (atau Up to Next Major dari 4.13.2) lalu klik Add Package
  2. Saat diminta memilih produk, pilih tepat satu produk library untuk varian Anda (lihat tabel di atas)
Atau di Package.swift Anda:
Lalu tambahkan tepat satu produk berikut ke target Anda:
Swift Package Manager tidak menerapkan batas minimum iOS 15 untuk Anda. Package.swift mendeklarasikan platforms: [.iOS(.v13)] untuk seluruh package, sehingga Xcode akan membiarkan Anda menambahkan DiditSDK atau DiditSDKNFC ke target iOS 13 atau 14 tanpa peringatan. Namun, keduanya menyertakan OpenSSL.xcframework dan membaca chip melalui NFCPassportReader, yang membutuhkan iOS 15.0+. Atur target deployment aplikasi Anda ke 15.0 sendiri saat menggunakan produk All atau NFC. CocoaPods menerapkannya secara otomatis melalui deployment_target subspec.

CocoaPods

DiditSDK didistribusikan sebagai podspec biner yang di-host di repositori (tidak tersedia di CocoaPods Trunk publik), sehingga Anda harus mereferensikan URL podspec. Pilih tepat satu subspec:
Core dan AutoDetection mendukung mulai iOS 13; NFC dan All membutuhkan iOS 15 karena NFCPassportReader. Lalu jalankan:
Setelah pod install, buka .xcworkspace yang dihasilkan (bukan .xcodeproj).
Error rsync Xcode 15+: Jika Anda melihat error rsync Operation not permitted saat build, atur Build Settings → User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) ke No pada proyek untuk Debug dan Release.

Manual (XCFramework)

Setiap rilis mempublikasikan satu XCFramework per varian. Unduh zip untuk varian Anda dari GitHub Releases, lalu seret folder .xcframework ke Xcode dan atur Embed & Sign.

Permissions

SDK memerlukan izin berikut. Tambahkan izin ini ke Info.plist aplikasi Anda:

Contoh Entri Info.plist

Konfigurasi NFC

Hanya diperlukan saat memasang varian NFC atau All. Lewati bagian ini jika Anda memasang varian Core atau AutoDetection. Untuk mengaktifkan pembacaan NFC pada paspor dan kartu identitas yang memiliki chip:
  1. Tambahkan Kapabilitas NFC di Xcode:
    • Pilih target Anda → Signing & Capabilities → + Capability → Near Field Communication Tag Reading
  2. Tambahkan identifier ISO7816 ke Info.plist:
D392F000260100000001 memungkinkan SDK membaca Japan My Number Card melalui JPKI. Tanpa identifier ini, iOS tidak melaporkan kartu tersebut ke SDK. Pembacaan My Number Card belum diaktifkan di produksi, dan identifier ini tidak berpengaruh pada dokumen lain, jadi Anda dapat menambahkannya sekarang.
  1. Tambahkan Entitlements (di file .entitlements Anda):
Keterbatasan Simulator (varian NFC dan All): Varian ini menautkan CoreNFC, dan sejak Xcode 12 libnfshared.dylib tidak tersedia di simulator. Lihat utas Stack Overflow ini untuk solusinya. Ini tidak berlaku untuk varian Core atau AutoDetection. Uji fitur NFC hanya pada perangkat fisik.

Peninjauan App Store (varian NFC dan All): Jika Anda memasang varian NFC atau All, Apple mungkin meminta video demo selama peninjauan karena kode terkait NFC merupakan bagian dari binary SDK, meskipun alur kerja Anda tidak menggunakan NFC. Hubungi support@didit.me untuk meminta video demo NFC kami yang akan diserahkan kepada Apple. Ini tidak berlaku untuk varian Core atau AutoDetection.


Mulai Cepat

Integrasi SwiftUI

Integrasi UIKit


Metode Integrasi

SDK mendukung dua metode integrasi: Tidak memerlukan backend. SDK membuat sesi secara langsung menggunakan ID alur kerja Anda dari Didit Console. Metode UniLink (startVerification(workflowId:)) hanya mendukung vendorData. Untuk parameter sesi lainnya, gunakan Metode 2.
Agar vendorData dilampirkan ke sesi melalui UniLink, aktifkan opsi Data Vendor di Didit Console.

Metode 2: Sesi Backend (Direkomendasikan untuk Produksi)

Backend Anda membuat sesi melalui API Pembuatan Sesi Verifikasi (POST /v3/session/) dengan dukungan parameter penuh (contact_details, expected_details, metadata, callback, dll.), lalu meneruskan session_token ke SDK.
Pendekatan ini memberi Anda kendali penuh atas:
  • Mengaitkan sesi dengan pengguna Anda (vendor_data)
  • Menetapkan detail kontak dan detail yang diharapkan untuk validasi silang
  • Menetapkan metadata kustom
  • Mengonfigurasi callback per sesi Data ini (detail kontak, detail yang diharapkan, metadata, callback) dikirim ke API Pembuatan Sesi Verifikasi.

Konfigurasi

Sesuaikan perilaku SDK dengan DiditSdk.Configuration:

Opsi Konfigurasi

Opsi kamera

Opsi kamera sesuai dengan opsi kamera Web SDK. Setiap lensa adalah .front atau .back. Jika perangkat tidak memiliki lensa yang diminta, SDK menggunakan kamera pertama yang dimilikinya. Pengalih kamera juga disembunyikan pada perangkat yang hanya memiliki satu kamera. Atur opsi pengalih ke false untuk mengunci pengguna pada lensa default langkah tersebut.
Tema & Warna: Warna, latar belakang, dan pengaturan layar pengantar dikonfigurasi melalui pengaturan White Label Anda di Didit Console, bukan di konfigurasi SDK. Ini memastikan branding yang konsisten di semua platform.
Opsi showLanguageSelector, showCloseButton, showExitConfirmation, dan closeOnComplete sesuai dengan DiditSdkConfiguration Web SDK. Opsi khusus mobile languageLocale dan fontFamily ada karena SDK mobile merender UI verifikasi lengkap secara native (berbeda dengan Web SDK yang menyerahkannya ke frontend yang di-hosting di dalam iframe).

Dukungan Bahasa

SDK mendukung 54 bahasa. Jika tidak ada bahasa yang ditentukan, SDK menggunakan locale perangkat dengan bahasa Inggris sebagai cadangan.
Lihat Semua Bahasa yang Didukung →

Parameter Sesi Lanjutan

Untuk parameter sesi lanjutan (contact_details, expected_details, metadata, callback), gunakan metode Backend Session. Backend Anda memanggil API Create Verification Session dengan parameter lengkap, lalu meneruskan session_token ke SDK.

Menangani Hasil

Enum VerificationResult memberikan hasil dari verifikasi:

Kasus Hasil

Properti SessionData

Tipe Error

Koneksi terputus

Jika perangkat kehilangan koneksi selama verifikasi, SDK menampilkan layar “Tidak ada koneksi internet” di atas alur alih-alih membiarkan langkah terus memuat. SDK terus memeriksa di latar belakang dan menutup layar dengan sendirinya begitu Didit dapat dihubungi kembali, lalu pengguna melanjutkan dari langkah yang sedang mereka jalankan. Layar ini menampilkan Coba Lagi dan, jika showCloseButton bernilai true (default), Keluar dari Verifikasi. Keluar akan mengakhiri verifikasi dengan .failed(error: .networkError, session:), sehingga aplikasi Anda tahu bahwa pengguna keluar karena masalah koneksi.

Contoh Lengkap Penanganan Hasil


Tersedia di DiditSDK 3.6.0+.
Aplikasi host dapat mengakhiri verifikasi yang sedang aktif secara programatik dengan DiditSdk.shared.dismiss(). Ini adalah cara yang direkomendasikan untuk menutup verifikasi saat host perlu mengambil alih layar, misalnya ketika aplikasi berpindah ke latar belakang.
dismiss() melewati alur penyelesaian normal SDK: ia menutup UI yang ditampilkan, mengatur ulang status internal, dan memanggil handler .diditVerification dengan .cancelled(session:) yang membawa sessionId saat ini jika sesi sudah dibuat. Pemanggilan ini tidak melakukan apa pun jika tidak ada verifikasi yang aktif.

Contoh: menutup saat aplikasi masuk ke latar belakang

Jangan mengatur DiditSdk.shared.isPresented = false untuk menutup, karena flag ini hanya memicu presentasi saat nilainya berubah dari false ke true, sehingga mengaturnya ke false tidak berpengaruh apa pun. Begitu pula, memanggil dismiss(animated:) dari UIKit pada pengontrol tampilan paling atas tidak didukung: cara ini melewati alur penyelesaian SDK sehingga handler .diditVerification Anda tidak pernah dipanggil.

Memantau Status SDK

Anda dapat memantau status SDK untuk membuat UI pemuatan kustom:

Contoh End-to-End (Sesi Backend → SDK iOS → Hasil)

Pola ini adalah integrasi yang siap produksi. Backend Anda membuat sesi, aplikasi iOS Anda menerima session_token, dan SDK menjalankan alurnya.

1. Backend: buat sesi

2. iOS: tukar token dan mulai SDK

3. Backend: terima keputusan akhir melalui webhook

Hasil SDK memudahkan untuk umpan balik UI, tetapi hasil final yang menjadi acuan diterima melalui webhook. Lihat panduan Webhook untuk verifikasi HMAC.

Contoh Lengkap SwiftUI


Terakhir diubah pada 7 November 2026