Đăng ký Chủ đề trong Thông báo Push — Khái niệm, Cách hoạt động và Cấu hình

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

Đăng ký Chủ đề là cơ chế của Firebase Cloud Messaging cho phép nhóm các thiết bị theo sở thích và gửi thông báo đến toàn bộ danh mục người đăng ký. Thay vì gửi đến hàng nghìn Registration Token riêng lẻ, chỉ cần gửi một tin nhắn đến một chủ đề. Theo Firebase, 2025, Đăng ký Chủ đề được sử dụng trong các ứng dụng tin tức, chương trình phát sóng thể thao và chiến dịch tiếp thị để phân phối thông báo trên quy mô lớn.

Những điểm chính

  • Đăng ký Chủ đề — đăng ký thiết bị vào kênh FCM theo chủ đề để nhận thông báo nhóm.
  • Một thiết bị có thể đăng ký không giới hạn số lượng chủ đề.
  • Đăng ký được quản lý cả từ phía máy khách và máy chủ thông qua FCM HTTP API.
  • Chủ đề được tạo tự động khi đăng ký lần đầu — không cần cấu hình trước.
  • Để gửi đến một chủ đề, chỉ cần chỉ định tên của nó thay vì danh sách token.

Đăng ký Chủ đề trong FCM là gì

Đăng ký Chủ đề là cơ chế phân phối thông báo push nhóm, trong đó các thiết bị đăng ký vào các kênh có tên (chủ đề) và nhận tin nhắn được gửi đến các kênh đó. Mỗi chủ đề được xác định bằng tên chuỗi, như news_sports hoặc weather_alerts.

Nguyên lý hoạt động của chủ đề

Khi một thiết bị đăng ký một chủ đề, FCM thêm Registration Token của nó vào danh sách người nhận của chủ đề đó. Khi gửi tin nhắn đến chủ đề, FCM tự động định tuyến một bản sao đến mọi thiết bị đã đăng ký. Firebase không giới hạn số lượng đăng ký trên mỗi thiết bị — ứng dụng có thể đăng ký người dùng vào hàng chục chủ đề cùng lúc.

Chủ đề so với gửi riêng lẻ

Ưu điểm chính của chủ đề là khả năng mở rộng. Để gửi thông báo cho một triệu người dùng, chỉ cần một yêu cầu HTTP đến FCM với tên chủ đề. Với gửi riêng lẻ, sẽ cần một triệu yêu cầu hoặc gửi theo lô lên đến 500 token mỗi lần. Chủ đề cũng đơn giản hóa logic máy chủ — không cần lưu trữ danh sách token cho từng danh mục.

Tham sốGửi riêng lẻĐăng ký Chủ đề
Số lượng yêu cầuMột mỗi token hoặc lô đến 500Một mỗi chủ đề
Quản lý đăng kýTrên máy chủ (danh sách token)Trên máy khách hoặc máy chủ
Nhóm độngCần cập nhật danh sáchTự động qua đăng ký
Giới hạn người nhậnLên đến 500 mỗi yêu cầuKhông giới hạn

Ví dụ sử dụng chủ đề

Đăng ký Chủ đề được sử dụng rộng rãi trong các ứng dụng tin tức để phân loại nội dung — đăng ký các chủ đề “Thể thao”, “Chính trị”, “Công nghệ” cho phép phân phối thông báo phù hợp. Trong thương mại điện tử, chủ đề được sử dụng cho thông báo về giảm giá trong các danh mục sản phẩm cụ thể. Trong ứng dụng nhắn tin và mạng xã hội, chủ đề được sử dụng cho thông báo về sự kiện trong nhóm.

Giới hạn và hạn mức FCM

Firebase áp đặt các hạn chế khi làm việc với chủ đề. Một ứng dụng có thể có tối đa 2000 chủ đề. Mỗi thiết bị có thể đăng ký tối đa 2000 chủ đề. Tần suất các thao tác đăng ký/hủy đăng ký cũng bị giới hạn — không quá 3000 thao tác mỗi phút cho mỗi dự án. Vượt quá các giới hạn này dẫn đến khóa tạm thời. Đối với các dự án có số lượng lớn chủ đề, nên sử dụng điều kiện (condition) thay vì chủ đề — FCM hỗ trợ biểu thức logic để nhắm mục tiêu.

Cách hoạt động của đăng ký chủ đề

Quy trình Đăng ký Chủ đề bao gồm ba giai đoạn: khởi tạo đăng ký trên máy khách, đăng ký trong cơ sở hạ tầng FCM và xác nhận thao tác. Sau khi đăng ký thành công, thiết bị bắt đầu nhận tin nhắn được gửi đến chủ đề đó.

Vòng đời đăng ký

Khi máy khách gọi phương thức subscribeToTopic(), Firebase SDK gửi yêu cầu đến máy chủ FCM. Máy chủ xác thực thao tác và thêm token thiết bị vào danh sách người đăng ký của chủ đề. FCM trả về cho máy khách xác nhận đăng ký thành công. Kể từ thời điểm này, tất cả tin nhắn đến chủ đề này sẽ được gửi đến thiết bị.

Tạo chủ đề tự động

Không cần tạo chủ đề trước trong bảng điều khiển Firebase. Khi thiết bị đầu tiên đăng ký một chủ đề có tên news_promo, FCM tự động tạo ra nó. Nếu thiết bị cuối cùng hủy đăng ký, chủ đề vẫn tồn tại trong hệ thống nhưng không hoạt động và tiếp tục hoạt động khi có đăng ký mới.

Đăng ký chủ đề trên Android

Trên Android, việc đăng ký và hủy đăng ký chủ đề được thực hiện qua FirebaseMessaging SDK. Các phương thức subscribeToTopic() và unsubscribeFromTopic() nhận tên chủ đề làm tham số. Các thao tác không đồng bộ và yêu cầu xử lý kết quả.

Đăng ký chủ đề cơ bản

Để đăng ký, chỉ cần gọi subscribeToTopic() với tên chủ đề mục tiêu. Firebase SDK tự động quản lý các yêu cầu mạng và thử lại khi thất bại. Nên đăng ký chủ đề sau khi nhận được Registration Token thành công.

kotlin
class TopicSubscriber(private val context: Context) {

    fun subscribeToNewsTopic() {
        FirebaseMessaging.getInstance()
            .subscribeToTopic("news_latest")
            .addOnCompleteListener { task ->
                val msg = if (task.isSuccessful) {
                    "Subscribed to news topic"
                } else {
                    "Subscription failed"
                }
                Log.d("FCM", msg)
            }
    }

    fun unsubscribeFromNewsTopic() {
        FirebaseMessaging.getInstance()
            .unsubscribeFromTopic("news_latest")
            .addOnCompleteListener { task ->
                Log.d("FCM", "Đã hủy đăng ký: ${task.isSuccessful}")
            }
    }
}

Quản lý nhiều đăng ký

Trong ứng dụng thực tế, người dùng có thể đăng ký nhiều danh mục. Để quản lý thuận tiện, hãy tạo một lớp quản lý đồng bộ hóa trạng thái đăng ký với máy chủ. Khi người dùng đăng nhập, khôi phục đăng ký của họ từ hồ sơ.

kotlin
class SubscriptionManager(private val context: Context) {

    private val fcm = FirebaseMessaging.getInstance()

    suspend fun syncSubscriptions(topics: List<String>) {
        topics.forEach { topic ->
            fcm.subscribeToTopic(topic).await()
        }
    }

    suspend fun removeAllSubscriptions() {
        val savedTopics = getSavedTopics()
        savedTopics.forEach { topic ->
            fcm.unsubscribeFromTopic(topic).await()
        }
    }

    private fun getSavedTopics(): List<String> {
        return listOf("news_latest", "promotions", "updates")
    }
}

Đăng ký chủ đề trên iOS

Trên iOS, quy trình đăng ký chủ đề tương tự Android về mặt logic nhưng sử dụng Swift Firebase Messaging API. Các phương thức subscribe và unsubscribe được gọi trên phiên bản Messaging và cũng không đồng bộ.

Triển khai đăng ký trên iOS

Để đăng ký một chủ đề trong ứng dụng iOS, hãy sử dụng phương thức Messaging.subscribe(). Điều quan trọng là gọi đăng ký sau khi khởi tạo Firebase và nhận được Registration Token. Apple khuyến nghị yêu cầu quyền thông báo trước khi đăng ký chủ đề.

swift
import FirebaseMessaging

class PushTopicManager {

    func subscribeToTopic(topic: String) {
        Messaging.messaging().subscribe(toTopic: topic) { error in
            if let error = error {
                Log.e("FCM", "Lỗi đăng ký: \(error)")
            } else {
                Log.d("FCM", "Đã đăng ký \(topic)")
            }
        }
    }

    func unsubscribeFromTopic(topic: String) {
        Messaging.messaging().unsubscribe(fromTopic: topic) { error in
            if let error = error {
                Log.e("FCM", "Lỗi hủy đăng ký: \(error)")
            }
        }
    }
}

Đặc điểm của đăng ký trên iOS

Trên iOS, đăng ký chủ đề cũng được gắn với Registration Token mà Firebase nhận từ APNs. Nếu token APNs thay đổi (ví dụ: sau khi khôi phục thiết bị), Firebase tự động chuyển đăng ký sang token mới. Tuy nhiên, trong một số trường hợp hiếm, có thể cần đăng ký lại sau khi cập nhật Registration Token.

Quản lý đăng ký từ máy chủ

Quản lý từ máy chủ đăng ký cho phép đăng ký và hủy đăng ký thiết bị mà không cần can thiệp ứng dụng khách. Điều này hữu ích cho quản trị, thử nghiệm A/B và quản lý đăng ký ở phía backend.

FCM HTTP API để quản lý đăng ký

Firebase cung cấp REST API để quản lý đăng ký hàng loạt. Điểm cuối /v1/projects/{project_id}/subscriptions cho phép đăng ký tối đa 1000 thiết bị trong một yêu cầu. API sử dụng Registration Token của thiết bị để nhận dạng.

js
const admin = require("firebase-admin")

async function subscribeUsersToTopic(tokens, topic) {
    try {
        const response = await admin
            .messaging()
            .subscribeToTopic(tokens, topic)
        Log.info(`Success: ${response.successCount}`)
        Log.info(`Failures: ${response.failureCount}`)
    } catch (error) {
        Log.error("Lỗi đăng ký", error)
    }
}

Tình huống sử dụng quản lý từ máy chủ

Quản lý đăng ký từ máy chủ được sử dụng trong một số tình huống. Khi người dùng đăng ký, máy chủ tự động đăng ký họ vào các chủ đề cơ bản. Khi tùy chọn thay đổi trên phiên bản web, máy chủ đồng bộ hóa đăng ký trên thiết bị di động. Quản trị viên có thể đăng ký thiết bị thử nghiệm vào các chủ đề nội bộ để gỡ lỗi. Đối với các thao tác hàng loạt, FCM cung cấp phương thức Instance Group, cho phép quản lý đăng ký của một nhóm thiết bị thông qua một mã định danh nhóm duy nhất.

Giám sát trạng thái đăng ký

Firebase không cung cấp API tích hợp để kiểm tra đăng ký hiện tại của thiết bị. Các nhà phát triển nên duy trì cơ sở dữ liệu đăng ký riêng ở phía máy chủ. Mỗi lần khởi chạy ứng dụng, máy khách đồng bộ hóa đăng ký của mình với máy chủ bằng cách gửi danh sách chủ đề đang hoạt động. Điều này giúp xác định sự mất đồng bộ và khôi phục đăng ký nếu cần. Để kiểm toán, hãy sử dụng nhật ký Firebase Cloud Functions — mỗi thao tác đăng ký/hủy đăng ký có thể được ghi lại.

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

Có thể tạo bao nhiêu chủ đề trong một dự án Firebase?

Số lượng chủ đề tối đa là 2000 trên mỗi ứng dụng. Nếu cần nhiều hơn, hãy cân nhắc sử dụng Nhóm thiết bị hoặc gửi riêng lẻ theo token.

Làm cách nào để biết thiết bị đã đăng ký những chủ đề nào?

Firebase không cung cấp API trực tiếp để lấy danh sách đăng ký của thiết bị. Các nhà phát triển nên lưu trữ trạng thái đăng ký trên máy chủ riêng của họ và đồng bộ hóa với máy khách.

Điều gì xảy ra khi hủy đăng ký một chủ đề không tồn tại?

FCM trả về kết quả thành công. Firebase xử lý việc hủy đăng ký chủ đề không tồn tại như một thao tác no-op — không có lỗi nào được tạo ra, trạng thái không thay đổi.

Tôi có thể gửi thông báo đến một chủ đề từ bảng điều khiển Firebase không?

Có, trong bảng điều khiển Firebase, phần Cloud Messaging, bạn có thể chọn một chủ đề làm đối tượng mục tiêu và gửi thông báo thử nghiệm hoặc sản xuất qua giao diện web.

Đăng ký chủ đề có hiệu lực nhanh như thế nào?

Thông thường, đăng ký có hiệu lực trong vòng vài giây. Tuy nhiên, trong một số trường hợp hiếm, độ trễ có thể lên tới 30–60 giây do sự lan truyền qua các máy chủ FCM.

Tổng kết

  • Đăng ký Chủ đề là cơ chế phân phối thông báo push nhóm qua Firebase Cloud Messaging.
  • Việc đăng ký được thực hiện từ máy khách bằng các phương thức subscribeToTopic() (Android) hoặc subscribe() (iOS).
  • Một thiết bị có thể đăng ký tối đa 2000 chủ đề cùng lúc.
  • API máy chủ cho phép quản lý đăng ký của tối đa 1000 thiết bị trong một yêu cầu.
  • Chủ đề được tạo tự động khi đăng ký lần đầu và không cần cấu hình trước.
  • Đăng ký Chủ đề được ưu tiên hơn gửi riêng lẻ khi làm việc với đối tượng lớn.
  • Đối với thông báo quan trọng, hãy kết hợp chủ đề với gửi riêng lẻ để đảm bảo phân phố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