Skip to main content

مقدمة

يُرسِل Lerix الإشعارات على iOS باستخدام Apple Push Notification service (APNs) مباشرةً — بدون الحاجة إلى Firebase. بعد إتمام تثبيت iOS، اتّبع الخطوات أدناه لتفعيل تسليم الإشعارات في تطبيقك.
تأكّد من تهيئة الـ SDK عبر Lerix.initialize() قبل إعداد الإشعارات.

إعداد مصادقة APNs

تحتاج إلى حساب Apple Developer نشط لإرسال إشعارات على iOS.
  1. في بوابة Apple Developer، اذهب إلى Certificates, Identifiers & Profiles → Keys.
  2. أنشئ مفتاحاً جديداً مع تفعيل Apple Push Notifications service (APNs).
  3. نزّل مفتاح المصادقة .p8 ولاحظ Key ID. يمكنك تنزيل المفتاح مرة واحدة فقط.
  4. ارفع ملف .p8 إلى لوحة تحكم Lerix، ضمن الإشعارات ← الإعدادات.
  5. في Certificates, Identifiers & Profiles → Identifiers، تأكّد من تفعيل خاصية Push Notifications على App ID الخاص بتطبيقك. هذا منفصل عن مفتاح .p8 أعلاه ومطلوب رغم أن مصادقة Lerix المعتمدة على الرمز (token-based) لا تحتاج شهادة لكل تطبيق — إذ ترفض APNs الإشعارات الموجّهة لـ App ID لا تملك سجلّاً له.
لمعرفة خطوات الإعداد الكاملة، راجع دليل Apple لتسجيل تطبيقك لدى APNs.

فعّل الخاصية في Xcode

أضف Push Notifications وBackground Modes → Remote notifications ضمن تبويب Signing & Capabilities لهدف تطبيقك (app target).

إعداد AppDelegate

AppDelegate.swift

اطلب الإذن وراقِب الإشعارات

سجّل setOnNotificationTapped في مكان لديه وصول إلى مكدّس التنقّل (navigation) لديك، لأن الضغط على إشعار يعني غالباً الانتقال إلى شاشة محددة بناءً على payload.metadata، وليس مجرد تسجيله في السجلّات.
يصل الضغط (tap) بشكل موثوق حتى لو كان هو ما فتح التطبيق من حالة إغلاق كامل — سجّل setOnNotificationTapped فور ظهور الشاشة الرئيسية لتطبيقك، وأي ضغط حدث قبل انتهاء تشغيل التطبيق يُعاد تشغيله تلقائياً بمجرد تسجيل الدالة.

البيانات (Payload) المُستلَمة مع الإشعار

يستقبل كل من setOnNotificationReceived وsetOnNotificationTapped كائناً من نوع LerixNotificationPayload:

معرّفات الجهاز

توجد ثلاث دوال مختلفة ترجع ثلاث قيم مختلفة — استخدم المناسبة حسب ما تفعله:
تعادل getRegisteredTokenId() هنا دالة getDeviceId() في Flutter SDK — التسمية تختلف بين الحزمتين، لكن كلتاهما ترجعان نفس نوع القيمة: المعرّف الذي تتوقّعه لوحة التحكم وREST API في حقل استهداف الجهاز. لصق getDeviceId() من هذه الحزمة (معرّف vendor المحلي) في عملية الإرسال بلوحة التحكم سيفشل برسالة “غير موجود” — لأنه لم يُسجَّل لدى الباك إند إطلاقاً.
جميع الدوال الثلاث ترجع nil حتى يُمنَح إذن الإشعارات ويكتمل التسجيل.

إرسال صوت مخصّص

اضبط sound عند إرسال إشعار — من تبويب إرسال إشعار في لوحة التحكم، أو معامل sound في REST API — لتشغيل ملف صوت مُرفق بدلاً من صوت الجهاز الافتراضي.
  • يجب أن يكون الملف موجوداً بالفعل داخل حزمة تطبيقك — يمرّر Lerix اسم الملف فقط، ولا يستضيف أو يرفع ملفات الصوت.
  • مرّر اسم الملف مع امتداده، مثل sound.mp3 (مدعوم أيضاً .wav/.caf).
لا حاجة لأي كود في الـ SDK لتشغيل الصوت — يعمل تلقائياً كجزء من الإشعار في النظام.

إرسال بيانات وصفية (Metadata)

أرفق بيانات مخصّصة عبر metadata (كائن JSON) عند الإرسال — من تبويب إرسال إشعار في لوحة التحكم، أو معامل metadata في REST API. تصل هذه البيانات إلى الجهاز داخل payload.metadata:

إرسال صورة

اضبط imageUrl عند إرسال إشعار — من تبويب إرسال إشعار في لوحة التحكم، أو معامل imageUrl في REST API — لعرض صورة غنية في الإشعار. لا تملك APNs حقل “صورة” أصلياً، لذا يتطلّب هذا خطوة إعداد لمرة واحدة:
  1. في Xcode: File → New → Target… → Notification Service Extension. سمِّه (مثلاً NotificationServiceExtension).
  2. انسخ ملف NotificationServiceExtension/NotificationService.swift من الحزمة إلى الامتداد الجديد، مستبدلاً الملف المُولَّد تلقائياً.
  3. ابنِ التطبيق وشغّله — لا حاجة لأي إعداد آخر. يضبط الباك إند تلقائياً علم mutable-content الخاص بـ APNs كلما حمل الإشعار قيمة imageUrl، وهذا ما يُشغّل الامتداد.
إذا لم يكن الامتداد مُعدّاً، يُتجاهَل imageUrl بصمت — يظهر الإشعار بشكل طبيعي بدون صورة، ولا يفشل الإرسال.
الصورة متاحة أيضاً في Swift كـ payload.imageUrl (في setOnNotificationReceived/setOnNotificationTapped) إن أردت عرضها في شريط إشعار مخصّص داخل التطبيق، إضافة إلى عرضها الأصلي من النظام.

استهدف مستخدماً على كل أجهزته

إذا كان منتجك يعمل أيضاً على منصات أخرى (الويب أو الجوال أو سطح المكتب)، فأضِفها إلى نفس المشروع واربط كل تثبيت بمعرّف المستخدم الخاص بك بعد تسجيل الدخول. عندها يستطيع الباك إند الخاص بك الإرسال إلى externalUserIds والوصول إلى هذا الشخص على كل أجهزته في طلب واحد.
راجع تعريف المستخدمين للتحقق من الهوية ومثال على الإرسال.

المواضيع (Topics)

بدلاً من استهداف رموز أجهزة محددة، يمكن للجهاز الاشتراك في موضوع (topic) باسم معيّن — أرسِل إشعاراً واحداً إلى الموضوع ليصل لكل مشترك فيه. لا حاجة لإنشاء الموضوع مسبقاً؛ يُنشأ تلقائياً أول مرة يشترك فيها أي جهاز. يمكنك أيضاً عرض المواضيع وإنشاءها وحذفها من تبويب الإشعارات ← المواضيع في لوحة التحكم.
للإرسال إلى موضوع، استخدم تبويب إرسال إشعار في لوحة التحكم (اختر “Topic” كجمهور مستهدف)، أو استدعِ REST API مع sendByTopic: true.