Thông báo đẩy là một trong những cách hiệu quả nhất để tương tác với người dùng sau khi cài đặt ứng dụng. Chúng cho phép thông báo về tin nhắn mới, giảm giá, cập nhật nội dung hoặc nhắc nhở về giỏ hàng bị bỏ quên. Thông báo đẩy (push notifications) hoạt động thông qua các dịch vụ đám mây: Firebase Cloud Messaging (FCM) trên Android và Apple Push Notification Service (APNS) trên iOS. Trong bài viết này, chúng ta sẽ phân tích kiến trúc thông báo, các loại của chúng và quy trình thiết lập cho cả hai nền tảng. Tìm hiểu thêm trong tài liệu chính thức của FCM.
Những điểm chính
Thông báo đẩy là tin nhắn mà máy chủ gửi đến thiết bị di động mà không có yêu cầu từ ứng dụng. Tin nhắn đi qua dịch vụ đám mây (FCM hoặc APNS), dịch vụ này sẽ gửi nó đến thiết bị ngay cả khi ứng dụng đã đóng. Thông báo được chia thành hai loại: thông báo hiển thị (hiển thị cho người dùng) và thông báo dữ liệu (truyền dữ liệu để xử lý nền).
Kiến trúc thông báo đẩy bao gồm ba thành phần: (1) máy chủ ứng dụng — gửi yêu cầu đến FCM/APNS; (2) dịch vụ đám mây — định tuyến thông báo; (3) ứng dụng khách — nhận và xử lý thông báo. Máy chủ phải biết Device Token của thiết bị để gửi thông báo cụ thể đến thiết bị đó. Để gửi hàng loạt, sử dụng Topic Subscription — đăng ký thiết bị vào các kênh chủ đề (tin tức, khuyến mãi, thời tiết).
Trên mỗi thiết bị, thông báo được xử lý bởi hệ điều hành: Android — qua NotificationManager và NotificationChannel, iOS — qua UNUserNotificationCenter. Người dùng có thể cấu hình hành vi thông báo cho từng kênh: cho phép âm thanh, biểu ngữ, hiển thị trên màn hình khóa hoặc tắt hoàn toàn. Cấu hình kênh đúng cách làm tăng mức độ tương tác và giảm tỷ lệ hủy đăng ký.
Tại IT Sectr, chúng tôi thiết kế hệ thống thông báo đẩy có tính đến các đặc điểm nền tảng ngay từ đầu. Các quyết định chính: lựa chọn giữa FCM và APNS trực tiếp, định dạng tải trọng, tần suất gửi và cơ chế đăng ký. Điều này giúp tránh các tình huống thông báo không đến hoặc bị hệ thống chặn.
Firebase Cloud Messaging (FCM) là dịch vụ đa nền tảng của Google để gửi thông báo. FCM hỗ trợ Android, iOS, Web và Flutter. Trên iOS, FCM hoạt động qua APNS: FCM gửi yêu cầu đến APNS, APNS gửi thông báo đến thiết bị. Ưu điểm của FCM: API duy nhất cho cả hai nền tảng, phân tích tích hợp, kiểm tra A/B, chủ đề và phân khúc đối tượng.
Apple Push Notification Service (APNS) là dịch vụ gốc của Apple. Chỉ hoạt động trên thiết bị Apple (iOS, macOS, watchOS, tvOS). Yêu cầu ủy quyền trực tiếp qua chứng chỉ TLS hoặc token (JWT). APNS cung cấp độ trễ gửi tối thiểu và tích hợp trực tiếp với các tính năng iOS: PushKit, Notification Service Extension và Cảnh báo quan trọng.
Lựa chọn giữa FCM và APNS phụ thuộc vào kiến trúc dự án. Nếu ứng dụng chỉ dành cho iOS — APNS cung cấp nhiều quyền kiểm soát hơn. Nếu đa nền tảng — FCM thuận tiện hơn với API duy nhất. Nhiều dự án sử dụng FCM làm dịch vụ chính và cấu hình thêm PushKit cho VoIP trên iOS. Cách tiếp cận kết hợp cho phép tận dụng ưu điểm của cả hai hệ thống.
| Đặc điểm | FCM | APNS |
|---|---|---|
| Nền tảng | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| Ủy quyền | Khóa máy chủ (Firebase Console) | Chứng chỉ TLS hoặc token JWT |
| Tải trọng tối đa | 4 KB (data), 2 KB (notification) | 4 KB |
| Chủ đề | Tích hợp sẵn (Topic Messaging) | Không (triển khai phía máy chủ) |
| Silent Push | Được hỗ trợ | Được hỗ trợ (content-available) |
| PushKit | Không | Có (VoIP, hoạt động trực tiếp) |
| Phân tích | Firebase Analytics | Không tích hợp sẵn |
| Gửi đến thiết bị tắt | Hạn chế (phụ thuộc nhà sản xuất) | Có, qua PushKit |
Rich Notification là thông báo chứa không chỉ văn bản mà còn nội dung đa phương tiện: hình ảnh, video, âm thanh và nút hành động. Trên Android, nó được triển khai qua các kiểu NotificationCompat: BigPictureStyle (hình ảnh lớn), BigTextStyle (văn bản thu gọn/mở rộng), InboxStyle (danh sách tin nhắn), MediaStyle (điều khiển phát lại). Trên iOS, sử dụng Notification Content Extension — một target riêng với giao diện tùy chỉnh cho thông báo mở rộng.
Silent Push (content-available trên iOS) là thông báo được gửi mà không hiển thị cho người dùng. Nó dùng để cập nhật dữ liệu nền: đồng bộ nội dung, tải trước, cập nhật widget. Trên iOS, Silent Push yêu cầu bật Background Modes → Remote notifications. Trên Android, sử dụng FirebaseMessagingService với onMessageReceived để xử lý thông báo nền. Quan trọng: trên iOS, Silent Push có giới hạn tần suất và không đảm bảo gửi nếu ứng dụng không ở nền trước.
Interactive Notification cho phép người dùng thực hiện hành động mà không cần mở ứng dụng. Trên Android, đó là các nút (Action) trong thông báo: "Trả lời", "Phê duyệt", "Từ chối". Các hành động được xử lý qua PendingIntent, khởi chạy BroadcastReceiver hoặc Service. Trên iOS, Notification Action được đăng ký qua UNNotificationAction và UNNotificationCategory. Nút có thể là foreground (mở ứng dụng), background (thực thi trong nền) hoặc destructive (hành động không thể hoàn tác — xóa, chặn).
Notification Content Extension (iOS) — bộ điều khiển xem tùy chỉnh để hiển thị nội dung thông báo mở rộng khi nhấn giữ hoặc 3D Touch. Notification Service Extension (iOS) — phần mềm trung gian để sửa đổi nội dung thông báo trước khi hiển thị: giải mã tin nhắn E2E, tải hình ảnh, làm rối dữ liệu bảo mật. Trên Android không có tương tự trực tiếp — tất cả sửa đổi được thực hiện trong FirebaseMessagingService.
Đối với Android cần: (1) thêm Firebase SDK vào dự án (google-services.json); (2) tạo NotificationChannel (Android 8+) cho mỗi danh mục thông báo; (3) triển khai FirebaseMessagingService để nhận token và tin nhắn đến. Notification Channel là bắt buộc — nếu không có, thông báo sẽ không hiển thị trên Android 8+. Kênh có mức ưu tiên (IMPORTANCE_HIGH — âm thanh + cửa sổ bật lên, IMPORTANCE_LOW — không âm thanh) và người dùng có thể cấu hình trong cài đặt hệ thống.
Đối với iOS cần: (1) bật khả năng Push Notifications trong Xcode; (2) cấu hình khóa APNS trên Apple Developer Portal; (3) yêu cầu ủy quyền qua UNUserNotificationCenter.requestAuthorization — đây là hộp thoại hệ thống xuất hiện một lần. Phản hồi của người dùng rất quan trọng: nếu không được cấp quyền, thông báo sẽ không được gửi. Khuyến nghị giải thích cho người dùng lý do cần thông báo trước khi hiển thị hộp thoại hệ thống (pre-permission prompt).
Device Token (iOS) và Registration Token (Android) là các định danh thiết bị duy nhất cho thông báo đẩy. Token được tạo khi khởi chạy ứng dụng lần đầu và có thể thay đổi: khi cài đặt lại, xóa dữ liệu, đặt lại cài đặt quyền riêng tư. Máy chủ phải cập nhật token thường xuyên. Firebase cung cấp API thuận tiện để quản lý token qua onNewToken, cũng như bảng điều khiển để gửi thông báo thử nghiệm (Firebase Console → Cloud Messaging).
Topic Subscription là một trong những cơ chế hiệu quả nhất của FCM. Thiết bị đăng ký vào một chủ đề (ví dụ: "news", "promo_users_ios") và máy chủ gửi thông báo theo chủ đề mà không cần lưu trữ danh sách token. Firebase Topics hỗ trợ tới một triệu người đăng ký mỗi chủ đề và gửi có điều kiện (Condition) qua ngôn ngữ biểu thức: "'news' in topics && ('US' in topics || 'UK' in topics)".
Notification Payload là cấu trúc JSON được gửi qua FCM/APNS. Đối với FCM: riêng notification (phần hiển thị — tiêu đề, nội dung, hình ảnh) và data (trường tùy chỉnh cho ứng dụng). Đối với APNS: từ điển aps với alert, badge, sound, category và content-available. Cấu trúc tải trọng chính xác rất quan trọng: nếu notification + data đến cùng lúc, ứng dụng ở nền có thể không nhận được data. Khuyến nghị chỉ sử dụng tin nhắn data cho Android và truyền trường hiển thị riêng qua FCM Console.
Câu hỏi thường gặp
FCM (Firebase Cloud Messaging) là dịch vụ của Google cho Android và thông báo đa nền tảng. APNS (Apple Push Notification Service) là dịch vụ của Apple chỉ dành cho iOS/macOS. FCM có thể gửi thông báo qua APNS trên iOS, hoạt động như máy chủ proxy.
Rich Notification là thông báo nâng cao với nội dung đa phương tiện: hình ảnh, video, âm thanh, nút hành động. Trên iOS được triển khai qua Notification Content Extension; trên Android qua BigPictureStyle và InboxStyle.
Device Token là định danh thiết bị duy nhất để gửi thông báo đẩy. Trên Android là Registration Token từ FCM; trên iOS là Device Token từ APNS. Token có thể thay đổi khi cài đặt lại ứng dụng hoặc đặt lại cài đặt, do đó cần cập nhật trên máy chủ.
Silent Push (thông báo im lặng) là thông báo không hiển thị cho người dùng. Nó được sử dụng để cập nhật dữ liệu nền: đồng bộ nội dung, cập nhật widget, tải trước. Trên iOS yêu cầu bật Background Modes → Remote notifications.
PushKit là framework của Apple để gửi thông báo ưu tiên cao được sử dụng trong ứng dụng VoIP (cuộc gọi, nhắn tin). PushKit gửi thông báo ngay cả khi ứng dụng đã bị đóng và đảm bảo khởi chạy ứng dụng để xử lý.
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.