الانتقال إلى المحتوى الرئيسي
SDK متعدد المنصات لـ React Native يغلّف حزمتي SDK الأصليتين لنظامي iOS وAndroid، ويوفر واجهة TypeScript موحدة للتحقق من الهوية.

مستودع 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 (موصى به)

ثم أضِف إضافة الإعداد (config plugin) إلى 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)، مرّر خيارات الإضافة:
عند تعطيل NFC، لا تحتاج إلى قدرة NFC في iOS، ولا إلى استحقاقات NFC، ولا إلى إعدادات التزويد المرتبطة بـ NFC.
يستخدم SDK هذا وحدات أصلية (الكاميرا وNFC) غير متاحة في Expo Go. يجب استخدام نسخة التطوير (development build) أو تشغيل npx expo prebuild لإنشاء المشاريع الأصلية.

React Native CLI

إعداد iOS

أضِف pod الخاص بـ DiditSDK إلى Podfile (فهو غير موجود في CocoaPods trunk). يأخذ الكود أدناه بعين الاعتبار متغير البيئة DIDIT_SDK_IOS_NFC_ENABLED حتى تتمكن من تبديل النسخة الفرعية بدون NFC (DiditSDK/Core) وقت التثبيت:
يجب أن يطابق الوسم (tag) في رابط podspec القيمة diditNativeSdkVersions.ios في إصدار الحزمة المثبَّت. يثبّت React Native 4.13.2 إصدار iOS الأصلي 4.13.2 وإصدار Android الأصلي 4.13.2. لا توجّه podspec إلى main: فالحزمة تعتمد على إصدار iOS الأصلي المحدد بدقة، لذلك بمجرد أن يتقدم main يرى CocoaPods متطلبين غير متوافقين لـ DiditSDK ويفشل كل pod install. تشتق إضافة إعداد Expo هذا الرابط لك تلقائياً، أما مسار React Native CLI المباشر فهو وحده ما يحتاج إلى كتابته يدوياً.
ثم ثبّت الاعتماديات:
لإعادة البناء بدون تبعيات NFC، نظّف CocoaPods وأعد التشغيل مع ضبط متغير البيئة:

إعداد Android

أضِف مستودع Didit Maven إلى settings.gradle على مستوى المشروع:
أضِف ما يلي إلى android/app/build.gradle الخاص بتطبيقك (داخل كتلة android { ... }) لحل تعارضات الفئات المكررة في BouncyCastle وتكرار MANIFEST.MF في OSGI التي قد تسببها التبعيات الانتقالية لـ DiditSDK:
لبناء التطبيق بدون تبعيات NFC في Android (يستخدم الحزمة me.didit:didit-sdk-core بدلاً من me.didit:didit-sdk)، أضِف هذا إلى android/gradle.properties:
احذف هذه الخاصية، أو اضبطها على true، لاستخدام Android SDK الكامل مع NFC.

الأذونات

iOS

أضف المفاتيح التالية إلى ملف Info.plist الخاص بتطبيقك. سيؤدي غياب مفاتيح الخصوصية المطلوبة في iOS إلى أن ينهي iOS التطبيق فور وصول SDK إلى هذا المورد المحمي.

إعداد NFC

لتفعيل قراءة NFC لجوازات السفر وبطاقات الهوية التي تحتوي على شرائح:
  1. أضف إمكانية NFC في Xcode:
    • اختر الهدف الخاص بك > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
  2. أضف معرّفات ISO7816 إلى Info.plist:
يتيح المعرّف D392F000260100000001 لـ SDK قراءة بطاقة My Number اليابانية عبر JPKI. بدونه لا يُبلغ iOS SDK بوجود البطاقة. قراءة بطاقة My Number غير مفعّلة في الإنتاج بعد، ولا يؤثر المعرّف في المستندات الأخرى، لذا يمكنك إضافته الآن.
  1. أضف ملف الاستحقاقات مع تفعيل قراءة علامات NFC:
تأكد من أن ملف تعريف التوفير يتضمن إمكانية NFC Tag Reading. لا يحتاج إعداد NFC هذا إذا كان 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، ولا تثق أبداً بالنتيجة التي تظهر على الجهاز وحدها.

1. الخادم الخلفي: إنشاء الجلسة

2. React Native: تبادل الرمز وبدء SDK

3. الخادم الخلفي: استلام القرار النهائي عبر webhook

راجع دليل Webhooks لمعرفة تفاصيل التحقق من توقيع HMAC.

مثال كامل


آخر تعديل في ٧ نوفمبر ٢٠٢٦