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 वैरिएंट दोबारा इस्तेमाल न हो।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 में निम्नलिखित कुंजियाँ जोड़ें:
NFC कॉन्फ़िगरेशन
चिप वाले पासपोर्ट और ID कार्ड के लिए NFC रीडिंग सक्षम करने हेतु:-
Xcode में Add NFC Capability जोड़ें:
- अपना target चुनें > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
-
Info.plistमें ISO7816 Identifiers जोड़ें:
D392F000260100000001 SDK को JPKI के माध्यम से जापान का My Number Card पढ़ने देता है: इसके बिना iOS कार्ड की जानकारी SDK को नहीं देता। My Number Card पढ़ना अभी प्रोडक्शन में सक्षम नहीं है, और यह पहचानकर्ता दूसरे दस्तावेज़ों पर कोई असर नहीं डालता, इसलिए आप इसे अभी जोड़ सकते हैं।
- NFC टैग रीडिंग सक्षम करने वाली एक entitlements फ़ाइल जोड़ें:
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 की रनटाइम अनुमति के अनुरोधों को अपने-आप संभालता है। जब उपयोगकर्ता कैमरा एक्सेस की ज़रूरत वाले चरण पर पहुँचता है:- अगर अनुमति पहले से नहीं दी गई है, तो SDK कैमरा अनुमति माँगता है
- अगर उपयोगकर्ता अनुमति अस्वीकार करता है, तो Try Again बटन के साथ एक त्रुटि संदेश दिखाया जाता है
- अगर उपयोगकर्ता अनुमति स्वीकार करता है, तो सत्यापन प्रवाह जारी रहता है
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 के ज़रिए आपके बैकएंड तक पहुँचता है। क्लाइंट-साइड परिणाम पर अकेले भरोसा कभी न करें।