मुख्य सामग्री पर जाएं
एक हल्का, सर्वर-संचालित iOS SDK, जिसे न्यूनतम कॉन्फ़िगरेशन की आवश्यकता होती है। नवीनतम संस्करण: 4.13.2.

GitHub रिपॉज़िटरी

GitHub पर सोर्स कोड, रिलीज़ और पूरा चेंजलॉग देखें

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


आवश्यकताएँ

iOS संस्करण संगतता

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

इंस्टॉलेशन

4.0.0 से SDK कई इंस्टॉल करने योग्य वेरिएंट में आता है, ताकि आपके ऐप को केवल उन सुविधाओं की बाइनरी लागत चुकानी पड़े जिनका वह उपयोग करता है। ठीक एक वेरिएंट चुनें: एक CocoaPods subspec और एक SwiftPM लाइब्रेरी प्रोडक्ट।
  • Core: सबसे छोटा फ़ुटप्रिंट, जिसमें Didit के अपने हल्के डिटेक्टरों पर दस्तावेज़ और सेल्फ़ी का स्वचालित कैप्चर होता है। इसमें कोई OpenSSL.xcframework नहीं होता और कोई CoreNFC रनटाइम नहीं होता
  • AutoDetection: 4.11.0 से अप्रचलित है और Core के समान है; इसके बजाय Core का उपयोग करें
  • NFC: Core के साथ NFC पासपोर्ट/eID चिप रीडिंग
  • All: हर सुविधा। जब आप DiditSDK को subspec या product का नाम दिए बिना इंस्टॉल करते हैं, तो यही डिफ़ॉल्ट होता है
हर वेरिएंट आपके ऐप बंडल में क्या जोड़ता है (arm64 Mach-O, 4.9.0 के मुकाबले मापा गया): Core ~11.1 MB, NFC ~11.7 MB के साथ ~4 MB OpenSSL, AutoDetection ~16.0 MB, All ~16.6 MB के साथ OpenSSL। डिटेक्शन मॉडल स्वयं रनटाइम पर डाउनलोड और कैश होते हैं, इसलिए वे आपके ऐप के डाउनलोड आकार में कभी नहीं गिने जाते। 4.11.0 से हर वेरिएंट में स्वचालित कैप्चर Didit के अपने हल्के डिटेक्टरों पर चलता है। TensorFlow Lite अब SDK का हिस्सा नहीं है, और फ़्रेमवर्क छोटा हो गया है क्योंकि उसके अनुवाद बाइनरी के बाहर से लोड होते हैं। 4.6.0 से शिप किए गए फ़्रेमवर्क में Swift ABI डिस्क्रिप्टर (बिल्ड मेटाडेटा, जिसे Xcode हर ऐप में कॉपी करता है पर कभी पढ़ता नहीं) या वे ट्यूटोरियल वीडियो नहीं होते जिन्हें वह वेरिएंट चला नहीं सकता। 4.5.4 या उससे पहले के संस्करण से अपग्रेड करने पर आपका ऐप केवल इसी से लगभग 7-8 MB छोटा हो जाता है, बिना किसी कोड बदलाव के। App Store बाइनरी को डिलीवरी के लिए कंप्रेस करता है, इसलिए ओवर-द-एयर लागत कम होती है। प्रति-डिवाइस सटीक अंतर के लिए App Store Connect की ऐप साइज़ रिपोर्ट देखें।
NFC और All वेरिएंट OpenSSL.xcframework बंडल करते हैं (OpenSSL 3.3.3, जो NFCPassportReader के ज़रिए OpenSSL-Universal 3.3.3001 के रूप में शिप होता है), जो NFC चिप प्रमाणीकरण के लिए ज़रूरी है और iOS 15.0+ माँगता है। 4.0.6 तक के संस्करणों में, उसी सहित, OpenSSL 1.1.1s बंडल था; 4.0.7 और बाद के संस्करणों में OpenSSL 3.3.3 है, जिसका अपना प्राइवेसी मैनिफ़ेस्ट और कोड साइनेचर है। हमेशा 4.0.7 या बाद का संस्करण इंस्टॉल करें। ध्यान दें कि अपग्रेड करने से OpenSSL संस्करण एक हो जाते हैं, पर एम्बेड टकराव दूर नहीं होता: यदि आपके ऐप की किसी और डिपेंडेंसी ने भी OpenSSL.framework एम्बेड किया है (वही फ़ाइल नाम, वही com.github.krzyzanowskim.OpenSSL बंडल ID), तो संस्करण चाहे जो हो, दोनों प्रतियाँ एम्बेड स्टेप पर टकराती हैं। केवल एक प्रति रखें। उदाहरण के लिए, दूसरे पैकेज को SPM identity से ओवरराइड करके Didit द्वारा प्रकाशित OpenSSL.xcframework का उपयोग करें, ताकि बंडल में वही बाइनरी हो जिसके साथ यह SDK बनाया गया था। Core और AutoDetection वेरिएंट कोई OpenSSL लिंक नहीं करते।
import DiditSDK आपके ऐप कोड में इंस्टॉल किए गए वेरिएंट से स्वतंत्र एक जैसा रहता है।

Swift Package Manager (अनुशंसित)

Xcode का उपयोग करके प्रोजेक्ट में पैकेज जोड़ें:
  1. File > Add Package Dependencies पर जाएँ
  2. रिपॉज़िटरी URL दर्ज करें:
  1. वर्शन चुनें (या 4.13.2 से Up to Next Major) और Add Package पर क्लिक करें
  2. जब प्रोडक्ट चुनने को कहा जाए, तो अपने वेरिएंट के लिए ठीक एक लाइब्रेरी प्रोडक्ट चुनें (ऊपर की तालिका देखें)
या अपनी Package.swift में:
फिर अपने target में ठीक इनमें से एक product जोड़ें:
Swift Package Manager आपके लिए iOS 15 की न्यूनतम सीमा लागू नहीं करता। Package.swift पूरे पैकेज के लिए platforms: [.iOS(.v13)] घोषित करता है, इसलिए Xcode आपको DiditSDK या DiditSDKNFC को iOS 13 या 14 target में बिना किसी चेतावनी के जोड़ने देगा। फिर भी दोनों OpenSSL.xcframework बंडल करते हैं और NFCPassportReader के ज़रिए चिप पढ़ते हैं, जिसके लिए iOS 15.0+ चाहिए। All या NFC product इस्तेमाल करते समय अपने target का deployment target स्वयं 15.0 पर सेट करें। CocoaPods यह subspec के deployment_target के ज़रिए अपने आप लागू करता है।

CocoaPods

DiditSDK रिपॉज़िटरी में होस्ट किए गए binary podspec के रूप में वितरित होता है (यह CocoaPods Trunk पर नहीं है), इसलिए आपको podspec URL का संदर्भ देना होगा। ठीक एक subspec चुनें:
Core और AutoDetection iOS 13 तक डिप्लॉय होते हैं; NFC और All को NFCPassportReader के कारण iOS 15 चाहिए। फिर चलाएँ:
pod install के बाद जनरेट हुई .xcworkspace खोलें (.xcodeproj नहीं)।
Xcode 15+ rsync त्रुटियाँ: यदि बिल्ड के दौरान Operation not permitted rsync त्रुटियाँ दिखें, तो प्रोजेक्ट पर Build Settings → User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) को Debug और Release दोनों के लिए नहीं पर सेट करें।

मैन्युअल (XCFramework)

हर रिलीज़ हर वेरिएंट के लिए एक XCFramework प्रकाशित करती है। अपने वेरिएंट के zip GitHub Releases पेज से डाउनलोड करें, फिर .xcframework फ़ोल्डरों को Xcode में खींचें और Embed & Sign सेट करें।

अनुमतियाँ

SDK को निम्नलिखित अनुमतियों की आवश्यकता होती है। इन्हें अपने ऐप की Info.plist में जोड़ें:

उदाहरण Info.plist प्रविष्टियाँ

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

केवल NFC या All वेरिएंट इंस्टॉल करने पर आवश्यक। यदि आपने Core या AutoDetection वेरिएंट इंस्टॉल किया है, तो यह सेक्शन छोड़ दें। चिप वाले पासपोर्ट और ID कार्ड के लिए NFC रीडिंग सक्षम करने हेतु:
  1. Xcode में NFC क्षमता जोड़ें:
    • अपना टारगेट चुनें → Signing & Capabilities → + Capability → Near Field Communication Tag Reading
  2. Info.plist में ISO7816 पहचानकर्ता जोड़ें:
D392F000260100000001 SDK को JPKI के ज़रिए जापान का My Number Card पढ़ने देता है: इसके बिना iOS कार्ड की जानकारी SDK को नहीं देता। My Number Card पढ़ना अभी प्रोडक्शन में सक्षम नहीं है, और यह पहचानकर्ता अन्य दस्तावेज़ों पर कोई असर नहीं डालता, इसलिए आप इसे अभी जोड़ सकते हैं।
  1. एंटाइटलमेंट जोड़ें (आपकी .entitlements फ़ाइल में):
सिम्युलेटर सीमा (NFC और All वेरिएंट): ये वेरिएंट CoreNFC से लिंक होते हैं, और Xcode 12 से libnfshared.dylib सिम्युलेटर में उपलब्ध नहीं है। समाधान के लिए यह Stack Overflow थ्रेड देखें। यह Core या AutoDetection वेरिएंट पर लागू नहीं होता। NFC सुविधाओं का परीक्षण केवल वास्तविक डिवाइसों पर करें।

App Store समीक्षा (NFC और All वेरिएंट): यदि आप NFC या All वेरिएंट इंस्टॉल करते हैं, तो समीक्षा के दौरान Apple डेमो वीडियो माँग सकता है, क्योंकि NFC से संबंधित कोड SDK बाइनरी का हिस्सा है, भले ही आपका वर्कफ़्लो NFC का उपयोग न करे। Apple को सबमिट करने के लिए हमारा NFC डेमो वीडियो support@didit.me से माँगें। यह Core या AutoDetection वेरिएंट पर लागू नहीं होता।


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

SwiftUI इंटीग्रेशन

UIKit इंटीग्रेशन


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

SDK दो इंटीग्रेशन तरीकों का समर्थन करता है: किसी बैकएंड की आवश्यकता नहीं है। SDK Didit Console से आपकी वर्कफ़्लो ID का उपयोग करके सत्र सीधे बनाता है। UniLink तरीका (startVerification(workflowId:)) केवल vendorData का समर्थन करता है; किसी अन्य सत्र पैरामीटर के लिए तरीका 2 का उपयोग करें।
UniLink के ज़रिए सत्र में vendorData जोड़ने के लिए, Didit Console में विक्रेता डेटा विकल्प सक्षम करें।

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

आपका बैकएंड Create Verification Session API (POST /v3/session/) के ज़रिए सभी पैरामीटर के समर्थन के साथ सत्र बनाता है (contact_details, expected_details, metadata, callback आदि), और फिर session_token को SDK को पास करता है।
यह तरीका इन पर आपका पूरा नियंत्रण देता है:
  • सत्रों को अपने उपयोगकर्ताओं से जोड़ना (vendor_data)
  • क्रॉस-वैलिडेशन के लिए संपर्क विवरण और अपेक्षित विवरण सेट करना
  • कस्टम मेटाडेटा सेट करना
  • प्रति सत्र कॉलबैक कॉन्फ़िगर करना
यह डेटा (संपर्क विवरण, अपेक्षित विवरण, मेटाडेटा, कॉलबैक) Create Verification Session API को भेजा जाता है।

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

DiditSdk.Configuration के साथ SDK के व्यवहार को अनुकूलित करें:

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

कैमरा विकल्प

कैमरा विकल्प Web SDK के कैमरा विकल्पों से मेल खाते हैं। प्रत्येक लेंस .front या .back होता है। यदि डिवाइस में अनुरोधित लेंस नहीं है, तो SDK उसके पास मौजूद पहला कैमरा उपयोग करता है। कैमरा स्विचर उन डिवाइसों पर भी छिपा रहता है जिनमें केवल एक कैमरा है। किसी स्विचर विकल्प को false पर सेट करें ताकि उपयोगकर्ता उस चरण के डिफ़ॉल्ट लेंस तक सीमित रहे।
थीमिंग और रंग: रंग, बैकग्राउंड और इंट्रो स्क्रीन की सेटिंग्स SDK कॉन्फ़िगरेशन में नहीं, बल्कि Didit Console में आपकी व्हाइट लेबल सेटिंग्स के माध्यम से कॉन्फ़िगर की जाती हैं। इससे सभी प्लेटफ़ॉर्म पर एक समान ब्रांडिंग सुनिश्चित होती है।
विकल्प showLanguageSelector, showCloseButton, showExitConfirmation, और closeOnComplete Web SDK के DiditSdkConfiguration से मेल खाते हैं। मोबाइल-विशिष्ट विकल्प languageLocale और fontFamily इसलिए मौजूद हैं क्योंकि मोबाइल SDK पूरा सत्यापन UI नेटिव रूप से रेंडर करता है (जबकि Web SDK इसे iframe के अंदर होस्टेड फ्रंटएंड को सौंपता है)।

भाषा समर्थन

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

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

उन्नत सत्र पैरामीटर (contact_details, expected_details, metadata, callback) के लिए Backend Session विधि का उपयोग करें। आपका बैकएंड Create Verification Session API को पूर्ण पैरामीटर के साथ कॉल करता है, फिर session_token SDK को पास करता है।

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

VerificationResult enum सत्यापन का परिणाम देता है:

परिणाम के केस

SessionData गुण

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

कनेक्शन खो जाना

यदि सत्यापन के दौरान डिवाइस का कनेक्शन टूट जाता है, तो SDK किसी चरण को लोड होते रहने देने के बजाय उसे “इंटरनेट कनेक्शन नहीं है” स्क्रीन से ढक देता है। यह पृष्ठभूमि में लगातार जाँच करता रहता है और जैसे ही Didit तक पहुँचा जा सके, स्क्रीन अपने आप बंद हो जाती है। उपयोगकर्ता जिस चरण पर था, वहीं से आगे बढ़ता है। स्क्रीन पुनः प्रयास करें और, जब showCloseButton true हो (डिफ़ॉल्ट), सत्यापन से बाहर निकलें विकल्प देती है। बाहर निकलने पर सत्यापन .failed(error: .networkError, session:) के साथ समाप्त हो जाता है, ताकि आपका ऐप जान सके कि उपयोगकर्ता कनेक्शन के कारण चला गया।

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


सत्यापन को प्रोग्रामेटिक रूप से बंद करना

DiditSDK 3.6.0+ में उपलब्ध।
होस्ट ऐप DiditSdk.shared.dismiss() के माध्यम से सक्रिय सत्यापन को प्रोग्रामेटिक रूप से समाप्त कर सकता है। जब होस्ट ऐप को स्क्रीन अपने नियंत्रण में लेनी हो, उदाहरण के लिए जब ऐप बैकग्राउंड में जाए, तब सत्यापन को बंद करने का यह अनुशंसित तरीका है।
dismiss() SDK की सामान्य पूर्णता पाइपलाइन से होकर गुजरता है: यह प्रस्तुत UI को बंद करता है, आंतरिक स्थिति को रीसेट करता है, और यदि सत्र बनाया गया था तो वर्तमान sessionId के साथ .diditVerification हैंडलर को .cancelled(session:) के साथ कॉल करता है। जब कोई सत्यापन सक्रिय न हो, तब यह कोई प्रभाव नहीं डालता (no-op)।

उदाहरण: ऐप बैकग्राउंड में जाने पर बंद करना

सत्यापन बंद करने के लिए DiditSdk.shared.isPresented = false न सेट करें। यह फ़्लैग केवल false से true होने पर (बढ़त वाले किनारे पर) प्रेज़ेंटेशन को ट्रिगर करता है, और इसे false पर सेट करने का कोई प्रभाव नहीं होता। इसी तरह, सबसे ऊपर वाले व्यू कंट्रोलर पर UIKit का dismiss(animated:) कॉल करना समर्थित नहीं है: यह SDK की पूर्णता पाइपलाइन को बायपास कर देता है, इसलिए आपका .diditVerification हैंडलर कभी फ़ायर नहीं होता।

SDK स्थिति देखना

आप कस्टम लोडिंग UI के लिए SDK की स्थिति देख सकते हैं:

एंड-टू-एंड उदाहरण (बैकएंड सत्र → iOS SDK → परिणाम)

यह पैटर्न प्रोडक्शन-रेडी इंटीग्रेशन है। आपका बैकएंड सत्र बनाता है, आपका iOS ऐप session_token प्राप्त करता है, और SDK फ़्लो चलाता है।

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

2. iOS: एक्सचेंज करें और SDK शुरू करें

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

SDK का परिणाम UI फ़ीडबैक के लिए सुविधाजनक है, लेकिन आधिकारिक परिणाम webhook के माध्यम से आता है। HMAC सत्यापन के लिए Webhooks मार्गदर्शिका देखें।

संपूर्ण SwiftUI उदाहरण


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