Push notification hoạt động như thế nào? Giải thích dễ hiểu cho lập trình viên mới

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Bạn nhận thông báo tin nhắn ngay cả khi ứng dụng đang đóng. Điều đó diễn ra thế nào? Hiểu luồng hoạt động của push notification giúp bạn thiết kế đúng, gỡ lỗi nhanh và tránh những hiểu lầm phổ biến khi triển khai.

Vì sao cần dịch vụ trung gian?

Ứng dụng của bạn không thể giữ kết nối mở liên tục với máy chủ riêng, vì rất tốn pin. Thay vào đó, hệ điều hành duy trì một kết nối chung đến dịch vụ thông báo của nền tảng. Máy chủ của bạn chỉ cần gửi thông điệp cho dịch vụ đó, rồi dịch vụ chuyển đến đúng thiết bị.

  • Trên iOS: Apple Push Notification service (APNs).
  • Trên Android: Firebase Cloud Messaging (FCM) là giải pháp phổ biến.

Nhiều dự án dùng FCM làm lớp thống nhất, vì FCM cũng có thể chuyển thông điệp đến iOS thông qua APNs.

Luồng hoạt động từng bước

  1. Xin quyền: ứng dụng hỏi người dùng có cho phép nhận thông báo không (bắt buộc trên iOS, và trên các phiên bản Android mới).
  2. Đăng ký: ứng dụng yêu cầu dịch vụ thông báo cấp một mã thiết bị (device token hoặc registration token).
  3. Gửi token lên máy chủ của bạn: máy chủ lưu token gắn với tài khoản người dùng.
  4. Gửi thông báo: khi có sự kiện, máy chủ gọi API của FCM hoặc APNs kèm token và nội dung.
  5. Chuyển phát: dịch vụ nền tảng đẩy thông điệp xuống thiết bị.
  6. Hiển thị hoặc xử lý: hệ điều hành hiển thị thông báo, hoặc ứng dụng xử lý dữ liệu nếu đang mở.

Hai loại thông điệp chính

Notification message: có tiêu đề, nội dung; khi ứng dụng ở nền, hệ điều hành tự hiển thị mà không cần ứng dụng chạy mã.

Data message: chỉ mang dữ liệu tùy ý (cặp khóa giá trị) để ứng dụng tự xử lý, ví dụ cập nhật nội dung ngầm. Hành vi khi ứng dụng bị đóng phụ thuộc nền tảng và cài đặt hệ thống, nên không nên coi đây là cách đảm bảo chắc chắn chạy mã.

Ví dụ nội dung gửi qua FCM

{
  "message": {
    "token": "DEVICE_TOKEN",
    "notification": {
      "title": "Đơn hàng đã giao",
      "body": "Đơn hàng của bạn đang trên đường đến."
    },
    "data": {
      "orderId": "1234",
      "screen": "order_detail"
    }
  }
}

Phần data thường dùng để khi người dùng bấm vào thông báo, ứng dụng mở đúng màn hình liên quan.

Những điều cần nhớ về token

  • Token có thể thay đổi (cài lại ứng dụng, xóa dữ liệu, khôi phục thiết bị), vì vậy ứng dụng cần lắng nghe sự kiện làm mới token và cập nhật lên máy chủ.
  • Một người dùng có thể có nhiều thiết bị, nên máy chủ nên lưu nhiều token cho mỗi tài khoản.
  • Khi dịch vụ trả về lỗi token không hợp lệ, hãy xóa token đó khỏi cơ sở dữ liệu.
  • Khi người dùng đăng xuất, nên gỡ token khỏi tài khoản để không gửi nhầm cho người khác dùng chung máy.

Thông báo không đảm bảo 100% đến nơi

Đây là điểm nhiều người mới hiểu lầm. Thông báo đẩy mang tính nỗ lực tối đa, không cam kết tuyệt đối. Thiết bị tắt mạng, chế độ tiết kiệm pin, cài đặt tối ưu của một số hãng điện thoại hay người dùng tắt quyền đều có thể khiến thông báo không hiện. Vì vậy dữ liệu quan trọng phải luôn có thể lấy lại khi mở ứng dụng, thông báo chỉ nên là lời nhắc.

Thiết kế thông báo tốt

  1. Xin quyền đúng thời điểm, sau khi giải thích lợi ích, không hỏi ngay khi vừa mở ứng dụng lần đầu.
  2. Nội dung ngắn, có giá trị, không gửi dồn dập.
  3. Cho người dùng tùy chọn loại thông báo muốn nhận.
  4. Dùng kênh thông báo (notification channel) trên Android để phân loại.
  5. Tuân thủ quy định về quyền riêng tư và tiếp thị.

Kết luận

Push notification là chuỗi: xin quyền, lấy token, lưu lên máy chủ, gửi qua dịch vụ nền tảng, hiển thị trên thiết bị. Nắm vững luồng này, bạn sẽ dễ dàng triển khai bằng bất kỳ SDK nào.

Thông báo cục bộ và thông báo từ xa

Đừng nhầm hai loại. Thông báo cục bộ do chính ứng dụng lên lịch trên thiết bị, ví dụ nhắc uống nước lúc 8 giờ, không cần máy chủ hay Internet. Thông báo từ xa đến từ máy chủ qua APNs hoặc FCM, dùng cho tin nhắn mới, đơn hàng, khuyến mại. Nhiều ứng dụng dùng cả hai. Chọn cục bộ khi nội dung chỉ phụ thuộc thời gian và dữ liệu trên máy, chọn từ xa khi sự kiện xảy ra ở phía máy chủ hoặc do người dùng khác gây ra.

Muốn xây hệ thống thông báo hoàn chỉnh từ ứng dụng đến máy chủ, bạn có thể tìm thêm bài học trên codebem.com.

author_photo
Nguyễn Đình Cường

0 comment