مستودع GitHub
اطّلع على الكود المصدري والأمثلة على GitHub
حزمة npm
@didit-protocol/sdk-react-native
SDK الأصلي: هذا هو النهج الموصى به لتطبيقات React Native وExpo. يغلّف حزمتي SDK الأصليتين لنظامي iOS وAndroid لتجربة مستخدم أفضل، ومعالجة محسّنة للكاميرا، ودعم كامل لـNFC.
المتطلبات
متطلبات المنصة
تتطلب الموافقة البيومترية الإصدار 4.10.0 من SDK الأصلي أو إصدار أحدث. بالنسبة للأشخاص الخاضعين لقوانين إلينوي أو تكساس أو كولورادو، يمكن لـ Didit أن تطلب الموافقة البيومترية الصريحة قبل أول التقاط للوجه. تعرض إصدارات React Native SDK التي تثبّت حزمتي SDK الأصليتين لنظامَي iOS وAndroid على الإصدار 4.10.0 أو أحدث هذه الخطوة. الإصدارات الأقدم لا يمكنها عرض هذه الخطوة: تعمل جلساتها كما كانت من قبل، ويُبلغ القرار بأن الموافقة لم يتم جمعها (
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). قم بالترقية إذا كنت تتحقق من هوية أشخاص في تلك الولايات.التثبيت
Expo (موصى به)
app.json (أو app.config.js). يتم تفعيل NFC افتراضياً:
- Android: تضيف مستودع Didit Maven إلى Gradle، وتضبط خاصية Gradle
diditSdkAndroidNfcEnabled، وتطبّق قواعد تبعيات BouncyCastle والتغليف. - iOS: تضيف ملف podspec الخاص بـ DiditSDK إلى Podfile (مثبَّتاً على iOS 15 عند تفعيل NFC).
Info.plist. أضِف مفاتيح أذونات iOS، وفي حال NFC أضِف أيضاً معرّفات أمر SELECT وفق ISO7816 ضمن ios.infoPlist في الملف نفسه. يتيح D392F000260100000001 لـ SDK قراءة بطاقة My Number اليابانية عبر JPKI:
تعطيل تبعيات NFC
لبناء التطبيق بدون دعم NFC (ملف ثنائي أصغر، ولا يتطلب إمكانات NFC)، مرّر خيارات الإضافة:React Native CLI
إعداد iOS
أضِف pod الخاص بـ DiditSDK إلىPodfile (فهو غير موجود في CocoaPods trunk). يأخذ الكود أدناه بعين الاعتبار متغير البيئة DIDIT_SDK_IOS_NFC_ENABLED حتى تتمكن من تبديل النسخة الفرعية بدون NFC (DiditSDK/Core) وقت التثبيت:
إعداد Android
أضِف مستودع Didit Maven إلىsettings.gradle على مستوى المشروع:
android/app/build.gradle الخاص بتطبيقك (داخل كتلة android { ... }) لحل تعارضات الفئات المكررة في BouncyCastle وتكرار MANIFEST.MF في OSGI التي قد تسببها التبعيات الانتقالية لـ DiditSDK:
me.didit:didit-sdk-core بدلاً من me.didit:didit-sdk)، أضِف هذا إلى android/gradle.properties:
true، لاستخدام Android SDK الكامل مع NFC.
الأذونات
iOS
أضف المفاتيح التالية إلى ملفInfo.plist الخاص بتطبيقك. سيؤدي غياب مفاتيح الخصوصية المطلوبة في iOS إلى أن ينهي iOS التطبيق فور وصول SDK إلى هذا المورد المحمي.
إعداد NFC
لتفعيل قراءة NFC لجوازات السفر وبطاقات الهوية التي تحتوي على شرائح:-
أضف إمكانية NFC في Xcode:
- اختر الهدف الخاص بك > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
-
أضف معرّفات ISO7816 إلى
Info.plist:
D392F000260100000001 لـ SDK قراءة بطاقة My Number اليابانية عبر JPKI. بدونه لا يُبلغ iOS SDK بوجود البطاقة. قراءة بطاقة My Number غير مفعّلة في الإنتاج بعد، ولا يؤثر المعرّف في المستندات الأخرى، لذا يمكنك إضافته الآن.
- أضف ملف الاستحقاقات مع تفعيل قراءة علامات NFC:
Android
تُعلَن الأذونات التالية في ملفAndroidManifest.xml الخاص بـ SDK وتُدمج تلقائياً:
تُعلَن ميزتا الكاميرا وNFC في الجهاز على أنهما اختياريتان (
android:required="false")، فيمكن تثبيت تطبيقك على أجهزة لا تتوفر فيها هذه الميزات.
البدء السريع
طرق التكامل
يدعم SDK طريقتين للتكامل:الطريقة 1: token الجلسة (موصى بها للإنتاج)
أنشئ جلسة على الخادم الخاص بك باستخدام واجهة Create Verification Session API، ثم مرّر token إلى SDK:- ربط الجلسات بالمستخدمين لديك (
vendor_data) - ضبط البيانات الوصفية المخصصة
- إعداد عمليات الاستدعاء الخاصة بكل جلسة
الطريقة 2: معرّف سير العمل (تكامل أبسط)
للتكاملات الأبسط، يمكن لـ SDK إنشاء الجلسات مباشرةً باستخدام معرّف سير العمل الخاص بك:الإعدادات
خصّص سلوك SDK بتمرير كائنDiditConfig:
startVerificationWithWorkflow، مرّر الإعدادات داخل options.config:
خيارات الإعداد
خيارات الكاميرا
تتوافق خيارات الكاميرا مع خيارات كاميرا Web SDK. كل عدسة هي إماCameraLens.Front أو CameraLens.Back.
إذا لم تتوفر على الجهاز العدسة المطلوبة، يستخدم SDK أول كاميرا متاحة لديه.
يُخفى زر تبديل الكاميرا أيضاً على الأجهزة التي تحتوي على كاميرا واحدة فقط.
اضبط خيار التبديل على false لتقييد المستخدم بالعدسة الافتراضية لتلك الخطوة.
السمات والألوان: تُضبط الألوان والخلفيات وإعدادات شاشة المقدمة عبر إعدادات العلامة البيضاء في وحدة تحكم Didit، وليس في إعدادات SDK. يضمن ذلك هوية بصرية متسقة عبر جميع المنصات.
دعم اللغات
يدعم SDK 54 لغة. إذا لم تُحدَّد لغة، يستخدم SDK لغة الجهاز مع الإنجليزية كلغة احتياطية.الخيارات المتقدمة
هذه الخيارات متاحة فقط معstartVerificationWithWorkflow، حيث ينشئ SDK الجلسة نيابةً عنك.
بيانات الاتصال (التعبئة المسبقة والإشعارات)
قدّم بيانات الاتصال لتعبئة نماذج التحقق مسبقاً وتفعيل إشعارات البريد الإلكتروني:التفاصيل المتوقعة (التحقق المتبادل)
قدّم تفاصيل المستخدم المتوقعة للتحقق المتبادل التلقائي مع البيانات المستخرجة من المستند:ExpectedDetails اختيارية. راجع src/types.ts للاطلاع على النوع الكامل.
البيانات الوصفية المخصصة
خزّن بيانات JSON وصفية مخصصة مع الجلسة (لا تُعرض للمستخدم):معالجة النتائج
تُرجع الدالتانstartVerification وstartVerificationWithWorkflow كلتاهما قيمة Promise<VerificationResult>. النتيجة من نوع اتحاد مميَّز، لذا استخدم الحقل type لتحديد النتيجة.
حالات النتيجة
خصائص SessionData
أنواع الأخطاء
انقطاع الاتصال
إذا فقد الجهاز اتصاله أثناء التحقق، يعرض SDK شاشة “لا يوجد اتصال بالإنترنت” بدلاً من ترك خطوة في حالة التحميل. يواصل SDK التحقق من الاتصال في الخلفية، ويُغلق الشاشة تلقائياً بمجرد استعادة إمكانية الوصول إلى Didit، ويتابع المستخدم من الخطوة التي كان فيها. تعرض الشاشة الزر Try Again وعند ضبطshowCloseButton على true (وهي القيمة الافتراضية) الزر Exit Verification.
الخروج ينهي التحقق بنتيجة failed ويكون الخطأ فيها networkError، لكي يعرف تطبيقك أن المستخدم غادر بسبب الاتصال.
مثال كامل لمعالجة النتائج
من البداية إلى النهاية (من الخادم الخلفي إلى SDK React Native إلى webhook)
هذا تكامل جاهز للإنتاج: يُنشئ الخادم الخلفي الجلسة، ويستقبل تطبيق React Native الرمزsession_token، ويُشغّل SDK مسار التحقق. يُرسَل القرار النهائي إلى الخادم الخلفي عبر webhook، ولا تثق أبداً بالنتيجة التي تظهر على الجهاز وحدها.