Thông báo Push là các tin nhắn được máy chủ gửi đến thiết bị di động ngay cả khi ứng dụng đóng. Theo Google Firebase, 2024, thông báo Push được xử lý thông qua các dịch vụ chuyên dụng — FCM trên Android và APNS trên iOS — hỗ trợ phân phối thời gian thực đến hàng triệu thiết bị cùng lúc. Chúng đã trở thành một phần không thể thiếu trong trải nghiệm người dùng trên các ứng dụng di động hiện đại.
Ý chính
Thông báo Push là các tin nhắn ngắn mà máy chủ ứng dụng gửi đến thiết bị người dùng mà không có yêu cầu rõ ràng. Chúng xuất hiện dưới dạng biểu ngữ, huy hiệu trên biểu tượng hoặc tín hiệu âm thanh, thu hút sự chú ý của người dùng vào ứng dụng và thông báo về các sự kiện quan trọng.
Một thông báo Push bao gồm tiêu đề, nội dung tin nhắn và dữ liệu tùy chọn (payload). Không giống như SMS, thông báo Push miễn phí cho người dùng và được phân phối qua cơ sở hạ tầng dịch vụ đám mây — FCM cho Android và APNS cho iOS. Các mục tiêu chính của Thông báo Push: tăng mức độ tương tác, thông báo về sự kiện và đưa người dùng quay lại ứng dụng.
Thống kê sử dụng cho thấy Thông báo Push được cấu hình đúng cách làm tăng tỷ lệ giữ chân người dùng lên 30–60%. Tuy nhiên, tần suất thông báo quá mức dẫn đến hủy đăng ký — hơn 60% người dùng tắt thông báo nếu chúng được gửi nhiều hơn ba lần một ngày.
Một hệ thống Push bao gồm ba thành phần: máy chủ ứng dụng, dịch vụ nền tảng (FCM/APNS) và ứng dụng khách trên thiết bị. Máy chủ gửi yêu cầu đến dịch vụ nền tảng, dịch vụ này phân phối thông báo đến thiết bị mục tiêu thông qua kết nối liên tục với hệ điều hành.
Cơ chế phân phối của Thông báo Push dựa trên kết nối liên tục giữa thiết bị và dịch vụ nền tảng. Hệ điều hành duy trì một kênh liên lạc được mã hóa qua đó tất cả các tin nhắn Push đi qua.
Khi khởi chạy lần đầu, ứng dụng yêu cầu quyền gửi thông báo và nhận được token thiết bị duy nhất từ FCM hoặc APNS. Token này là một chuỗi dài đến 4 KB, định danh duy nhất phiên bản ứng dụng. Token thay đổi khi ứng dụng được cài đặt lại hoặc thiết bị được khôi phục từ bản sao lưu.
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
Máy chủ ứng dụng gửi yêu cầu HTTP đến API FCM hoặc API APNS, chỉ định token mục tiêu, tiêu đề, nội dung và dữ liệu bổ sung. Dịch vụ nền tảng trả lời với trạng thái phân phối: thành công, token không hợp lệ (thiết bị đã gỡ cài đặt ứng dụng) hoặc bị giới hạn tốc độ (vượt quá tần suất gửi).
fetch("https://fcm.googleapis.com/fcm/send", {
method: "POST",
headers: {
"Authorization": "key=AIzaSy...",
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "device_token_here",
notification: {
title: "Tin nhắn mới",
body: "Bạn có thông báo mới!"
}
})
})
Sự lựa chọn giữa FCM và APNS phụ thuộc vào nền tảng mục tiêu. FCM hỗ trợ Android và iOS, trong khi APNS chỉ hỗ trợ hệ sinh thái Apple. Hãy xem xét các khác biệt chính quan trọng cho việc phát triển ứng dụng di động đa nền tảng.
FCM là dịch vụ của Google hoạt động trên Google Play Services. Nó hỗ trợ hai sơ đồ phân phối: thông báo hiển thị tự động và thông báo dữ liệu mà ứng dụng tự xử lý. FCM miễn phí và không có giới hạn về số lượng tin nhắn được gửi.
APNS là dịch vụ của Apple hỗ trợ tệp đính kèm đa phương tiện (hình ảnh, video, âm thanh) lên đến 10 MB. Việc gửi qua APNS yêu cầu chứng chỉ TLS hoặc khóa xác thực. APNS giới hạn tần suất gửi đến một thiết bị — không quá 150 thông báo mỗi phút, sau đó áp dụng giới hạn tốc độ.
| Đặc điểm | FCM | APNS |
|---|---|---|
| Nền tảng | Android, iOS, Web | iOS, macOS, watchOS |
| Yêu cầu | Google Play Services | Apple Developer Program |
| Đa phương tiện | đến 4 KB (dữ liệu) | đến 10 MB (tệp đính kèm) |
| Ưu tiên | bình thường/cao | ngay lập tức/tiết kiệm pin |
| Chi phí | miễn phí | miễn phí (cần tài khoản) |
Thông báo Push được phân loại theo phương thức hiển thị và mục đích. Hiểu các loại giúp chọn chiến lược phù hợp cho mỗi kịch bản tương tác với người dùng.
Loại phổ biến nhất — thông báo được hiển thị với tiêu đề và nội dung. Hệ điều hành tự động hiển thị nó trong bảng thông báo, trên màn hình khóa và dưới dạng biểu ngữ. Nhà phát triển có thể cấu hình âm thanh, rung, huy hiệu biểu tượng và nút hành động cho các hành động trực tiếp (trả lời, mở, bỏ qua).
Thông báo dữ liệu chứa chỉ payload mà không có hiển thị trực quan. Ứng dụng xử lý chúng trong nền: đồng bộ dữ liệu, cập nhật bộ nhớ đệm hoặc bắt đầu tải xuống. Trên Android, thông báo dữ liệu được phân phối đáng tin cậy; trên iOS, chỉ khi ứng dụng đang hoạt động hoặc thông qua tìm nạp nền.
Các hệ điều hành di động hiện đại hỗ trợ thông báo rich và đa phương tiện với hình ảnh, GIF, video và âm thanh. Trên iOS, điều này được thực hiện qua UNNotificationAttachment; trên Android, qua BigPictureStyle và InboxStyle để tùy chỉnh giao diện thông báo trong bảng hệ thống.
Thông báo ẩn không hiển thị cho người dùng và được sử dụng để đồng bộ nền. Trên iOS, chúng có độ ưu tiên cao cho các tác vụ như cập nhật dữ liệu trước khi mở ứng dụng. Android xử lý chúng như thông báo dữ liệu với độ ưu tiên tối thiểu.
Việc cấu hình Thông báo Push đòi hỏi các thao tác ở cấp cơ sở hạ tầng, máy chủ và mã khách. Hãy xem xét quy trình điển hình cho một dự án di động đa nền tảng.
Đối với Android, bạn cần tạo một dự án trong Firebase Console, thêm google-services.json vào dự án và cấu hình FirebaseMessagingService. Token thiết bị được lấy qua FirebaseInstanceId hoặc FirebaseMessaging.getInstance().token, sau đó được gửi đến máy chủ qua API khi khởi chạy lần đầu hoặc khi thay đổi.
Đối với iOS, cần có đăng ký Apple Developer Program, tạo chứng chỉ Push hoặc khóa APNS trong Developer Portal, và bật khả năng Push Notifications trong Xcode. Việc đăng ký thông báo được thực hiện qua UIApplication.shared.registerForRemoteNotifications, nhận được deviceToken trong AppDelegate.
import UIKit
import UserNotifications
@main
class AppDelegate: UIResponder,
UIApplicationDelegate {
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
let token = deviceToken
.map { String.format("%02x", $0) }
.joined()
// gửi token đến máy chủ của bạn
}
}
Ở phía máy chủ, Thông báo Push được gửi qua REST API hoặc Admin SDK. FCM sử dụng Firebase Admin SDK (có sẵn cho Node.js, Java, Python, Go), trong khi APNS sử dụng các thư viện pusher (pushy cho Java, apn2 cho Node.js). Nên lưu trữ token trong cơ sở dữ liệu với dấu thời gian cập nhật lần cuối.
Bảo mật Thông báo Push là cực kỳ quan trọng, vì dữ liệu bảo mật có thể được truyền qua chúng. Cả hai nền tảng đều cung cấp cơ chế bảo vệ cơ bản, nhưng nhà phát triển phải sử dụng chúng đúng cách.
Payload của Thông báo Push có thể chứa dữ liệu cá nhân của người dùng: tên, số tiền giao dịch, liên kết tin nhắn. Ngay cả khi kênh liên lạc giữa FCM/APNS và thiết bị được mã hóa, dữ liệu có thể bị chặn ở cấp ứng dụng nếu phần mềm bên thứ ba chặn thông báo. Nên mã hóa payload nhạy cảm trên máy chủ bằng AES-256 và giải mã trên thiết bị bằng khóa được lưu trong Keychain (iOS) hoặc EncryptedSharedPreferences (Android).
Token thiết bị là một định danh phiên có thể bị xâm phạm nếu thiết bị bị hack hoặc lưu lượng truy cập bị chặn. Máy chủ ứng dụng nên xác thực token trước khi gửi: kiểm tra chúng với cơ sở dữ liệu, theo dõi token không hoạt động và xóa chúng khi có lỗi InvalidToken lặp lại. FCM và APNS trả về trạng thái InvalidRegistration cho token không hợp lệ — đừng bỏ qua nó.
Nếu không kiểm soát tần suất, Thông báo Push có thể trở thành công cụ gửi thư rác gây khó chịu cho người dùng và giảm tỷ lệ giữ chân. Đặt giới hạn trên máy chủ: không quá 5 thông báo mỗi giờ cho một người dùng và không quá 3 tin nhắn giống nhau. Đối với thông báo giao dịch (xác nhận đơn hàng, thay đổi mật khẩu), giới hạn có thể cao hơn — lên đến 10 mỗi giờ, vì chúng chứa thông tin quan trọng. Sử dụng giới hạn tốc độ ở cấp API gửi để kẻ tấn công không thể kích hoạt thông báo hàng loạt qua máy chủ của bạn.
Câu hỏi thường gặp
Có, nhưng kết nối trực tiếp đến APNS không được hỗ trợ trên Android — các thiết bị không có Google Play Services sử dụng các giải pháp thay thế như Huawei Mobile Services (HMS) và kết nối WebSocket tùy chỉnh. Tuy nhiên, FCM vẫn là tiêu chuẩn cho hầu hết các ứng dụng nhờ tính miễn phí và độ tin cậy.
FCM và APNS lưu thông báo cuối cùng trên máy chủ của chúng và phân phối khi kết nối được khôi phục. Mỗi thiết bị chỉ lưu thông báo cuối cùng từ mỗi ứng dụng, vì vậy các tin nhắn trung gian sẽ bị mất trong thời gian mạng kéo dài.
Nguyên nhân phổ biến nhất là chứng chỉ Push hết hạn (có hiệu lực 1 năm), token thiết bị không hợp lệ, thông báo bị tắt trong cài đặt hoặc chế độ tiết kiệm pin được bật. Kiểm tra chứng chỉ trong Apple Developer Console và đảm bảo ứng dụng yêu cầu quyền qua UNUserNotificationCenter.
Trên Android, sử dụng PendingIntent trong NotificationCompat.Builder với theo dõi mở qua Intent. Trên iOS, sử dụng phương thức UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:). FCM cung cấp báo cáo phân phối và mở cho mỗi thông báo đã gửi.
Không đáng kể — Thông báo Push không duy trì kết nối liên tục; hệ điều hành sử dụng một kênh hệ thống chung cho tất cả các ứng dụng, giúp giảm thiểu tổng mức tiêu thụ điện. Việc gửi thường xuyên (cứ 5 phút) tiêu tốn nhiều năng lượng hơn do đánh thức thiết bị từ chế độ ngủ. Thông báo ẩn trên iOS tiêu tốn nhiều pin hơn do kích hoạt ứng dụng nền để xử lý dữ liệu nhận được.
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.
Đọc thêm