لماذا تعرّف المستخدمين
معظم المنتجات تعمل على أكثر من منصة: تطبيق للجوال، وموقع ويب، وربما تطبيق لسطح المكتب. في Lerix تنتمي كلها إلى مشروع واحد بمفتاح API واحد. افتراضياً، كل تثبيت مجهول الهوية: الشخص الذي يستخدم تطبيقك على iOS وتطبيقك على جهاز Android اللوحي وموقعك يُحسب كثلاثة أجهزة لا علاقة بينها. عندما تخبر تطبيقاتك Lerix بمن سجّل الدخول، ترتبط هذه الأجهزة بمعرّف المستخدم الخاص بك، ويستطيع الباك إند الخاص بك الإرسال إلى هذا المعرّف بدلاً من جمع رموز الأجهزة:user_123 على كل جهاز سجّل فيه دخوله، وعلى كل منصة (iOS
وAndroid والويب وmacOS)، كلٌّ عبر مزوّد الإشعارات الخاص به.
- سجلّ تثبيت واحد لكل جهاز. تُربط الأجهزة بالمستخدم ولا تُدمج أبداً، فيبقى السجل وحالة التسليم لكل جهاز على حدة.
- أي عدد من الأجهزة لكل مستخدم. تسجيل الدخول على جهاز جديد يضيفه.
- معرّفك أنت، لا معرّفنا. استخدم ما يعرّف المستخدم في نظامك: معرّف
قاعدة بيانات، أو UUID، أو بريد إلكتروني (من 1 إلى 255 حرفاً). معرّف
التثبيت الذي تُرجعه
getUserId()قيمة مختلفة يولّدها Lerix ولا تتغير.
حدّد المستخدم بعد تسجيل الدخول
استدعِsetUser بمجرد تسجيل المستخدم دخوله، وclearUser عند تسجيل خروجه.
يُحفظ المعرّف محلياً ويُرسَل مجدداً تلقائياً إذا أُعيد تسجيل التثبيت، لذا
يكفي استدعاؤه مرة واحدة لكل تسجيل دخول. ويمكن استدعاؤه بأمان قبل أن تكتمل
تهيئة الـ SDK.
المعامل الثاني، identityHash، مطلوب فقط عند تفعيل
التحقق من الهوية. اتركه حتى ذلك الحين.
setUser(externalId, identityHash?) وclearUser().
تأخذ حزم JavaScript قيمة الـ hash ككائن خيارات ({ identityHash })، بينما
تأخذها البقية كمعامل مسمّى.
التحقق من الهوية
لا تحمل تطبيقاتك إلا مفتاح المشروع العام، لذا بدون التحقق يستطيع أي عميل استدعاءsetUser بمعرّف شخص آخر وتلقي إشعاراته. التحقق من الهوية يسدّ هذه
الثغرة: الباك إند الخاص بك، الذي يعرف أصلاً من سجّل الدخول، يوقّع المعرّف
بسرّ لا يُضمَّن أبداً في أي تطبيق، ويرفض Lerix أي معرّف غير موقَّع.
التحقق معطّل افتراضياً ليعمل setUser مباشرة. فعّله قبل الإطلاق في بيئة
الإنتاج.
1
أنشئ سرّاً
في لوحة التحكم، افتح مشروعك ثم
الإشعارات ← الإعدادات ← التحقق من الهوية، وأنشئ سرّاً. يُعرض السرّ
مرة واحدة فقط: احفظه في مدير الأسرار في الباك إند الخاص بك (مثلاً
باسم
LERIX_IDENTITY_SECRET). إنشاء سرّ جديد لاحقاً يستبدل القديم، فتتوقف
قيم الـ hash المحسوبة بالسرّ القديم عن العمل.2
احسب الـ hash على خادمك
الـ hash هو HMAC-SHA256 لمعرّف المستخدم بصيغة hex بأحرف صغيرة، ومفتاحه هو
السرّ كما هو تماماً (نص السرّ، وليس البايتات بعد فكّ ترميزها). أعِده إلى
تطبيقك مع استجابة تسجيل الدخول، بجانب معرّف المستخدم.
3
مرّر الـ hash إلى setUser
حدّث تطبيقاتك لتمرّر الـ hash في
identityHash. بمجرد وجود سرّ، يجب أن
يكون أي hash مُرسَل صحيحاً حتى لو كان التحقق اختيارياً، فيظهر أي خطأ في
إعداد الباك إند مبكراً.4
اشترط الهوية الموثّقة
عندما ترسل كل إصدارات تطبيقاتك المستخدمة الـ hash، فعّل خيار
Require verified identity (اشتراط الهوية الموثّقة) في نفس لوحة
الإعدادات. بعدها يُرفض أي استدعاء لـ
setUser بدون hash صالح.أخطاء setUser
أرسل إلى مستخدم
من الباك إند الخاص بك، أرسل باستخدامexternalUserIds ومفتاح خاص في ترويسة
lerix-key (راجع مقدمة الـ API):
201 Created
- تحتوي
unknownUserIdsعلى المعرّفات التي لا يرتبط بها أي جهاز (مثلاً مستخدم لم يثبّت التطبيق بعد). وهذا ليس خطأ. - لا تجمع
externalUserIdsمعdeviceTokensأوsendByTopicفي نفس الطلب، فهذا يُرجعNOTIFICATION_TARGET_INVALID. - إذا جدولت الإرسال عبر
sentAt، يُعاد البحث عن الأجهزة وقت الإرسال، فيصل الإشعار أيضاً إلى جهاز سجّل المستخدم دخوله عليه بعد الجدولة. - إذا لم تكن لإحدى المنصات مفاتيح إشعارات بعد (مثلاً لا يوجد مفتاح APNs)،
تتلقى بقية الأجهزة الإشعار، ويظهر تسليم ذلك الجهاز بالرمز
PLATFORM_NOT_CONFIGUREDفي حالة التسليم.