الإشعارات من أقوى الطرق اللي تقدر توصل بيها لمستخدميك. بس برضه من أكتر الحاجات اللي ممكن تزعجهم لو اتعاملت معاها غلط. بنيت لوحة الإشعارات كمشروع متكامل، وأضفت إشعارات ويب لإسمع راديو، واتعلمت دروس كتير عن Web Push API وتجربة المستخدم. في المقال ده هشارك الرحلة دي من أول مفاتيح VAPID لحد الإشعارات اللي بتوصل فعلاً.
أول خطوة كانت فهم إزاي Web Push بيشتغل. النظام بيحتاج تلاتة أطراف: التطبيق بتاعك (الـ Client)، الـ Push Service (الوسيط اللي بيوصّل الإشعار)، والـ Service Worker (اللي بيستقبل الإشعار وبيعرضه). لما المستخدم بيوافق على الإشعارات، التطبيق بيتواصل مع الـ Push Service وبيعمل Subscription — ده بيرجع كائن فيه Endpoint وKeys. الكائن ده بتبعته لسيرفرك عشان تستخدمه بعد كده تبعت إشعارات.
مفاتيح VAPID كانت من أكتر الحاجات اللي اتعبني في البداية. VAPID (Voluntary Application Server Identification) هي طريقة المصادقة اللي بتأكد للـ Push Service إنك أنت المرسل الحقيقي. لازم تولّد زوج مفاتيح — المفتاح العام اللي بتسجله في الـ Push Service والمفتاح الخاص اللي بتحفظه على السيرفر. لو المفتاح الخاص اتسرب، أي حد يقدر يبعت إشعارات باسمك. في لوحة الإشعارات، حفظت المفتاح الخاص في Environment Variables وعملت Rotation كل فترة.
إدارة الـ Subscriptions كانت تحدي لوحده. كل مستخدم ليه Subscription مختلف، وده معناه إنك محتاج تخزن كل الـ Subscriptions في قاعدة البيانات. بس المشكلة إن الـ Subscriptions ممكن تنتهي — المتصفح بيحدث الـ Endpoint أحيانًا، أو المستخدم بيلغي الصلاحية، أو بيمسح الـ Service Worker. عشان كده عملت نظام تنظيف بيمسح الـ Subscriptions الغير صالحة كل يوم. لما ببعت إشعار ويرجع خطأ 410 (Gone)، بحذف الـ Subscription ده من قاعدة البيانات.
في لوحة الإشعارات، بنيت واجهة إدارية كاملة تسمح بإرسال إشعارات مخصصة. الأدمن يقدر يختار الفئة المستهدفة (كل المستخدمين، مستخدمين محددين، أو اللي اشتروا منتج معين)، يكتب العنوان والمحتوى، ويحدد وقت الإرسال. كمان أضفت جدولة (Scheduling) — يعني تقدر تكتب الإشعار دلوقتي وتحدد يتبعت بكرة الساعة 10 الصبح. النظام بيستخدم Cron Jobs عشان يفحص الإشعارات المجدولة كل دقيقة ويبعت اللي وقتها وصل.
في إسمع راديو، استخدمت الإشعارات بطريقة مختلفة. بدل ما أبعت إشعارات تسويقية، ببعت إشعارات ليها قيمة حقيقية: لما محطة جديدة بتتضاف، لما فيه عرض خاص على اشتراك، أو لما في تحديث مهم. الخدمة بتاعتنا بتسمح للمستخدم يختار إيه نوع إشعارات عايزه — محطات جديدة بس، أو تحديثات فقط، أو كل حاجة. التخصيص ده زود نسبة التفاعل مع الإشعارات بشكل ملحوظ.
أكبر تحدي كان إقناع المستخدمين يوافقوا على الإشعارات. نسبة الموافقة على الإشعارات على الويب أقل بكتير من التطبيقات الأصلية — حوالي 10-15٪ بس. عشان أزوّد النسبة دي، استخدمت استراتيجية "الطلب المتأخر" — مابطلبش صلاحية الإشعارات أول ما المستخدم يدخل الموقع. بدل كده، باستنى لحد ما المستخدم يعمل حاجة تظهر اهتمامه، وبعدين أطلب الصلاحية. مثلاً في إسمع راديو، بعد ما المستخدم يسمع راديو 3 مرات، بعرض له رسالة "عايز تتوصلك إشعارات لما محطات جديدة تتضاف؟". النسبة زادت لـ 35٪ بالاستراتيجية دي.
إشعار التعب (Notification Fatigue) مشكلة حقيقية. لو بعت إشعارات كتير، المستخدم هيلغي الصلاحية أو هيحظر الموقع. عملت قاعدة: مابعتش أكتر من إشعارين في اليوم للمستخدم الواحد. كمان بختار الأوقات المناسبة — مابعتش إشعارات في وسط الليل! استخدمت التوقيت المحلي للمستخدم عشان أضمن إن الإشعار بيوصل في وقت مناسب. في لوحة الإشعارات، أضفت تحليلات بسيطة: عدد الإشعارات المرسلة، نسبة الضغط عليها (Click Rate)، وعدد المستخدمين اللي لغوا الاشتراك. البيانات دي بتساعدني أحسن الإشعارات بمرور الوقت.
الفرق بين Web Push والإشعارات داخل التطبيق (In-App) مهم. Web Push بتوصل للمستخدم حتى لو الموقع مقفول — ده قوتها الأساسية. بس الإشعارات داخل التطبيق أوضح وأسهل في التفاعل. في مشاريعي، باستخدم الاتنين مع بعض: Web Push للأحداث المهمة اللي محتاج اهتمام فوري، وإشعارات داخل التطبيق للتحديثات العادية اللي المستخدم يشوفها لما يفتح التطبيق.
نصيحتي: لو هتضيف إشعارات ويب، فكر في تجربة المستخدم الأول. متطلبش الصلاحية من أول زيارة — ده بيخوف الناس. اختار الأوقات الصح للإرسال، وقلل عدد الإشعارات لأقصى حد ممكن. كلم إشعار لازم يكون ليه قيمة حقيقية للمستخدم. ودايمًا استخدم لوحة تحكم تتابع بيها أداء الإشعارات — الـ Click Rate والـ Unsubscribe Rate هم أفضل مؤشراتك.
كيف بدأت مع Next.js ولماذا أصبح إطار العمل المفضل لدي لبناء تطبيقات ويب متكاملة وسريعة.
نظرة تقنية على التحديات الأمنية في تطبيقات مشاركة الموقع وكيف تعاملت معها في تطبيق طمني.
مناقشة معمقة عن التحديات والمكافآت في بناء تطبيقات ويب مخصصة للمستخدمين العرب، تصميم RTL، الخطوط العربية، الاعتبارات الثقافية.