آموزش ساخت برنامه چت با Firebase Cloud Messaging
امروزه تقریباً تمام اپلیکیشنهای مدرن نیاز به سیستم پیامرسانی و نوتیفیکیشن دارند. یکی از بهترین سرویسها برای ارسال اعلان و پیام لحظهای، سرویس Firebase است که توسط Google توسعه داده شده است.
در این مقاله یاد میگیریم چگونه یک برنامه چت حرفهای با استفاده از:
- Firebase Cloud Messaging (FCM)
- Firebase Authentication
- Firebase Realtime Database یا Firestore
- Android (Kotlin)
- Jetpack Compose
بسازیم.
Firebase Cloud Messaging چیست؟
سرویس FCM امکان ارسال:
- Push Notification
- پیام لحظهای
- پیام گروهی
- اعلانهای پسزمینه
- پیامهای Data
را برای اپلیکیشنهای Android، iOS و Web فراهم میکند.
وبسایت رسمی:
معماری کلی برنامه چت
در این پروژه از ساختار زیر استفاده میکنیم:
User A
↓
Firestore Database
↓
Cloud Function / Server
↓
FCM
↓
User B Notification
امکانات پروژه
در پایان مقاله اپلیکیشن شما دارای قابلیتهای زیر خواهد بود:
- ثبتنام و ورود کاربران
- ارسال پیام متنی
- دریافت پیام لحظهای
- ارسال نوتیفیکیشن هنگام دریافت پیام
- نمایش آنلاین بودن کاربر
- ذخیره توکن FCM
- چت خصوصی
- پشتیبانی از Compose
- معماری MVVM
مرحله 1 — ساخت پروژه Firebase
ابتدا وارد کنسول Firebase شوید:
سپس:
- روی Create Project کلیک کنید.
- نام پروژه را وارد کنید.
- Google Analytics را فعال کنید.
- پروژه را بسازید.
مرحله 2 — اتصال اپلیکیشن اندروید
افزودن Android App
در Firebase:
- گزینه Android را انتخاب کنید.
- Package Name پروژه را وارد کنید.
مثال:
com.example.chatapp

دانلود google-services.json
پس از ثبت اپلیکیشن:
google-services.json
را دانلود کرده و داخل مسیر زیر قرار دهید:
app/google-services.json
مرحله 3 — افزودن Dependency ها
فایل project build.gradle
plugins {
id 'com.google.gms.google-services' version '4.4.2' apply false
}

فایل app/build.gradle
dependencies {
implementation platform('com.google.firebase:firebase-bom:33.1.0')
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-firestore'
implementation 'com.google.firebase:firebase-messaging'
}
مرحله 4 — فعالسازی Authentication
در Firebase Console:
Authentication → Sign-in Method
سپس:
- Email/Password را فعال کنید.
مرحله 5 — ساخت مدل پیام
data class Message(
val senderId: String = "",
val receiverId: String = "",
val text: String = "",
val timestamp: Long = System.currentTimeMillis()
)
مرحله 6 — ارسال پیام به Firestore
ساخت Repository
class ChatRepository {
private val db = FirebaseFirestore.getInstance()
fun sendMessage(message: Message) {
db.collection("messages")
.add(message)
}
}
مرحله 7 — دریافت پیامها به صورت RealTime
fun listenMessages(
chatId: String,
onUpdate: (List<Message>) -> Unit
) {
FirebaseFirestore.getInstance()
.collection("messages")
.addSnapshotListener { value, error ->
if (value != null) {
val messages =
value.toObjects(Message::class.java)
onUpdate(messages)
}
}
}

مرحله 8 — راهاندازی Firebase Cloud Messaging
ساخت Service
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
Log.d("FCM_TOKEN", token)
}
override fun onMessageReceived(
remoteMessage: RemoteMessage
) {
super.onMessageReceived(remoteMessage)
val title =
remoteMessage.notification?.title
val body =
remoteMessage.notification?.body
showNotification(title, body)
}
}
مرحله 9 — ثبت Service در Manifest
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
مرحله 10 — دریافت توکن FCM
FirebaseMessaging.getInstance().token
.addOnCompleteListener {
if (it.isSuccessful) {
val token = it.result
Log.d("TOKEN", token)
}
}
مرحله 11 — ذخیره توکن کاربران
هر کاربر باید توکن اختصاصی خودش را داخل دیتابیس ذخیره کند.
مثال:
users
uid
name
fcmToken
مرحله 12 — ارسال Push Notification
روش حرفهای
بهترین روش استفاده از:
- Cloud Functions
- یا Backend اختصاصی
است.
نمونه ارسال پیام با HTTP API
{
"to":"FCM_TOKEN",
"notification":{
"title":"پیام جدید",
"body":"سلام، خوبی؟"
}
}
نمونه کد Retrofit
interface NotificationApi {
@POST("fcm/send")
suspend fun sendNotification(
@Body body: RequestBody
)
}
مرحله 13 — ساخت Notification
private fun showNotification(
title: String?,
body: String?
) {
val builder =
NotificationCompat.Builder(this, "chat")
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setPriority(
NotificationCompat.PRIORITY_HIGH
)
NotificationManagerCompat.from(this)
.notify(1, builder.build())
}
مرحله 14 — ساخت Notification Channel
برای Android 8+ ضروری است:
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"chat",
"Chat Notification",
NotificationManager.IMPORTANCE_HIGH
)
val manager =
getSystemService(
NotificationManager::class.java
)
manager.createNotificationChannel(channel)
}
مرحله 15 — رابط کاربری چت با Compose
صفحه چت
@Composable
fun ChatScreen(
messages: List<Message>
) {
LazyColumn {
items(messages) { message ->
Text(
text = message.text
)
}
}
}
مرحله 16 — ارسال پیام
Button(
onClick = {
repository.sendMessage(
Message(
senderId = myId,
receiverId = otherId,
text = text
)
)
}
) {
Text("ارسال")
}

مرحله 17 — معماری پیشنهادی
ساختار حرفهای پروژه:
data/
domain/
presentation/
di/
repository/
network/
مرحله 18 — امنیت Firestore
قوانین امنیتی
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{document} {
allow read, write:
if request.auth != null;
}
}
}
مرحله 19 — قابلیتهای پیشرفته
میتوانید امکانات زیر را اضافه کنید:
- ارسال عکس
- Voice Message
- Seen Message
- Typing Status
- Online Status
- گروه چت
- تماس صوتی
- تماس تصویری
- رمزنگاری پیامها
- حذف پیام
- Reply Message
مرحله 20 — استفاده از Cloud Functions
برای ارسال اتوماتیک نوتیفیکیشن:
Firestore Trigger
↓
Cloud Function
↓
FCM Send
مستندات رسمی:
نکات مهم Performance
1. Paging
برای جلوگیری از مصرف زیاد حافظه:
.limit(30)
2. ذخیره Local Cache
از:
- Room Database
استفاده کنید.
3. استفاده از WorkManager
برای Sync در پسزمینه.
مزایای استفاده از Firebase
- رایگان برای شروع
- راهاندازی سریع
- RealTime
- مقیاسپذیری بالا
- امنیت مناسب
- بدون نیاز به سرور اختصاصی
معایب Firebase
- وابستگی به Google
- محدودیت پلن رایگان
- هزینه بالا در مقیاس بزرگ
- پیچیدگی Query ها در Firestore
جمعبندی
در این مقاله یاد گرفتیم چگونه یک سیستم چت حرفهای با استفاده از:
- Firebase
- Firebase Cloud Messaging
- Firestore
- Kotlin
- Jetpack Compose
پیادهسازی کنیم.