تضمين SDK أو رابط مُستضاف: اختيار كيفية دمج التحقق

Charles Archibong, المؤسس المشارك
قم بتضمين حزمة تطوير البرامج (SDK) عند إجراء التحقق داخل منتجك؛ وأرسل رابطًا مُستضافًا لكل مُتقدم عند إجرائه خارجه. في كلتا الحالتين، شغّل سير عمل مُعلن، بحيث يكون الخيار مُرتبطًا بالتسليم، وليس بسير العمل.

أهم النقاط
- اختر السطح الذي يتم من خلاله التحقق: داخل منتجك (تضمين) أو خارجه (رابط).
- يحتوي رابط جلسة كل متقدم على مرجع المستخدم الخاص بك؛ أما الرابط المستضاف المشترك فلا يمكنه إخبارك بمن فتحه.
- قم ببناء التدفق كتدفق عمل منشور أولاً، حتى يتم تشغيل نفس عمليات التحقق عند تضمينه وربطه.
- تقوم الروابط المستضافة في WebView بالإبلاغ عن أحداث التقدم، ولكن قراءة شريحة NFC والتحقق من الحيوية الأصلية تتطلبان SDKs الأصلية.
قم بتضمين SDK عندما تتم عملية التحقق داخل منتجك، في اللحظة التي يصل إليها المستخدم في جلسته الخاصة. أرسل رابطًا مُستضافًا عندما تتم عملية التحقق خارجه: موظف قروض يطلب مستندات، تاجر يتم تسجيله عبر البريد الإلكتروني، عميل يُطلب منه إعادة التحقق بعد أشهر من التسجيل. هذه هي قاعدة اتخاذ القرار، ومعظم الفرق تحتاج في النهاية إلى كليهما.
ما يجعل هذا الخيار اقتصاديًا هو إمكانية إنشاء سير العمل مرة واحدة فقط كعملية منشورة . يقوم التطبيق المضمن بتثبيته باستخدام المعرّف، ويقوم الرابط بتشغيل نفس اللقطة المنشورة، وتكون عمليات التحقق والعلامة التجارية وقواعد اتخاذ القرار متطابقة. أنت تختار منصة عرض، وليس عملية تحقق ثانية تحتاج إلى صيانة.
ما هو الفرق الحقيقي بين الاثنين؟
ينتهي كلا المسارين في نفس المكان. يُكمل المتقدم خطوات التسجيل، وتُعالج المنصة عملية التحقق بشكل غير متزامن، ويتلقى نظامك الخلفي النتيجة من خلال إشعار عبر الويب (يفتح في علامة تبويب جديدة) أو استطلاع الحالة. يكمن الاختلاف في الجهة التي تبدأ العملية وما يتحكم فيه الكود الخاص بك.
سؤال | SDK تضمين | رابط مُستضاف |
|---|---|---|
من أين يبدأ المتقدم؟ | داخل تطبيق الويب أو تطبيق الهاتف المحمول الخاص بك | أ URL تم فتحه من البريد الإلكتروني، SMS رمز الاستجابة السريعة أو عرض الويب |
ماذا تقوم بتثبيته؟ | عميل SDK ومفتاح قابل للنشر | لا شيء على جهاز العميل؛ مفتاح سري في نظامك الخلفي لإنشاء روابط لكل متقدم |
من هو مقدم الطلب؟ | المستخدم الذي قام بتسجيل الدخول، والذي تم تمريره كـ | تمت تسميته بواسطة |
ماذا تسمع في الوقت الفعلي؟ | SDK ردود الاتصال مثل | أحداث الروابط المستضافة عند تشغيل الصفحة في WebView أو iframe؛ وإلا فسيتم إرسالها فقط عبر webhook الخاص بك |
إمكانيات الجهاز | كامل، بما في ذلك NFC قراءة الشريحة وحالة الجهاز على حزم تطوير البرامج الأصلية | إمكانيات المتصفح فقط |
تغيير التدفق | أعد نشر سير العمل | أعد نشر سير العمل |
السطر الأخير هو ما يخطئ فيه الناس. مع وجود سير عمل، لا يحتاج أي من المسارين إلى تغيير في الكود لتغيير التدفق. بدون ذلك، يعني التضمين تحديد البلد وأنواع المعرفات ومفاتيح تبديل الخطوات كخصائص، ويصبح كل تغيير بمثابة إصدار.
عندما SDK التضمين هو الخيار الصحيح
قم بتضمين هذه الميزة عندما تكون عملية التحقق خطوة في رحلة تتحكم بها ويكون المستخدم قد سجل دخوله بالفعل. يُعد تطبيق المحفظة الذي يتحقق من المستخدم قبل أول عملية تحويل له، أو السوق الذي يتحقق من البائعين قبل أول عرض لهم، مثالاً مناسباً.
ستحصل على ثلاثة أشياء لا يمكن أن يوفرها لك الرابط.
دوال الاستدعاء في التعليمات البرمجية الخاصة بك.SDK المكالماتonSubmitمعverificationIdبمجرد إنشاء عملية التحقق، يمكنك نقل المستخدم إلى شاشة معلقة دون انتظار إشعار الويب.onErrorيُبلغ عن الأعطال الفنية (الشبكة، إذن الكاميرا، نوع هوية معطل) مع استقرارcode.
إمكانية الجهاز الأصلية. تقرأ حزم تطوير البرامج (SDKs) الخاصة بـ React Native و Flutter (يفتح في علامة تبويب جديدة) شرائح جوازات السفر عبر NFC وتشغيل خاصية التحقق من هوية المستخدم على الجهاز. لا تستطيع المتصفحات الاتصال بشريحة جواز السفر، لذا فإن الويب SDK لا يعرض سوى شاشة الشريحة في معاينة منشئ لوحة التحكم.
هويتك الحالية. أنت تجتاز الاختبار .userIdوuserDataمن جلستك، لذلك يتم ربط التحقق بحساب معروف ويتم مقارنة الاسم الذي تحمله بالوثيقة.
تضمين ويب بسيط، مأخوذ من SDK الوثائق:
<MyazaKYC
apiKey="pk_live_…"
workflowId="wf_AbC123dEf456"
userId="user_42"
metadata={{ requestId: "order_1001" }}
onSubmit={(s) => console.log(s.verificationId)}
/>التكاليف حقيقية ولكنها متواضعة. عند إضافة تبعية، يجب الحفاظ عليها عند الحد الأدنى من الإصدارات التي تدعمها أو أعلى منها.workflowId(الويب 2.2.0، رياكت نيتف 2.1.0، فلاتر 2.2.0 أو أحدث)، وفي رياكت نيتف تحتاج إلى إصدار تطوير مخصص لأن SDK الكود الأصلي للسفن.
متى يكون الرابط المستضاف هو الخيار الأمثل
أرسل رابطًا عندما لا يكون الشخص الذي تريد التحقق منه موجودًا في تطبيقك في اللحظة التي تحتاج إليه فيها. بعض الأشكال الشائعة:
مُقرض أعمال يقوم بتحصيل الأموال KYC من مخرج لم يسبق له أن سجل دخوله إلى أي شيء.
فريق عمليات يعيد التحقق من عميل انتهت صلاحية وثيقته.
منصة بدون تطبيق جوال، تقوم بالتحقق من المستخدمين الذين يصلون عبر البريد الإلكتروني.
قناة شريكة لا يمكنك من خلالها شحن أي كود على الإطلاق.
هناك نوعان من الروابط، والاختيار بينهما أهم من اختيار الرابط مقابل التضمين.
روابط جلسات لكل متقدم
عندما تعرف من يجب عليه التحقق، أنشئ جلسة من الواجهة الخلفية الخاصة بك باستخدامPOST /api/kyc/sessions (يفتح في علامة تبويب جديدة)ومفتاح سري:
curl "https://api.toden.co/api/kyc/sessions" \
-H "Authorization: Bearer $MYAZA_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflowId": "wf_AbC123dEf456",
"externalUserId": "user_42",
"userData": { "firstName": "John", "lastName": "Doe" }
}'يحمل الردurlهذا المنتج يخص ذلك المتقدم فقط. وهو للاستخدام لمرة واحدة، ويمكن تتبعه إليك.externalUserIdويتم إنفاقها بمجرد إرسالها، لذا فإن إعادة توجيهها إلى شخص ثانٍ لا تجدي نفعاً. يمكنك تمريرهاemailأن يتم إرسال الرابط نيابة عنك، أو أن تقوم بتسليمه بنفسك.
يُعرض على زوار الموقع الإلكتروني الذين يستخدمون أجهزة الكمبيوتر المكتبية رمز QR بعنوان "متابعة على هاتفك" للوصول إلى خطوات استخدام الكاميرا، بحيث يصل الرابط المرسل عبر البريد الإلكتروني إلى شخص يستخدم جهاز كمبيوتر محمول إلى الكاميرا. (الويب) SDK يتم تطبيق نفس آلية التسليم على سطح المكتب، ويتم التحكم بها من خلالdeviceHandoffخيار.)
هناك تفصيلان يستحقان التخطيط بشأنهما. يتوقف الرابط عن قبول بدء جديد عندexpiresAtمدة الجلسة 24 ساعة للتدفقات الفردية و7 أيام لتدفقات الأعمال، ما لم يحدد سير العمل مدة جلسة خاصة به. ويكون التكوين الذي يستخدمه المتقدم هو النسخة المنشورة التي تم تجميدها عند إنشاء الرابط، لذا فإن إعادة النشر لا تُغير رابطًا موجودًا بالفعل في صندوق بريد المستخدم.
روابط الاستضافة المشتركة
يمكن أيضًا تشغيل كل سير عمل منشور كعمل عام واحد URL يفتح هذا العدد الكبير من الأشخاص الرابط، وتبدأ كل زيارة عملية تحقق خاصة بها. يناسب هذا الأسلوب الحملات الإعلانية أو رموز الاستجابة السريعة على المنضدة، حيث لا تعرف هوية الزائرين. لكن يكمن العيب في تحديد مصدر البيانات: فالرابط لا يرتبط بأي مستخدم في نظامك، لذا عليك إيجاد طريقة أخرى لمطابقة النتائج. إعادة إنشاء الرابط من صفحة سير العمل تُلغي الرابط القديم. URL فوراً، وهذا هو خيارك إذا انتشر الأمر على نطاق أوسع من المقصود. إذا كنت تعرف الشخص، فاستخدم جلسة.
المسار الأوسط: رابط مُستضاف داخل تطبيقك
ترغب بعض الفرق في استضافة الصفحة لدينا ولكن فتحها داخل تطبيقها الخاص، وذلك عادةً لتجنب الاعتماد على مكتبة أصلية. هذا الحل ناجح. افتح الجلسة.urlفيreact-native-webview،webview_flutterأو إطار iframe، وتقوم الصفحة بالإبلاغ عن تقدمها إلى المضيف كأحداث روابط مستضافة (يفتح في علامة تبويب جديدة) :ready،started،step،submitted،completed،errorوclosed.
<WebView
source={{ uri: session.url }}
onMessage={(event) => {
const message = JSON.parse(event.nativeEvent.data);
if (message.source !== 'myaza-kyc') return;
if (message.type === 'submitted') {
navigation.replace('VerificationPending', { id: message.verificationId });
}
}}
/>اعرف حدودها قبل أن تختارها. NFC لا تتوفر قراءة الشريحة، وفحوصات التواجد في الخلفية، وفحص حالة التطبيق داخل WebView. تحمل الأحداث معرّفات وأسماء خطوات ورموز أخطاء، ولا تتضمن أي بيانات أدخلها أو سجلها المستخدم، وهي مجرد ميزة إضافية لواجهة المستخدم، وليست جزءًا من السجل. يبقى القرار النهائي صادرًا من رابط الويب الخاص بك أو من استطلاع الحالة.
في إطار iframe، أضف مصدر صفحتك كـoriginمُعامل الاستعلام. لا تنشر الصفحة الأحداث إلا عندما يؤكد المتصفح أن صفحتك هي بالفعل الصفحة المُضمِّنة، ولا تنشر أي شيء بخلاف ذلك.
قرار مدروس
لنفترض وجود مُقرض استهلاكي افتراضي لديه تطبيق جوال وفريق مبيعات ميداني. يقوم العملاء الجدد بالتحقق من هويتهم داخل التطبيق قبل الحصول على قرضهم الأول، لذا يتضمن التطبيق React Native. SDK مع سير عمل منشور يتضمن قراءة شريحة جواز السفر. يقوم المندوبون الميدانيون بتسجيل المتداولين في الأسواق الذين لم يقوموا بتثبيت التطبيق بعد، لذلك يقوم النظام الخلفي بإنشاء جلسة لكل متداول باستخدام معرّف العميل المحتمل الخاص بالمتداول كـexternalUserIdويرسل الوكيل الرابط عن طريق SMS يحصل العملاء الذين تنتهي صلاحية هوياتهم لاحقاً على رابط جلسة جديد من قسم العمليات.
يمكن لسير عمل واحد أن يخدم الثلاثة جميعًا، أو يمكن للمقرض الاحتفاظ بسير عمل أبسط لروابط الحقول. في كلتا الحالتين، تصل كل نتيجة إلى معالج webhook نفسه، ويتم تحديدها بواسطةverificationIdوتحمل مسؤولية المُقرض نفسهexternalUserId.
قاعدة القرار
قم ببناء سير العمل كعملية منشورة قبل اختيار سطح العمل.
إذا كان المستخدم مسجلاً دخوله إلى منتجك لحظة التحقق، فقم بتضمين SDK استخدم لغة أصلية SDK إذا كنت بحاجة NFC قراءة الشريحة.
إذا تم التحقق خارج منتجك وكنت تعرف الشخص، فقم بإنشاء جلسة لكل متقدم من الواجهة الخلفية الخاصة بك.
استخدم رابطًا مشتركًا مستضافًا فقط عندما لا يمكنك معرفة من سيفتحه، وخطط لكيفية إسناد النتائج.
إذا كنت ترغب في استضافة صفحة داخل تطبيقك، فافتح الجلسة. URL في WebView والاستماع إلى أحداث الارتباط المستضاف، مع قبول فقدان قراءة الشريحة والحيوية الأصلية.
أياً كان اختيارك، تعامل مع رابط الويب كمصدر للحقيقة ومع إشارة جانب العميل كتلميح.
المصادر

Charles Archibong
المؤسس المشارك
شارك تشارلز أرتشيبونغ في تأسيس شركة Toden. وهو يكتب عن التحقق من الهوية، والتكنولوجيا المالية، والعمل العملي لبناء خدمات رقمية موثوقة.


