Firebase Cloud Messaging (FCM) là dịch vụ gửi thông báo push và tin nhắn đa nền tảng của Google, được thiết kế cho các ứng dụng di động và web. FCM đảm bảo truyền dữ liệu đáng tin cậy giữa máy chủ và thiết bị khách mà không cần duy trì kết nối mạng liên tục. Theo Firebase Documentation, 2026, hơn 300 tỉ tin nhắn đi qua cơ sở hạ tầng FCM mỗi ngày trên toàn thế giới. Dịch vụ hỗ trợ cả thông báo hiển thị tự động lẫn tin nhắn data để truyền dữ liệu ẩn trong nền.
Những điểm chính
Firebase Cloud Messaging là dịch vụ đám mây của Google đảm bảo gửi thông báo push và tin nhắn data giữa máy chủ ứng dụng và thiết bị khách. Dịch vụ này đã thay thế Google Cloud Messaging (GCM) cũ và trở thành giải pháp tiêu chuẩn cho việc gửi push trong hệ sinh thái Firebase. FCM hỗ trợ Android, iOS, Web và Unity, cung cấp giao diện gửi thống nhất bất kể nền tảng mục tiêu.
Dịch vụ cung cấp một số cơ chế gửi tin nhắn, mỗi cơ chế giải quyết một nhiệm vụ cụ thể. Tin nhắn notification được hệ thống tự động hiển thị khi nhận được — nhà phát triển không cần viết mã để hiển thị thông báo. Tin nhắn data truyền tải trọng tải tùy ý dưới dạng cặp khóa-giá trị và được xử lý trong ứng dụng. Tin nhắn kết hợp chứa cả phần hiển thị và ẩn để có tính linh hoạt tối đa.
Triển khai máy chủ push riêng đòi hỏi duy trì kết nối TCP liên tục với mỗi thiết bị, điều này không hiệu quả và không an toàn. FCM sử dụng cơ sở hạ tầng thống nhất của Google duy trì kết nối với hàng tỉ thiết bị cùng lúc. Dịch vụ tự động quản lý các lần thử gửi lại, hàng đợi tin nhắn và cân bằng tải, giải phóng nhà phát triển khỏi việc phải tự giải quyết các tác vụ này.
Kiến trúc FCM gồm ba thành phần chính: máy chủ nhà cung cấp (backend của bạn), máy chủ Firebase Cloud Messaging và ứng dụng khách trên thiết bị. Khi máy chủ gửi tin nhắn, nó đầu tiên đến cơ sở hạ tầng FCM, nơi định tuyến nó đến thiết bị mục tiêu. Nếu thiết bị ngoại tuyến, FCM lưu trữ tin nhắn trong hàng đợi và gửi nó khi kết nối được khôi phục.
Khi khởi chạy lần đầu, ứng dụng gọi Firebase SDK, SDK này đăng ký thiết bị với dịch vụ FCM và nhận được Registration Token duy nhất. Token này là một chuỗi dài khoảng 150 ký tỷ và xác định một thể hiện ứng dụng cụ thể trên một thiết bị cụ thể. Token có thể thay đổi khi cài đặt lại ứng dụng, xóa dữ liệu hoặc khôi phục từ bản sao lưu — nhà phát triển phải xử lý cập nhật token thông qua ủy quyền onNewToken.
Khi máy chủ gửi yêu cầu qua API FCM, tin nhắn trải qua nhiều giai đoạn. Tiếp nhận và xác thực — FCM kiểm tra tính đúng đắn của yêu cầu và sự tồn tại của thiết bị mục tiêu. Hàng đợi — nếu thiết bị không khả dụng, tin nhắn đi vào hàng đợi lưu trữ. Định tuyến — FCM xác định kênh gửi tối ưu (WiFi hoặc dữ liệu di động). Gửi — hệ thống truyền tin nhắn đến ứng dụng mục tiêu. Sau khi gửi thành công, FCM trả về ID tin nhắn cho máy chủ.
Firebase Cloud Messaging hỗ trợ ba loại tin nhắn, mỗi loại có đặc điểm xử lý riêng về phía khách. Tin nhắn notification được xử lý bởi dịch vụ hệ thống Google Play Services trên Android và APNs trên iOS, và tự động hiển thị dưới dạng banner push. Tin nhắn data được gửi trực tiếp đến ứng dụng và xử lý thông qua callback onMessageReceived trên Android và application(_:didReceiveRemoteNotification:) trên iOS.
Tin nhắn notification chứa các trường được xác định trước: title, body, URL hình ảnh và âm thanh thông báo. Hệ thống tự động tạo và hiển thị thông báo trong khay hệ thống, ngay cả khi ứng dụng ở nền hoặc đã bị đóng. Người dùng nhìn thấy banner tiêu chuẩn với tiêu đề và văn bản, và khi nhấn vào, ứng dụng sẽ mở với dữ liệu được gửi trong tải trọng. Nếu ứng dụng đang hoạt động, tin nhắn notification có thể bị chặn và xử lý trong mã.
Tin nhắn data là một tập hợp tùy chỉnh các cặp khóa-giá trị không có trường xác định trước. Tải trọng không được xử lý tự động bởi hệ thống — ứng dụng nhận dữ liệu thô và có thể diễn giải tùy ý. Tin nhắn data được sử dụng để đồng bộ dữ liệu nền, cập nhật bộ nhớ đệm cục bộ, kích hoạt đồng bộ hoặc gửi lệnh mà không hiển thị thông báo. Trên Android, tin nhắn data luôn được gửi, ngay cả khi ứng dụng đã bị đóng hoặc ở nền.
FCM cho phép gửi tin nhắn bao gồm cả phần notification (để hiển thị) và phần data (để xử lý). Tải trọng kết hợp bao gồm cả trường notification được xác định trước và các khóa data tùy ý. Hệ thống hiển thị thông báo từ phần notification, trong khi phần data được truyền đến intent extras của ứng dụng khi mở. Điều này hữu ích cho các kịch bản cần hiển thị thông báo cho người dùng và đồng thời truyền ngữ cảnh để chuyển đến màn hình cụ thể.
| Loại | Tự động hiển thị | Xử lý nền | Ví dụ |
|---|---|---|---|
| Notification | Có, bởi hệ thống | Tự động, không cần mã | Thông báo push chào mừng |
| Data | Không | Qua callback ứng dụng | Đồng bộ dữ liệu nền |
| Kết hợp | Có, phần notification | Phần data khi mở | Thông báo + liên kết đơn hàng |
Tích hợp FCM trong Android bắt đầu bằng cách kết nối Firebase SDK qua tập tin build.gradle ở cấp ứng dụng. Sau khi thêm các phụ thuộc và tập tin google-services.json, ứng dụng tự động nhận được Registration Token, được truyền qua callback FirebaseMessagingService. Để nhận thông báo, cần tạo dịch vụ kế thừa FirebaseMessagingService và đăng ký nó trong AndroidManifest.xml.
Sau khi kết nối Firebase SDK, token thiết bị được tạo tự động mà không cần mã bổ sung. Token có sẵn qua FirebaseMessaging.getInstance().token, trả về Task<String>. Để theo dõi cập nhật token, phương thức onNewToken được ghi đè trong dịch vụ. Token phải được gửi đến máy chủ nhà cung cấp để máy chủ có thể gửi thông báo push đến thiết bị này.
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Tin nhắn mới"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Dịch vụ nhận tin nhắn FCM phải được đăng ký trong AndroidManifest.xml với intent-filter phù hợp. Thêm thẻ service với quyền INTERNET và hành động đã chỉ định. Nếu không đăng ký dịch vụ, các tin nhắn sẽ không được gửi đến ứng dụng trong nền. Để hiển thị thông báo trên Android 13+, cần có quyền runtime POST_NOTIFICATIONS.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Tích hợp FCM trong iOS yêu cầu cấu hình cả trên Apple Push Notification Service (APNs) và trong Firebase Console. Khác với Android nơi FCM quản lý kết nối trực tiếp, trong iOS FCM sử dụng APNs làm lớp truyền tải. Ứng dụng đăng ký nhận thông báo push qua UIApplication.shared.registerForRemoteNotifications, và Firebase SDK chặn token thiết bị nhận được và liên kết nó với Registration Token FCM.
Để FCM hoạt động trên iOS, cần tải khóa hoặc chứng chỉ APNs lên Firebase Console. Khóa APNs là phương thức xác thực hiện đại không cần chứng chỉ (được Apple khuyên dùng). Khóa được tạo trong Apple Developer Portal trong phần Keys và được tải lên cài đặt Cloud Messaging trong Firebase Console. Sau khi cấu hình APNs, ứng dụng yêu cầu quyền thông báo qua UNUserNotificationCenter và đăng ký qua APNs.
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
Để xử lý các thông báo nhận được, triển khai ủy quyền UNUserNotificationCenter. Phương thức willPresent được gọi khi nhận được thông báo trong khi ứng dụng đang hoạt động — tại đây bạn có thể hiển thị thông báo in-app tùy chỉnh hoặc bỏ qua banner hệ thống. Phương thức didReceive được gọi khi người dùng nhấn vào thông báo — tại đây chuyển đến màn hình tương ứng. Đối với tin nhắn data, sử dụng MessagingDelegate, nhận tải trọng khi nhận được tin nhắn FCM trong nền.
Gửi từ máy chủ các tin nhắn FCM được thực hiện qua API HTTP v1 của Firebase Cloud Messaging hoặc API cũ. API HTTP v1 là phương pháp được khuyên dùng, sử dụng xác thực OAuth 2.0 qua Service Account và hỗ trợ tất cả các tính năng FCM hiện đại, bao gồm phân tích gửi và thử nghiệm A/B thông báo. Yêu cầu được gửi bằng phương thức POST đến endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Nội dung yêu cầu chứa đối tượng JSON với thông tin tin nhắn: target (token, chủ đề hoặc điều kiện), notification (để hiển thị) và data (tải trọng tùy chỉnh). Xác thực được thực hiện qua khóa JSON Service Account được tải trong biến môi trường máy chủ. Token truy cập được tạo bằng thư viện google-auth-library. Google khuyên dùng Firebase Admin SDK để tự động quản lý xác thực và thử lại.
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "Giảm 20%", body: "Trên tất cả dịch vụ hôm nay" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Đã gửi thành công:", response)
})
.catch(error => {
console.log("Lỗi gửi:", error)
})
Để gửi thông báo cho một nhóm người dùng, FCM hỗ trợ đăng ký chủ đề. Chủ đề (topic) là một kênh có tên mà ứng dụng khách đăng ký qua FirebaseMessaging.getInstance().subscribeToTopic(). Máy chủ có thể gửi tin nhắn đến một chủ đề và nó sẽ được gửi đến tất cả thiết bị đã đăng ký. Chủ đề phù hợp cho bản tin, thông báo khuyến mại và push dựa trên sự kiện. Để phân khúc chính xác hơn, các điều kiện dựa trên nhiều chủ đề với toán tử logic được sử dụng.
Câu hỏi thường gặp
FCM hoạt động trên Android qua cơ sở hạ tầng riêng của Google, trong khi trên iOS nó sử dụng APNs làm giao thức truyền tải. FCM cung cấp API thống nhất cho cả hai nền tảng, lưu trữ tin nhắn ngoại tuyến tự động và phân tích gửi, những tính năng không có trong APNs thuần túy.
Có, thông qua Firebase Console trong phần Cloud Messaging, bạn có thể gửi thông báo thủ công đến các thiết bị, chủ đề hoặc phân khúc đối tượng đã chọn. Tính năng này phù hợp cho thử nghiệm và gửi một lần, nhưng không thay thế tích hợp máy chủ cho ứng dụng sản xuất.
Đăng ký cập nhật token qua onNewToken trong FirebaseMessagingService (Android) hoặc MessagingDelegate (iOS). Khi token thay đổi, hãy gửi token mới đến máy chủ và xóa token cũ. Máy chủ phải cập nhật cơ sở dữ liệu và ngừng cố gắng gửi đến token cũ.
FCM lưu trữ tin nhắn trong hàng đợi tối đa 28 ngày và gửi nó khi kết nối được khôi phục. Đối với tin nhắn notification, chỉ tin nhắn cuối cùng cho mỗi nhóm thu gọn bị thu gọn. Tin nhắn data được lưu trữ riêng và gửi theo thứ tự gửi mà không thu gọn.
FCM hoàn toàn miễn phí không giới hạn số lượng tin nhắn. Việc sử dụng FCM không bị tính phí trong gói Spark hay gói Blaze. Chỉ có giới hạn về kích thước tải trọng: lên đến 4 KB cho tin nhắn notification và lên đến 2 KB cho tin nhắn data.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm