Repositori GitHub
Lihat kode sumber dan contoh di GitHub
Paket pub.dev
didit_sdk
Native SDK: Ini adalah pendekatan yang direkomendasikan untuk aplikasi Flutter. SDK membungkus SDK native iOS dan Android melalui platform channels untuk pengalaman pengguna terbaik, penanganan kamera yang dioptimalkan, dan dukungan NFC penuh.
Persyaratan
Persyaratan Platform
Persetujuan biometrik memerlukan SDK native versi 4.10.0 atau yang lebih baru. Untuk pengguna yang tunduk pada hukum Illinois, Texas, atau Colorado, Didit dapat meminta persetujuan biometrik secara eksplisit sebelum pengambilan wajah pertama. Rilis Flutter SDK yang mengunci SDK native iOS dan Android pada versi 4.10.0 atau yang lebih baru akan menampilkan langkah tersebut. Versi yang lebih lama tidak dapat menampilkan langkah ini: sesinya berjalan seperti biasa, dan keputusan melaporkan persetujuan sebagai tidak dikumpulkan (
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). Tingkatkan versi jika Anda memverifikasi pengguna di negara bagian tersebut.Instalasi
pubspec.yaml Anda:
Varian SDK native
didit_sdk menyertakan SDK native lengkap.
Untuk memperkecil ukuran biner, gunakan paket varian sebagai gantinya. Paket ini menyediakan API Dart yang sama persis dan mengunci SDK native yang sesuai di kedua platform:
package:didit_sdk_core/sdk_flutter.dart.
Pengaturan iOS
Plugin ini mendukung kedua manajer dependensi iOS Flutter: Swift Package Manager dan CocoaPods.Swift Package Manager
Jika versi Flutter Anda sudah mengaktifkan dukungan Swift Package Manager (aktifkan denganflutter config --enable-swift-package-manager pada Flutter 3.24+), plugin ini otomatis digunakan sebagai paket Swift.
Tidak diperlukan konfigurasi Podfile. Dependensi DiditSDK native akan diambil sendiri dari GitHub.
Atur target deployment iOS aplikasi Anda di Xcode (target Runner dan proyek) ke versi minimum untuk paket yang Anda pilih: 15.0 untuk didit_sdk dan didit_sdk_nfc, 13.0 untuk didit_sdk_core dan didit_sdk_autodetection.
CocoaPods
Dengandidit_sdk, plugin memilih varian SDK iOS native dari $DiditSdkIosVariant, yaitu variabel global Ruby yang Anda atur di ios/Podfile aplikasi Anda (pod DiditSDK tidak tersedia di CocoaPods trunk):
didit_sdk_core, didit_sdk_autodetection, didit_sdk_nfc), paket tersebut mengunci subspec native-nya secara langsung dan mengabaikan $DiditSdkIosVariant. Pastikan baris pod di Podfile dan target deployment Anda sesuai dengan varian tersebut (misalnya pod 'DiditSDK/Core', :podspec => ... dengan platform :ios, '13.0').
Varian
all dan nfc memerlukan target deployment iOS 15.0+. core dan autodetection dapat menargetkan iOS 13.0. Saat berpindah varian, bersihkan CocoaPods terlebih dahulu (rm -rf Pods Podfile.lock) agar varian SDK sebelumnya tidak ikut digunakan.Pengaturan Android
Secara bawaan, plugin ini bergantung pada SDK Android lengkap termasuk NFC. Untuk membangun tanpa NFC, tambahkan baris berikut keandroid/gradle.properties:
me.didit:didit-sdk menjadi me.didit:didit-sdk-core, sehingga modul pembaca NFC beserta dependensi JMRTD/SCUBA/BouncyCastle-nya dihapus.
Jika NFC diaktifkan (bawaan), tambahkan aturan packaging berikut ke android/app/build.gradle.kts untuk menyelesaikan file metadata duplikat dari BouncyCastle:
mergeDebugJavaResource. Aturan ini tidak diperlukan saat diditSdkAndroidNfcEnabled=false.
SDK native Android diambil dari repositori Maven jarak jauh di GitHub (sejak plugin 3.4.0), sehingga tidak diperlukan konfigurasi Maven manual di aplikasi Anda.
Izin
iOS
Tambahkan kunci berikut keInfo.plist aplikasi Anda:
Konfigurasi NFC
Untuk mengaktifkan pembacaan NFC pada paspor dan kartu identitas yang memiliki chip:-
Tambahkan kapabilitas NFC di Xcode:
- Pilih target Anda > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
-
Tambahkan pengidentifikasi ISO7816 ke
Info.plist:
D392F000260100000001 memungkinkan SDK membaca Kartu My Number Jepang melalui JPKI. Tanpa pengidentifikasi ini, iOS tidak akan melaporkan kartu tersebut ke SDK. Pembacaan Kartu My Number belum diaktifkan di produksi, dan pengidentifikasi ini tidak berpengaruh pada dokumen lain, jadi Anda sudah bisa menambahkannya sekarang.
- Tambahkan file entitlements dengan pembacaan tag NFC diaktifkan:
com.apple.developer.nfc.readersession.formats tidak ada.
Konfigurasi NFC ini tidak diperlukan untuk varian core atau autodetection ($DiditSdkIosVariant), atau untuk paket didit_sdk_core / didit_sdk_autodetection. Tidak satu pun dari varian tersebut membaca chip.
Android
Izin berikut dideklarasikan diAndroidManifest.xml milik SDK dan digabungkan secara otomatis:
Fitur perangkat keras kamera dan NFC dideklarasikan sebagai opsional (
android:required="false"), sehingga aplikasi Anda tetap bisa dipasang di perangkat yang tidak memiliki fitur tersebut. Jika diditSdkAndroidNfcEnabled=false, SDK tidak menambahkan izin dan fitur NFC Android.
Izin Runtime
SDK menangani permintaan izin runtime Android secara otomatis. Ketika pengguna mencapai langkah yang memerlukan akses kamera:- SDK meminta izin kamera jika belum diberikan
- Jika pengguna menolak izin, pesan kesalahan ditampilkan dengan tombol Try Again
- Jika pengguna memberikan izin, alur verifikasi akan dilanjutkan
startVerification(). SDK mengelolanya secara internal.
Mulai Cepat
Metode Integrasi
SDK mendukung dua metode integrasi:Metode 1: Token Sesi (Direkomendasikan untuk Produksi)
Buat sesi di backend Anda menggunakan API Create Verification Session, lalu teruskan token ke SDK:- Mengaitkan sesi dengan pengguna Anda (
vendor_data) - Menetapkan metadata kustom
- Mengonfigurasi callback per sesi
Metode 2: ID Alur Kerja (Integrasi Lebih Sederhana)
Untuk integrasi yang lebih sederhana, SDK dapat membuat sesi langsung menggunakan ID alur kerja Anda. Backend tidak diperlukan:Parameter sesi lanjutan (
contact_details, expected_details, metadata) hanya didukung melalui metode Token Sesi, ketika backend Anda memanggil API Create Session dengan dukungan parameter lengkap. Teruskan session_token yang dikembalikan ke DiditSdk.startVerification().Konfigurasi
Sesuaikan perilaku SDK dengan meneruskan objekDiditConfig:
startVerificationWithWorkflow, teruskan config sebagai parameter bernama:
Opsi Konfigurasi
Opsi kamera
Opsi kamera sama dengan opsi kamera Web SDK. Setiap lensa adalahCameraLens.front atau CameraLens.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 agar menggunakan lensa default pada 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.
Dukungan Bahasa
SDK mendukung 54 bahasa. Jika tidak ada bahasa yang ditentukan, SDK menggunakan locale perangkat dengan bahasa Inggris sebagai cadangan.Parameter Sesi Lanjutan
Parameter seperticontact_details, expected_details, dan metadata hanya didukung melalui metode Session Token. Backend Anda memanggil POST /v3/session/ dengan dukungan parameter lengkap, lalu meneruskan session_token yang dikembalikan ke SDK.
Metode Dart
startVerificationWithWorkflow hanya menerima workflowId, vendorData, dan config. Versi sebelum 3.4.0 menyediakan parameter contactDetails, expectedDetails, dan metadata, tetapi parameter tersebut dihapus karena endpoint Unilink tidak memprosesnya.Menangani Hasil
BaikstartVerification maupun startVerificationWithWorkflow mengembalikan Future<VerificationResult>. Hasilnya adalah sealed class; gunakan pattern matching untuk menentukan hasilnya.
Kasus Hasil
Properti SessionData
Tipe Error
EnumVerificationErrorType menyediakan kasus-kasus berikut:
Koneksi terputus
Jika perangkat kehilangan koneksi selama verifikasi, SDK menampilkan layar “No internet connection” di atas alur alih-alih membiarkan langkah terus memuat. SDK terus memeriksa di latar belakang dan menutup layar dengan sendirinya begitu Didit dapat dijangkau kembali, lalu pengguna melanjutkan dari langkah yang sedang mereka jalankan. Layar ini menampilkan Try Again dan, kecuali tombol tutup dinonaktifkan, Exit Verification. Keluar mengakhiri verifikasi dengan hasilVerificationFailed yang memiliki tipe error networkError, sehingga aplikasi Anda mengetahui bahwa pengguna keluar karena masalah koneksi.
Contoh Lengkap Penanganan Hasil
Contoh End-to-End (Sesi Backend → Flutter SDK → Webhook)
Integrasi siap produksi: backend Anda membuat sesi, aplikasi Flutter Anda menerimasession_token, dan SDK menjalankan alurnya. Keputusan akhir dikirim ke backend Anda melalui webhook. Jangan pernah hanya mengandalkan hasil di sisi klien.