Firebase & Supabase • المستوى الرابع • الدرس 3
العودة لفهرس المستوىمشروع تطبيقي — بناء تطبيق دردشة فورية بـ Firebase
أهداف المشروع
- دمج Auth + Firestore + Real-time Sync في تطبيق واحد.
- بناء نظام تسجيل وإرسال رسائل فورية بين مستخدمين.
- إدارة حالة المصادقة مع
onAuthStateChanged. - تطبيق أنماط معمارية حقيقية لتطبيقات الإنتاج.
1. البنية المعمارية للتطبيق
تطبيق الدردشة نموذج مثالي لدمج خدمات Firebase. سيعتمد على:
javascript
// البنية الكاملة
┌─────────────────────────────────────────┐
│ المستخدم (المتصفح) │
└─────────────────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌────────┐ ┌─────────┐ ┌─────────┐
│ Auth │ │Firestore│ │ FCM │
│ │ │ │ │ (إشعارات)│
└────────┘ └─────────┘ └─────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────┐
│ Firebase Backend │
└──────────────────────────────────┘2. دورة حياة الرسالة
كيف تنتقل الرسالة من المرسل إلى المستقبل في الوقت الفعلي:
javascript
// 1. المرسل يُرسل رسالة
await addDoc(collection(db, 'messages'), {
content: 'مرحباً!',
senderId: 'user-1',
roomId: 'room-1',
createdAt: serverTimestamp()
});
// 2. Firestore يُحدّث المستند فوراً
// 3. onSnapshot يلتقط التغيير في كل متصفح مفتوح
onSnapshot(query(collection(db, 'messages'), orderBy('createdAt')), (snap) => {
// كل المستخدمين المفتوحين يستقبلون الرسالة فوراً
});
// التأخير: عادة < 200ms
// 4. (اختياري) Cloud Function يُرسل FCM
// للمستخدمين الذين أغلقوا المتصفح3. الكود الكامل المطلوب تنفيذه
المطلوب في هذا المشروع: 6 دوال أساسية + اختبار تلقائي:
register
تسجيل مستخدم جديد بالبريد.
login
تسجيل الدخول.
logout
تسجيل الخروج.
sendMessage
إرسال رسالة إلى Firestore.
listenToMessages
الاستماع الفوري للرسائل الجديدة.
watchAuth
مراقبة حالة المصادقة.
التطبيق العملي المباشر
تحدي المشروع: دردشة كاملة
- أضف
login(email, password)مع signInWithEmailAndPassword. - أضف
logout()مع signOut. - أضف
sendMessage(roomId, senderId, content)مع addDoc + serverTimestamp. - أضف
listenToMessages(roomId, callback)مع onSnapshot. - أضف
watchAuth(callback)مع onAuthStateChanged. - أضف اختباراً تلقائياً شاملاً.
⏳ جارٍ التحميل...