Registration Token trong thông báo push: nó là gì, cách lấy và cập nhật

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

Registration Token là mã định danh thiết bị duy nhất mà Firebase Cloud Messaging (FCM) sử dụng để gửi thông báo push. Mỗi ứng dụng trên mỗi thiết bị nhận token riêng của nó, nếu không có token thì việc gửi thông báo là không thể. Theo Firebase, 2025, Registration Token được tạo tự động khi ứng dụng khởi chạy lần đầu và có thể thay đổi trong những điều kiện nhất định.

Những điểm chính

  • Registration Token là một chuỗi xác định một phiên bản ứng dụng trên một thiết bị cụ thể cho FCM.
  • Token được tạo tự động khi khởi chạy lần đầu hoặc sau khi xóa dữ liệu ứng dụng.
  • FCM sử dụng token để định tuyến thông báo push đến đúng thiết bị.
  • Token có thể thay đổi — ứng dụng phải đăng ký nhận cập nhật qua onNewToken.
  • Để gửi thông báo, máy chủ phải lưu trữ token hiện tại của tất cả thiết bị.

Registration Token là gì

Registration Token là một chuỗi duy nhất dài tới 4096 ký tự mà Firebase Cloud Messaging gán cho mỗi phiên bản ứng dụng. Token được hình thành dựa trên ID ứng dụng, ID thiết bị và tài khoản Google trên thiết bị.

Cấu trúc và mục đích của token

Registration Token bao gồm một chuỗi ký tự ngẫu nhiên được mã hóa ở định dạng Base64. FCM sử dụng token này như một địa chỉ gửi — máy chủ gửi thông báo đến token và FCM định tuyến nó đến thiết bị cụ thể. Không có token, không thể gửi thông báo push đến một người dùng cụ thể.

Sự khác biệt so với các định danh khác

Registration Token không nên nhầm lẫn với Device ID (IMEI) hoặc Advertising ID. Device ID là định danh phần cứng của thiết bị, trong khi Advertising ID được sử dụng cho mục đích quảng cáo. Registration Token gắn liền với tổ hợp ứng dụng và thiết bị, và một thiết bị có thể có nhiều token cho các ứng dụng khác nhau.

Định danhMục đíchTính thay đổi
Registration TokenGửi thông báo push FCMCó thể thay đổi
Device ID (IMEI)Định danh phần cứngVĩnh viễn
Advertising IDQuảng cáo nhắm mục tiêuCó thể đặt lại
Instance IDCơ chế Firebase cũThay đổi khi xóa

Khi nào token bị coi là không hợp lệ

FCM có thể coi Registration Token là không hợp lệ trong một số trường hợp. Nếu ứng dụng bị xóa khỏi thiết bị, token sẽ tự động bị thu hồi. Khi khôi phục dữ liệu từ bản sao lưu trên thiết bị mới, token cũ sẽ ngừng hoạt động. Firebase cũng trả về trạng thái UNREGISTERED khi cố gắng gửi thông báo đến token đã lỗi thời.

Cách FCM gán Registration Token

Firebase Cloud Messaging tạo Registration Token khi ứng dụng được khởi chạy lần đầu và phương thức getToken() được gọi. Quá trình này bao gồm việc xác minh thông tin đăng nhập Google Play Services và đăng ký ứng dụng trong cơ sở hạ tầng Firebase.

Quy trình đăng ký thiết bị

Khi thiết bị chạy ứng dụng có tích hợp FCM SDK lần đầu tiên, những điều sau sẽ xảy ra. Firebase SDK kiểm tra sự hiện diện của Google Play Services trên thiết bị. Sau đó, SDK gửi yêu cầu đến máy chủ Firebase, truyền ID ứng dụng và thông tin thiết bị. Máy chủ Firebase tạo token mới và trả về cho ứng dụng.

Cơ chế nội bộ của FCM

FCM sử dụng kiến trúc dựa trên các kết nối dài hạn. Sau khi nhận được Registration Token, thiết bị thiết lập kết nối liên tục với máy chủ Firebase qua giao thức STOMP trên Android hoặc kênh APNs trên iOS. Khi máy chủ gửi thông báo đến token, FCM tìm thiết bị theo token và gửi tải trọng.

Điều kiện tạo lại token

Registration Token có thể được FCM tạo lại trong các trường hợp sau. Khi khôi phục ứng dụng từ bản sao lưu trên thiết bị mới. Khi xóa và cài đặt lại ứng dụng. Khi xóa dữ liệu ứng dụng qua cài đặt hệ thống. Khi đăng nhập vào tài khoản Google khác trên thiết bị. Firebase khuyến nghị luôn xử lý callback onNewToken để theo dõi các thay đổi.

Lấy Registration Token trên Android

Trên Android, Registration Token được lấy qua Firebase Messaging SDK. Quy trình khác nhau tùy theo phiên bản SDK — các phiên bản mới hơn sử dụng API FirebaseInstallations thay vì FirebaseInstanceId cũ.

Phương pháp hiện đại qua FirebaseInstallations

Bắt đầu từ phiên bản 21.0.0 của Firebase SDK, phương thức getToken() được gọi qua FirebaseMessaging. Cách tiếp cận này tự động quản lý vòng đời token và đăng ký nhận các bản cập nhật của nó.

kotlin
class MyFirebaseMessagingService : FirebaseMessagingService() {

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

    private fun sendRegistrationToServer(token: String) {
        // Gửi token đến máy chủ
        Log.d("FCM", "New token: $token")
    }

    init {
        FirebaseMessaging.getInstance()
            .getToken()
            .addOnCompleteListener { task ->
                if (!task.isSuccessful) {
                    Log.w("FCM", "Lấy token FCM thất bại")
                    return@addOnCompleteListener
                }
                val token = task.result
                sendRegistrationToServer(token)
            }
    }
}

Xử lý token trong Activity hoặc ViewModel

Trong một số trường hợp, token không cần trong dịch vụ mà cần trực tiếp trong Activity hoặc ViewModel. Để làm điều này, có thể gọi getToken() tại một điểm thích hợp trong vòng đời ứng dụng. Điều quan trọng là không gọi phương thức này từ luồng chính mà không xử lý bất đồng bộ.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        getFCMToken()
    }

    private fun getFCMToken() {
        FirebaseMessaging.getInstance().getToken()
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val token = task.result
                    Log.d("FCM", "Token: $token")
                }
            }
    }
}

Phương pháp FirebaseInstanceId cũ

Trong các phiên bản cũ hơn của Firebase SDK (trước phiên bản 20.x), token được lấy qua FirebaseInstanceId.getInstance().getToken(). Phương thức này đã bị đánh dấu là không được dùng nữa và không được khuyến nghị sử dụng trong các dự án mới. Các nhà phát triển duy trì mã cũ nên chuyển sang API FirebaseInstallations.

Lấy Registration Token trên iOS

Trên iOS, quy trình lấy Registration Token khác về mặt kiến trúc — FCM hoạt động qua Apple Push Notification service (APNs). Firebase SDK nhận token thiết bị duy nhất từ APNs, chuyển đổi nó sang định dạng FCM và chuyển cho ứng dụng.

Thiết lập APNs và lấy token

Để sử dụng FCM trên iOS, cần cấu hình chứng chỉ hoặc khóa APNs trong bảng điều khiển Firebase. Ứng dụng phải yêu cầu quyền thông báo qua UNUserNotificationCenter. Sau khi nhận được token APNs, Firebase SDK tự động tạo Registration Token.

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        application: UIApplication,
        didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        Messaging.messaging().delegate = self
        requestNotificationAuthorization()
        return true
    }

    private func requestNotificationAuthorization() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge])
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        Log.d("FCM", "Token: \(fcmToken ?? "")")
        sendTokenToServer(token: fcmToken)
    }
}

Sự khác biệt giữa token iOS và Android

Registration Token trên iOS có kích thước nhỏ hơn so với token Android vì nó dựa trên token thiết bị APNs. Firebase SDK tự động cập nhật token FCM khi token APNs thay đổi, điều này xảy ra khi khôi phục thiết bị từ bản sao lưu hoặc cài đặt lại ứng dụng.

Cập nhật và quản lý Registration Token

Quản lý vòng đời của Registration Token là một nhiệm vụ quan trọng để gửi thông báo push đáng tin cậy. Nếu máy chủ lưu trữ token lỗi thời, thông báo sẽ không được gửi và Firebase sẽ trả về lỗi UNREGISTERED.

Theo dõi thay đổi token

Firebase SDK cung cấp hai cơ chế để theo dõi thay đổi token. Trên Android, callback onNewToken trong FirebaseMessagingService được sử dụng. Trên iOS, delegate messaging:didReceiveRegistrationToken được sử dụng. Cả hai đều được gọi mỗi khi token được cập nhật.

kotlin
// Lưu token vào SharedPreferences và gửi đến máy chủ
class TokenManager(private val context: Context) {

    companion object {
        private const val PREFS_TOKEN_KEY = "fcm_registration_token"
    }

    fun saveToken(token: String) {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        prefs.edit().putString(PREFS_TOKEN_KEY, token).apply()
    }

    fun getSavedToken(): String? {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        return prefs.getString(PREFS_TOKEN_KEY, null)
    }
}

Chiến lược lưu trữ token trên máy chủ

Máy chủ phải lưu trữ Registration Token liên kết với định danh người dùng. Khi token được cập nhật, máy khách gửi token mới đến máy chủ và máy chủ thay thế token cũ. Nên giữ lịch sử token: nếu thông báo không được gửi đến token mới, có thể thử token cũ.

Xử lý lỗi khi làm việc với token

Firebase có thể trả về lỗi lấy token trong một số trường hợp. Thiếu Google Play Services trên thiết bị — token sẽ không được lấy. Vượt quá hạn mức yêu cầu đến FCM — cần triển khai backoff lũy thừa khi thử lại. Hết hạn token — SDK tự động yêu cầu token mới.

Tình huốngKết quảHành động của nhà phát triển
Xóa ứng dụngToken bị thu hồiXóa token khỏi cơ sở dữ liệu
Khôi phục từ bản sao lưuToken mớiCập nhật trong cơ sở dữ liệu
Đặt lại Google Play ServicesToken được tạo lạiXử lý onNewToken
Hết hạn tokenCập nhật tự độngĐăng ký nhận cập nhật

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

Phải làm gì nếu không nhận được Registration Token?

Kiểm tra sự hiện diện của Google Play Services trên thiết bị, tính chính xác của tệp google-services.json và phiên bản Firebase SDK. Đảm bảo ứng dụng có quyền truy cập internet.

Registration Token thay đổi bao lâu một lần?

Token có thể thay đổi khi gỡ cài đặt và cài đặt lại ứng dụng, xóa dữ liệu, khôi phục từ bản sao lưu hoặc đăng nhập vào tài khoản Google khác. Không có khoảng thời gian cố định.

Một thiết bị có thể có nhiều Registration Token không?

Có, mỗi ứng dụng trên thiết bị nhận token FCM riêng. Nếu một thiết bị có ba ứng dụng với Firebase, mỗi ứng dụng sẽ có Registration Token duy nhất riêng.

Làm thế nào để kiểm tra Registration Token còn hiệu lực không?

Gửi thông báo thử nghiệm qua bảng điều khiển Firebase hoặc API HTTP FCM. Nếu token không hợp lệ, API sẽ trả về lỗi UNREGISTERED hoặc NOT_FOUND.

Có an toàn để lưu trữ Registration Token trên máy chủ không?

Registration Token không phải là khóa bí mật, nhưng việc rò rỉ nó cho phép gửi thông báo đến thiết bị của người dùng. Lưu trữ token trong cơ sở dữ liệu an toàn và sử dụng HTTPS để truyền tải.

Tổng kết

  • Registration Token là yếu tố bắt buộc để gửi thông báo push qua Firebase Cloud Messaging.
  • Token được tạo tự động khi khởi chạy lần đầu ứng dụng có FCM SDK.
  • Trên Android, token được lấy qua FirebaseMessaging.getInstance().getToken().
  • Trên iOS, token dựa trên token thiết bị APNs và được chuyển qua delegate MessagingDelegate.
  • Token có thể thay đổi — ứng dụng phải xử lý callback onNewToken.
  • Máy chủ phải lưu trữ token hiện tại và xóa token cũ khi gặp lỗi UNREGISTERED.
  • Để gửi tin cậy, hãy triển khai theo dõi thay đổi token và cơ chế thử lại khi thất bạ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