A full-featured, enterprise-grade notification system for Laravel.
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/advanced-notifications/core
Requires
- php: ^8.1
- google/auth: ^1.0
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^10.0|^11.0|^12.0
- spatie/laravel-translatable: ^6.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
نظام إشعارات متكامل واحترافي لبيئة عمل Laravel، يدعم الإشعارات الفورية (Real-time) عبر Reverb/Pusher، وإشعارات الهاتف/المتصفح عبر Firebase (FCM)، مع لوحة تحكم متطورة للتحليلات وإدارة الحملات.
📋 المميزات
- إشعارات فورية (Real-time): دعم كامل لـ Laravel Reverb و Pusher مع تحديثات حية.
- Firebase Cloud Messaging (FCM):
- إرسال للمستخدمين (Tokens).
- إرسال للموضوعات (Topics).
- معالجة ذكية للأخطاء (حذف التوكنات المنتهية تلقائياً).
- تحليلات متقدمة (Analytics):
- تتبع الإرسال (Sent).
- تتبع الوصول (Delivered) - للويب.
- تتبع القراءة (Read).
- تتبع النقر (Clicked).
- لوحة تحكم (Dashboard): واجهة لإرسال الإشعارات ومشاهدة الإحصائيات.
- مكونات Blade جاهزة: دمج سهل في الفرونت إند بـ سطر واحد.
🚀 دليل التثبيت (Installation)
1. تثبيت الباكدج
composer require advanced-notifications/core
2. نشر الملفات
php artisan vendor:publish --provider="AdvancedNotifications\AdvancedNotificationsServiceProvider"
3. إعداد قاعدة البيانات
php artisan notifications:table php artisan migrate
⚙️ الإعداد والتهيئة (Configuration)
1. إعداد ملف .env
أضف المتغيرات التالية في ملف .env الخاص بمشروعك:
إعدادات Firebase (للإشعارات):
FIREBASE_CREDENTIALS_PATH=/path/to/your/firebase_credentials.json FIREBASE_API_KEY=AIzaSy... FIREBASE_AUTH_DOMAIN=your-app.firebaseapp.com FIREBASE_PROJECT_ID=your-project-id FIREBASE_STORAGE_BUCKET=your-app.appspot.com FIREBASE_MESSAGING_SENDER_ID=123456789 FIREBASE_APP_ID=1:123456789:web:abcdef FIREBASE_VAPID_KEY=B... (المفتاح العام الطويل)
إعدادات Reverb (للإشعارات الفورية):
REVERB_APP_ID=... REVERB_APP_KEY=... REVERB_APP_SECRET=... REVERB_HOST="localhost" REVERB_PORT=8080 REVERB_SCHEME="http" VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="${REVERB_HOST}" VITE_REVERB_PORT="${REVERB_PORT}" VITE_REVERB_SCHEME="${REVERB_SCHEME}"
2. إعداد موديل المستخدم (User.php)
أضف الـ Trait HasAdvancedNotifications في موديل المستخدم:
use AdvancedNotifications\Traits\HasAdvancedNotifications; class User extends Authenticatable { use HasAdvancedNotifications; // ... }
3. إعداد قنوات البث (routes/channels.php)
تأكد من وجود تصريح للقناة الخاصة بالمستخدم:
Broadcast::channel('App.Models.User.{id}', function ($user, $id) { return (int) $user->id === (int) $id; });
💻 الاستخدام (Usage)
1. دمج الإشعارات في الفرونت إند (Frontend)
فقط أضف هذا السطر في ملف الـ Layout الرئيسي (قبل إغلاق </body>):
<x-advanced-notifications::scripts topic="1" user-id="{{ auth()->id() }}" />
- topic="1": (اختياري) للاشتراك تلقائياً في موضوع معين.
- user-id: (ضروري) لتفعيل الإشعارات الخاصة بالمستخدم.
هذا المكون سيقوم تلقائياً بـ:
- تحميل مكتبات Firebase و Echo.
- طلب إذن الإشعارات.
- الاستماع للقنوات الخاصة.
- عرض الإشعارات بـ SweetAlert جميل.
- إرسال تقارير "تم الوصول" و "تم النقر" للباك إند.
2. إرسال إشعار برمجياً (Code)
use AdvancedNotifications\Notifications\GenericNotification; use App\Models\User; $user = User::find(1); $user->notify(new GenericNotification( 'عنوان الإشعار', 'نص الإشعار هنا...', null, // الأيقونة 'https://google.com', // رابط عند النقر [], // بيانات إضافية ['broadcast', 'database', 'fcm'] // القنوات ));
🧪 خطة الاختبار النهائي (Final Testing Plan)
اتبع هذه الخطوات للتأكد من أن النظام يعمل 100%:
الاختبار 1: الإرسال لمستخدم واحد (Single User)
- افتح لوحة التحكم:
/advanced-notifications/send. - اختر Target Type:
User. - أدخل Recipient ID: رقم المستخدم الخاص بك (مثلاً
1). - اختر القنوات:
Database,Realtime,FCM. - اضغط Send.
- ✅ النتيجة المتوقعة: يظهر SweetAlert فوراً، ويصل إشعار متصفح (FCM)، ويتم تسجيل الإشعار في قاعدة البيانات.
الاختبار 2: الإرسال لعدة مستخدمين (Multiple Users)
- في نفس الصفحة، أدخل في Recipient ID:
1,2(أرقام مستخدمين موجودين). - اضغط Send.
- ✅ النتيجة المتوقعة: يصل الإشعار لكلا المستخدمين، ويتم تسجيل سجلين في التحليلات.
الاختبار 3: الإرسال لموضوع (Topic)
- تأكد أنك مشترك في التوبيك (عبر كود الـ Blade
topic="news"مثلاً). - اختر Target Type:
Topic. - أدخل اسم التوبيك:
news. - اضغط Send.
- ✅ النتيجة المتوقعة: يصل إشعار FCM لجميع المشتركين في هذا التوبيك.
الاختبار 4: الإرسال الجماعي (Mass Send)
- اختر Target Type:
All Users. - اضغط Send.
- ✅ النتيجة المتوقعة: يتم جدولة الإرسال لجميع المستخدمين في النظام (على دفعات).
الاختبار 5: التحليلات (Analytics)
- بعد وصول الإشعار (SweetAlert)، لا تضغط عليه فوراً.
- اذهب لجدول
notification_analyticsفي الداتابيس.- ✅ يجب أن تجد سجل
event_type = delivered.
- ✅ يجب أن تجد سجل
- اضغط على الإشعار.
- ✅ يجب أن يتم توجيهك للرابط.
- ✅ يجب أن تجد سجل
event_type = clicked. - ✅ يجب أن تتحدث حالة الإشعار في جدول
advanced_notificationsلتصبحread_atلها قيمة.
تم التطوير بحب ❤️ بواسطة [فريقك]