मुख्य सामग्री पर जाएं
एक क्रॉस-प्लेटफ़ॉर्म Flutter प्लगइन जो नेटिव iOS और Android SDK को रैप करता है और पहचान सत्यापन के लिए एकीकृत Dart API प्रदान करता है।

GitHub रिपॉज़िटरी

GitHub पर सोर्स कोड और उदाहरण देखें

pub.dev पैकेज

didit_sdk

नेटिव SDK: Flutter ऐप्स के लिए यही अनुशंसित तरीका है। यह SDK प्लेटफ़ॉर्म चैनल के ज़रिए नेटिव iOS और Android SDK को रैप करता है, जिससे बेहतर उपयोगकर्ता अनुभव, अनुकूलित कैमरा हैंडलिंग और पूर्ण NFC समर्थन मिलता है।


आवश्यकताएँ

प्लेटफ़ॉर्म आवश्यकताएँ

बायोमेट्रिक सहमति के लिए नेटिव 4.10.0 या उसके बाद का संस्करण चाहिए। Illinois, Texas या Colorado के कानून के तहत आने वाले लोगों के लिए, Didit पहले चेहरा कैप्चर से पहले स्पष्ट बायोमेट्रिक सहमति माँग सकता है। ऐसी Flutter SDK रिलीज़ जो नेटिव iOS और Android के 4.10.0 या उसके बाद के संस्करण से जुड़ी है, यह चरण दिखाती है। इससे पुराने संस्करण यह चरण नहीं दिखा सकते: उनके सत्र पहले की तरह चलते हैं, और निर्णय में सहमति को एकत्र नहीं किया गया दर्ज होता है (biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK")। यदि आप उन राज्यों में लोगों का सत्यापन करते हैं, तो अपग्रेड करें।

इंस्टॉलेशन

या इसे मैन्युअल रूप से अपनी pubspec.yaml में जोड़ें:
फिर यह चलाएँ:

नेटिव SDK वैरिएंट

didit_sdk में पूरा नेटिव SDK शामिल है। छोटा बाइनरी बनाने के लिए, इसके बजाय कोई वैरिएंट पैकेज डिपेंड करें। वह बिल्कुल वही Dart API देता है और दोनों प्लेटफ़ॉर्म पर मेल खाने वाले नेटिव SDK को पिन करता है:
इन पैकेजों में से ठीक एक पर डिपेंड करें, और जिसे आपने चुना है उसी से इम्पोर्ट करें, उदाहरण के लिए package:didit_sdk_core/sdk_flutter.dart।

iOS सेटअप

प्लगइन Flutter के दोनों iOS डिपेंडेंसी मैनेजरों (Swift Package Manager और CocoaPods) को सपोर्ट करता है।

Swift Package Manager

यदि आपके Flutter वर्शन में Swift Package Manager सपोर्ट सक्षम है (Flutter 3.24+ पर flutter config --enable-swift-package-manager से ऑप्ट इन करें), तो प्लगइन अपने आप एक Swift package के रूप में इस्तेमाल होता है। इसके लिए Podfile कॉन्फ़िगरेशन की ज़रूरत नहीं है। नेटिव DiditSDK डिपेंडेंसी GitHub से खुद रिज़ॉल्व हो जाती है। Xcode में अपने ऐप का iOS डिप्लॉयमेंट टार्गेट (Runner टार्गेट और प्रोजेक्ट दोनों) अपने चुने हुए पैकेज की न्यूनतम वैल्यू पर सेट करें: didit_sdk और didit_sdk_nfc के लिए 15.0, और didit_sdk_core और didit_sdk_autodetection के लिए 13.0।

CocoaPods

didit_sdk के साथ, प्लगइन नेटिव iOS SDK वैरिएंट को $DiditSdkIosVariant से चुनता है। यह एक Ruby ग्लोबल है, जिसे आप अपने ऐप की ios/Podfile में सेट करते हैं (DiditSDK pod CocoaPods trunk पर नहीं है):
यदि आप कोई वैरिएंट पैकेज (didit_sdk_core, didit_sdk_autodetection, didit_sdk_nfc) इस्तेमाल करते हैं, तो वह अपना नेटिव subspec सीधे पिन करता है और $DiditSdkIosVariant को अनदेखा करता है। अपनी Podfile की pod लाइन और डिप्लॉयमेंट टार्गेट को उस वैरिएंट से मेल खाते रखें (उदाहरण के लिए pod 'DiditSDK/Core', :podspec => ... के साथ platform :ios, '13.0')।
all और nfc वैरिएंट के लिए iOS 15.0+ का डिप्लॉयमेंट टार्गेट ज़रूरी है। core और autodetection iOS 13.0 को टार्गेट कर सकते हैं। वैरिएंट बदलते समय पहले CocoaPods को साफ़ करें (rm -rf Pods Podfile.lock), ताकि पिछला SDK वैरिएंट दोबारा इस्तेमाल न हो।
podspec URL में मौजूद टैग को उस नेटिव iOS SDK वर्शन से मेल खाना चाहिए जिसे आपका didit_sdk रिलीज़ पिन करता है (4.13.2 नेटिव 4.13.2 को पिन करता है)। यदि URL किसी पुराने टैग की ओर इशारा करता है, तो pod install रिज़ॉल्व करने में विफल हो जाता है। CocoaPods एक ऐसा podspec पाता है जो उस पुराने वर्शन की घोषणा करता है, जबकि प्लगइन एक सटीक मेल माँगता है। जब आप didit_sdk अपग्रेड करते हैं, तो इस URL का टैग भी उसी वर्शन पर बदलें।

Android सेटअप

डिफ़ॉल्ट रूप से प्लगइन NFC सहित पूरा Android SDK डिपेंड करता है। NFC के बिना बनाने के लिए, android/gradle.properties में यह जोड़ें:
इससे डिपेंडेंसी me.didit:didit-sdk से बदलकर me.didit:didit-sdk-core हो जाती है, और NFC रीडर मॉड्यूल तथा उसकी JMRTD/SCUBA/BouncyCastle डिपेंडेंसी हट जाती हैं। जब NFC सक्षम हो (डिफ़ॉल्ट), तो BouncyCastle की एक डुप्लिकेट मेटाडेटा फ़ाइल को हल करने के लिए android/app/build.gradle.kts में यह packaging नियम जोड़ें:
इस नियम के बिना बिल्ड mergeDebugJavaResource एरर के साथ विफल हो जाता है। जब diditSdkAndroidNfcEnabled=false हो, तब यह नियम ज़रूरी नहीं है।
Android नेटिव SDK एक रिमोट GitHub Maven रिपॉज़िटरी से रिज़ॉल्व होता है (प्लगइन 3.4.0 से)। आपके ऐप में किसी मैन्युअल Maven कॉन्फ़िगरेशन की ज़रूरत नहीं है।

अनुमतियाँ

iOS

अपने ऐप की Info.plist में निम्नलिखित कुंजियाँ जोड़ें:
अगर कोई आवश्यक iOS गोपनीयता कुंजी गायब है, तो जैसे ही SDK उस सुरक्षित संसाधन तक पहुँचने का प्रयास करता है, iOS ऐप को बंद कर देता है। उदाहरण के लिए, NSCameraUsageDescription गायब होने पर, उपयोगकर्ता के दस्तावेज़ कैमरा के “फ़ोटो लें” बटन पर टैप करते ही ऐप क्रैश हो जाता है।

NFC कॉन्फ़िगरेशन

चिप वाले पासपोर्ट और ID कार्ड के लिए NFC रीडिंग सक्षम करने हेतु:
  1. Xcode में Add NFC Capability जोड़ें:
    • अपना target चुनें > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
  2. Info.plist में ISO7816 Identifiers जोड़ें:
D392F000260100000001 SDK को JPKI के माध्यम से जापान का My Number Card पढ़ने देता है: इसके बिना iOS कार्ड की जानकारी SDK को नहीं देता। My Number Card पढ़ना अभी प्रोडक्शन में सक्षम नहीं है, और यह पहचानकर्ता दूसरे दस्तावेज़ों पर कोई असर नहीं डालता, इसलिए आप इसे अभी जोड़ सकते हैं।
  1. NFC टैग रीडिंग सक्षम करने वाली एक entitlements फ़ाइल जोड़ें:
सुनिश्चित करें कि ऐप की प्रोविज़निंग प्रोफ़ाइल (provisioning profile) में NFC Tag Reading capability शामिल हो। अगर आपके Apple Developer account में bundle ID NFC के लिए कॉन्फ़िगर नहीं है, तो Xcode com.apple.developer.nfc.readersession.formats entitlement गायब होने के कारण signing विफल कर देगा। यह NFC कॉन्फ़िगरेशन core या autodetection variants ($DiditSdkIosVariant) के लिए, या didit_sdk_core / didit_sdk_autodetection packages के लिए आवश्यक नहीं है। इनमें से कोई भी चिप नहीं पढ़ता।

Android

SDK की AndroidManifest.xml में निम्नलिखित अनुमतियाँ घोषित हैं और अपने-आप merge हो जाती हैं: कैमरा और NFC हार्डवेयर फ़ीचर वैकल्पिक (android:required="false") घोषित किए गए हैं, ताकि आपका ऐप इन फ़ीचर के बिना डिवाइस पर इंस्टॉल हो सके। जब diditSdkAndroidNfcEnabled=false होता है, तो SDK Android NFC अनुमति और फ़ीचर नहीं जोड़ता।

रनटाइम अनुमतियाँ

SDK Android की रनटाइम अनुमति के अनुरोधों को अपने-आप संभालता है। जब उपयोगकर्ता कैमरा एक्सेस की ज़रूरत वाले चरण पर पहुँचता है:
  1. अगर अनुमति पहले से नहीं दी गई है, तो SDK कैमरा अनुमति माँगता है
  2. अगर उपयोगकर्ता अनुमति अस्वीकार करता है, तो Try Again बटन के साथ एक त्रुटि संदेश दिखाया जाता है
  3. अगर उपयोगकर्ता अनुमति स्वीकार करता है, तो सत्यापन प्रवाह जारी रहता है
startVerification() कॉल करने से पहले आपको अपने ऐप कोड में कैमरा अनुमति माँगने की ज़रूरत नहीं है। SDK इसे अंदर से संभालता है।

क्विक स्टार्ट


इंटीग्रेशन के तरीके

SDK दो इंटीग्रेशन तरीके सपोर्ट करता है:

तरीका 1: सत्र टोकन (प्रोडक्शन के लिए अनुशंसित)

सत्यापन सत्र बनाने वाला API का उपयोग करके अपने बैकएंड पर एक सत्र बनाएँ, फिर टोकन SDK को पास करें:
यह तरीका आपको इन पर पूरा नियंत्रण देता है:
  • सत्रों को अपने उपयोगकर्ताओं से जोड़ना (vendor_data)
  • कस्टम मेटाडेटा सेट करना
  • प्रति सत्र कॉलबैक कॉन्फ़िगर करना

तरीका 2: वर्कफ़्लो ID (सरल इंटीग्रेशन)

सरल इंटीग्रेशन के लिए, SDK आपके वर्कफ़्लो ID का उपयोग करके सीधे सत्र बना सकता है। इसके लिए बैकएंड की ज़रूरत नहीं है:
उन्नत सत्र पैरामीटर (contact_details, expected_details, metadata) केवल सत्र टोकन विधि के माध्यम से सपोर्ट होते हैं, जहाँ आपका बैकएंड सत्र बनाने वाला API को पूर्ण पैरामीटर सपोर्ट के साथ कॉल करता है। लौटाए गए session_token को DiditSdk.startVerification() में पास करें।

कॉन्फ़िगरेशन

DiditConfig ऑब्जेक्ट पास करके SDK के व्यवहार को अपनी ज़रूरत के अनुसार बदलें:
startVerificationWithWorkflow के लिए, config को नामित पैरामीटर के रूप में पास करें:

कॉन्फ़िगरेशन विकल्प

कैमरा विकल्प

कैमरा विकल्प Web SDK कैमरा विकल्पों से मेल खाते हैं। हर लेंस CameraLens.front या CameraLens.back होता है। अगर डिवाइस में माँगा गया लेंस नहीं है, तो SDK उसका पहला उपलब्ध कैमरा इस्तेमाल करता है। जिन डिवाइसों में सिर्फ़ एक कैमरा है, उन पर कैमरा स्विचर भी छिपा रहता है। किसी स्विचर विकल्प को false पर सेट करें, ताकि उपयोगकर्ता उस चरण के डिफ़ॉल्ट लेंस तक सीमित रहे।
थीमिंग और रंग: रंग, बैकग्राउंड और इंट्रो स्क्रीन सेटिंग्स आपकी Didit Console में व्हाइट लेबल सेटिंग्स के ज़रिए कॉन्फ़िगर की जाती हैं, SDK कॉन्फ़िगरेशन में नहीं। इससे सभी प्लेटफ़ॉर्म पर ब्रांडिंग एक जैसी रहती है।

भाषा समर्थन

SDK 54 भाषाएँ सपोर्ट करता है। अगर कोई भाषा तय नहीं की गई है, तो SDK डिवाइस की लोकेल का उपयोग करता है और फ़ॉलबैक के रूप में अंग्रेज़ी का उपयोग करता है।
सभी समर्थित भाषाएँ देखें →

उन्नत सत्र पैरामीटर

contact_details, expected_details और metadata जैसे पैरामीटर केवल सत्र token विधि के ज़रिए समर्थित हैं। आपका बैकएंड पूर्ण पैरामीटर समर्थन के साथ POST /v3/session/ को कॉल करता है, और फिर लौटाया गया session_token SDK को पास करता है।
Dart का startVerificationWithWorkflow मेथड केवल workflowId, vendorData और config स्वीकार करता है। 3.4.0 से पहले के संस्करणों में contactDetails, expectedDetails और metadata पैरामीटर उपलब्ध थे, लेकिन इन्हें हटा दिया गया है, क्योंकि Unilink endpoint इन्हें नहीं मानता।

परिणामों को संभालना

startVerification और startVerificationWithWorkflow, दोनों Future<VerificationResult> लौटाते हैं। परिणाम एक sealed क्लास है। नतीजा जानने के लिए पैटर्न मैचिंग का उपयोग करें।

परिणाम के मामले

SessionData गुण

त्रुटि प्रकार

VerificationErrorType enum में ये मामले उपलब्ध हैं:

कनेक्शन टूटना

अगर सत्यापन के दौरान डिवाइस का कनेक्शन टूट जाता है, तो SDK किसी चरण को लोड होता हुआ छोड़ने के बजाय “No internet connection” स्क्रीन दिखाता है। वह बैकग्राउंड में लगातार जाँच करता रहता है, और जैसे ही Didit तक पहुँच बनती है, स्क्रीन अपने आप बंद हो जाती है। उपयोगकर्ता वहीं से आगे बढ़ता है जहाँ वह था। इस स्क्रीन पर Try Again और, जब तक बंद करने वाला बटन बंद न किया गया हो, Exit Verification दिखता है। बाहर निकलने पर सत्यापन VerificationFailed परिणाम के साथ समाप्त होता है, जिसका त्रुटि प्रकार networkError होता है, ताकि आपका ऐप जान सके कि उपयोगकर्ता कनेक्शन की वजह से बाहर गया।

परिणाम संभालने का पूरा उदाहरण


एंड-टू-एंड उदाहरण (बैकएंड सत्र → Flutter SDK → Webhook)

एक प्रोडक्शन-तैयार इंटीग्रेशन: आपका बैकएंड सत्र बनाता है, आपका Flutter ऐप session_token प्राप्त करता है, और SDK प्रवाह चलाता है। अंतिम निर्णय webhook के ज़रिए आपके बैकएंड तक पहुँचता है। क्लाइंट-साइड परिणाम पर अकेले भरोसा कभी न करें।

1. बैकएंड: सत्र बनाएँ

2. Flutter: token का आदान-प्रदान करें और SDK शुरू करें

3. बैकएंड: webhook के ज़रिए अंतिम निर्णय प्राप्त करें

HMAC हस्ताक्षर सत्यापन के विवरण के लिए Webhooks गाइड देखें।

पूरा उदाहरण


अंतिम संशोधन 7 नवंबर 2026