FCM — nó là gì, nguyên tắc của Firebase Cloud Messaging trong phát triển

Tác giả: IT Sectr Đã đăng: 2026-03-19 Thời gian đọc: 8 phút

FCM (Firebase Cloud Messaging) là dịch vụ đa nền tảng của Google để gửi thông báo push và truyền dữ liệu giữa máy chủ và ứng dụng di động. Nó hỗ trợ Android, iOS và các nền tảng web thông qua một API duy nhất. Theo Tài liệu Firebase, FCM xử lý hơn 1 tỷ tin nhắn mỗi ngày trên toàn thế giới.

Những điểm chính

  • FCM là dịch vụ đa nền tảng của Google để gửi thông báo push và dữ liệu
  • Kiến trúc — máy khách nhận mã thông báo đăng ký, máy chủ gửi tin nhắn qua Firebase Connection Server
  • Loại tin nhắn — notification (hiển thị tự động) và data (xử lý đầy đủ trong ứng dụng)
  • Phân phối — FCM sử dụng kết nối liên tục hoặc hàng đợi ưu tiên để đảm bảo phân phối
  • Tích hợp — thiết lập qua Firebase SDK, cấu hình google-services.json và cấu hình máy chủ

FCM là gì?

Firebase Cloud Messaging (FCM) là dịch vụ đám mây của Google đảm bảo phân phối đáng tin cậy các thông báo push và tin nhắn dữ liệu đến thiết bị di động. Trước đây được gọi là Google Cloud Messaging (GCM), FCM đã trở thành công cụ chính cho thông báo đa nền tảng trong hệ sinh thái Firebase.

FCM tự động chọn kênh phân phối tối ưu tùy theo nền tảng: trên Android, nó sử dụng kết nối FCM riêng; trên iOS, nó sử dụng APNS (thông qua cổng FCM). Nhà phát triển không cần triển khai hai tích hợp khác nhau — FCM xử lý định tuyến.

Dịch vụ cung cấp một API REST thống nhất và Admin SDK để gửi tin nhắn. Điều này cho phép gửi thông báo từ phía máy chủ mà không bị ràng buộc với một nền tảng người nhận cụ thể.

Các khả năng chính của FCM

FCM hỗ trợ nhiều chế độ phân phối: tin nhắn đơn đến một thiết bị cụ thể, phát nhóm theo chủ đề và gửi phân khúc theo điều kiện. Gửi theo lịch trình và kiểm tra A/B nội dung thông báo cũng có sẵn.

Firebase Cloud Messaging hoạt động như thế nào?

Kiến trúc FCM dựa trên ba thành phần: ứng dụng khách, Firebase Connection Server và máy chủ ứng dụng. Máy khách đăng ký với FCM khi khởi động và nhận được mã thông báo đăng ký duy nhất — một chuỗi xác định thiết bị cho ứng dụng cụ thể.

Máy chủ ứng dụng gửi yêu cầu đến FCM REST API, chỉ định mã thông báo người nhận hoặc chủ đề. Firebase Connection Server phân phối tin nhắn bằng kết nối XMPP liên tục hoặc yêu cầu HTTP. Nếu thiết bị ngoại tuyến, tin nhắn được xếp hàng đợi và phân phối khi kết nối được khôi phục.

FCM đảm bảo phân phối bằng cách sử dụng hàng đợi ưu tiên và cơ chế xác nhận. Trên Android, tin nhắn được lưu trữ tối đa 28 ngày trong hàng đợi; trên iOS, tối đa 4 tuần (qua APNS). Sau ngày hết hạn, tin nhắn bị xóa mà không có thông báo.

Vòng đời mã thông báo FCM

Mã thông báo đăng ký có thể thay đổi trong một số trường hợp: khi khôi phục dữ liệu ứng dụng, khi cập nhật lên phiên bản mới hoặc khi xóa bộ nhớ đệm. Ứng dụng phải triển khai FirebaseMessagingService.onNewToken để xử lý cập nhật mã thông báo và đồng bộ hóa với máy chủ.

Các loại tin nhắn FCM

FCM hỗ trợ hai loại tải trọng: notification và data. Mỗi loại xác định cách thức và thời điểm tin nhắn được xử lý trên thiết bị người nhận.

Tham sốNotificationData
Hiển thị tự độngCó, nếu ứng dụng ở nềnKhông, chỉ trong ứng dụng
Xử lýHệ thống/NOS — ở nền; ứng dụng — ở tiền cảnhLuôn trong ứng dụng (onMessageReceived)
Kích thước tối đa4 KB4 KB
Khóa tùy chỉnhGiới hạn ở các trường được xác định trướcBất kỳ cặp khóa-giá trị nào
Yêu cầu CollapseKeyTùy chọnTùy chọn để nhóm

Trong thực tế, khuyến nghị sử dụng tin nhắn data khi ứng dụng cần xử lý thông báo đầy đủ trong onMessageReceived. Tin nhắn notification phù hợp cho các tình huống đơn giản nơi hiển thị hệ thống là đủ.

FCM và APNS: so sánh phương pháp

FCM và APNS là hai dịch vụ phân phối push chính. FCM hoạt động như một cổng đa nền tảng, trong khi APNS chỉ dành cho hệ sinh thái Apple. Sự khác biệt chính của chúng nằm ở kiến trúc, yêu cầu chứng chỉ và cơ chế định tuyến.

  • Đa nền tảng — FCM hỗ trợ Android, iOS, Web; APNS chỉ iOS, macOS, watchOS, tvOS
  • Xác thực — FCM sử dụng Server Key hoặc OAuth 2.0; APNS sử dụng chứng chỉ hoặc Token-based (khóa p8)
  • Ưu tiên tin nhắn — FCM có normal/high; APNS có immediate/power-efficient consideration
  • Chủ đề — FCM hỗ trợ đăng ký chủ đề mặc định; APNS yêu cầu logic máy chủ

Sự lựa chọn giữa FCM và APNS trực tiếp phụ thuộc vào kiến trúc dự án. Đối với các ứng dụng đa nền tảng, FCM là lựa chọn tối ưu. Đối với các dự án chỉ iOS, làm việc trực tiếp với APNS qua API HTTP/2 là chấp nhận được.

Khi nào chọn FCM thay vì APNS trực tiếp

FCM phù hợp khi dự án sử dụng cả Android và iOS đồng thời, cũng như khi cần phân tích Firebase, kiểm tra A/B thông báo hoặc chủ đề mà không cần logic máy chủ. APNS trực tiếp được ưu tiên cho các ứng dụng chỉ iOS với sự phụ thuộc tối thiểu và yêu cầu độ trễ phân phối nghiêm ngặt.

Tích hợp FCM trong Android

Để kết nối FCM với ứng dụng Android, bạn cần thêm Firebase SDK và cấu hình google-services.json trong thư mục gốc của dự án. Sau khi đăng ký mã thông báo, ứng dụng đã sẵn sàng nhận tin nhắn qua FirebaseMessagingService.

kotlin
// build.gradle (Module)
dependencies {
    implementation("com.google.firebase:firebase-messaging:24.1.0")
}

// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

class MyFirebaseMessagingService :
    FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        message.notification?.let {
            showNotification(it.title, it.body)
        }
    }
}

Sau khi thiết lập, ứng dụng tự động nhận được mã thông báo FCM khi khởi chạy lần đầu. Mã thông báo phải được gửi đến máy chủ ứng dụng để gửi thông báo tiếp theo đến thiết bị này.

Thiết lập kênh cho thông báo FCM

Trên Android 8+, trước khi gửi thông báo FCM với hiển thị tự động, bạn phải tạo NotificationChannel. Tin nhắn notification FCM sử dụng ID kênh mặc định, nhưng khuyến nghị tạo kênh tùy chỉnh thông qua FirebaseMessagingService khi nhận được tin nhắn đầu tiên. Tin nhắn data không yêu cầu kênh — ứng dụng tự quyết định cách và thời điểm hiển thị thông báo.

Tích hợp FCM trong iOS

Trên iOS, FCM đóng vai trò trung gian giữa máy chủ ứng dụng và APNS. Firebase nhận tin nhắn từ máy chủ, bọc nó ở định dạng APNS và gửi qua cổng Apple. Nhà phát triển cần cấu hình khóa hoặc chứng chỉ APNS trong bảng điều khiển Firebase.

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        UNUserNotificationCenter.current().delegate = self

        Messaging.messaging().delegate = self
        return true
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        _ messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
    }
}

Trên iOS, việc đăng ký APNS diễn ra không đồng bộ. FCM SDK tự động lấy mã thông báo APNS và chuyển nó đến máy chủ Firebase. didReceiveRegistrationToken kích hoạt khi nhận được mã thông báo FCM mới, kết hợp mã thông báo APNS với định danh dự án.

Kiểm tra trạng thái phân phối

FCM cung cấp bảng điều khiển Firebase để giám sát phân phối: số lượng thông báo đã gửi, đã nhận và đã hiển thị. Một callback trạng thái cũng có sẵn qua Firebase Cloud Functions để theo dõi lỗi phân phối ở phía máy chủ. Các chỉ số chính: số lần hiển thị và số lần mở thông báo.

Các phương pháp hay nhất về FCM

Khi làm việc với FCM, điều quan trọng là chọn đúng loại tin nhắn cho từng tình huống. Đối với thông báo đơn giản với hiển thị tự động, hãy sử dụng tin nhắn notification. Đối với trường hợp ứng dụng cần xử lý dữ liệu trước khi hiển thị, hãy sử dụng tin nhắn data. Loại hỗn hợp (notification + data) chỉ được khuyến nghị nếu dữ liệu cần cho phân tích chứ không phải để thay đổi nội dung thông báo.

Quản lý mã thông báo tập trung. Lưu trữ mã thông báo hiện tại trên máy chủ trong bảng liên kết với người dùng và nền tảng. Triển khai cơ chế dọn dẹp mã thông báo cũ: khi gặp lỗi NotRegistered hoặc InvalidRegistration, hãy xóa mã thông báo khỏi cơ sở dữ liệu. Mã thông báo hiếm khi thay đổi, nhưng việc dọn dẹp chúng là yếu tố bắt buộc của hỗ trợ FCM.

Sử dụng khóa thu gọn (collapseKey) để nhóm tin nhắn. Nếu bạn đang gửi nhiều thông báo cùng loại (ví dụ: "cập nhật tỷ giá hối đoái"), hãy đặt cùng một collapseKey. FCM sẽ chỉ phân phối tin nhắn cuối cùng từ nhóm, giảm tải thiết bị và tránh làm người dùng bị quá tải thông báo.

Giám sát phân phối qua Firebase Console và Cloud Functions. Phân tích FCM hiển thị số lượng thông báo đã gửi, đã nhận và đã hiển thị. Nếu tỷ lệ hiển thị dưới 70%, hãy kiểm tra cài đặt kênh trên Android và cài đặt quyền trên iOS. Phân phối thấp thường liên quan đến các kênh bị vô hiệu hóa hoặc cấm thông báo. Thứ năm: sử dụng kiểm tra A/B của Firebase để tối ưu hóa văn bản thông báo và thời gian gửi — điều này làm tăng tỷ lệ mở lên 15–25% theo dữ liệu Firebase.

Các câu hỏi thường gặp

Sự khác biệt giữa FCM và GCM là gì?

FCM là bản cập nhật tiến hóa của GCM (Google Cloud Messaging). FCM cung cấp thiết lập đơn giản hóa qua Firebase Console, phân tích tích hợp, chủ đề và hỗ trợ Web Push. GCM đã chính thức ngừng hoạt động vào tháng 4 năm 2019, tất cả các dự án phải được di chuyển sang FCM.

Có thể gửi bao nhiêu tin nhắn qua FCM miễn phí?

Firebase Cloud Messaging là dịch vụ miễn phí không có giới hạn về số lượng tin nhắn. Chỉ tính phí khi sử dụng các dịch vụ Firebase khác như Cloud Functions hoặc Firestore. FCM không yêu cầu đăng ký Spark hoặc Blaze để gửi thông báo cơ bản.

Tại sao mã thông báo FCM có thể thay đổi?

Mã thông báo FCM thay đổi khi: khôi phục ứng dụng từ bản sao lưu, xóa dữ liệu ứng dụng, cài đặt lại, cập nhật lên phiên bản mới với Sender ID đã thay đổi. Luôn xử lý onNewToken trong FirebaseMessagingService để gửi mã thông báo mới đến máy chủ.

FCM có hoạt động ở Trung Quốc không?

FCM của Google bị chặn ở Trung Quốc. Để phân phối thông báo tại Trung Quốc, các dịch vụ thay thế được sử dụng: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Để phân phối đa nền tảng, các dịch vụ đa nhà cung cấp như Getui được sử dụng.

Làm thế nào để kiểm tra FCM đã được cấu hình đúng chưa?

Sử dụng bảng điều khiển Firebase tích hợp: chọn "Cloud Messaging" — "Send Test Message". Nhập mã thông báo kiểm tra và gửi tin nhắn notification. Thông báo sẽ xuất hiện trên thiết bị. Bạn cũng có thể giám sát nhật ký FirebaseMessagingService.onMessageReceived.

Tóm tắt

  • FCM là dịch vụ đám mây đa nền tảng của Google để phân phối thông báo push và dữ liệu
  • Mã thông báo là định danh thiết bị duy nhất được sử dụng để gửi tin nhắn mục tiêu
  • Notification là loại tin nhắn được hệ thống tự động hiển thị ở chế độ nền
  • Data là loại tin nhắn với tải trọng đầy đủ chỉ được xử lý trong ứng dụng
  • Chủ đề là cơ chế phát nhóm dựa trên đăng ký chủ đề mà không lưu trữ mã thông báo trên máy chủ
  • Cổng APNS — đối với iOS, FCM đóng vai trò trung gian, chuyển tiếp tin nhắn qua APNS
  • Miễn phí — FCM không tính phí cho số lượng tin nhắn đã gửi

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.

Thảo luận dự án

Đọc thêm