Silent Push là một loại thông báo push iOS được gửi đến thiết bị mà không hiển thị bất kỳ điều gì cho người dùng và không có âm thanh kèm theo. Mục đích chính của thông báo im lặng là đồng bộ hóa dữ liệu nền, cập nhật nội dung và thực hiện các tác vụ ngắn không cần sự chú ý của người dùng. Theo Apple Developer Documentation, 2026, Silent Push kích hoạt ứng dụng trong nền trong 30 giây để xử lý dữ liệu đến, sau đó hệ thống đưa thiết bị về chế độ ngủ để tiết kiệm pin.
Những điểm chính
Silent Push là cơ chế iOS gửi dữ liệu đến thiết bị mà không có bất kỳ thông báo trực quan nào cho người dùng. Không giống như push tiêu chuẩn hiển thị biểu ngữ, phát âm thanh và xuất hiện trong Trung tâm thông báo, silent push “đánh thức” ứng dụng trong nền và chuyển dữ liệu để xử lý. Người dùng không bao giờ biết về việc gửi thông báo như vậy — kết quả là nội dung được cập nhật vào lần tiếp theo họ mở ứng dụng.
Sự khác biệt chính nằm ở tải trọng JSON: silent push chứa cờ content-available: 1 và KHÔNG chứa alert, sound hoặc badge. Thông báo tiêu chuẩn với alert luôn được hiển thị cho người dùng, bất kể content-available. Silent push chỉ hoạt động với content-available: 1 và không có alert — nếu bạn thêm alert, hệ thống sẽ hiển thị thông báo ngay cả khi có cờ gửi nền.
Thông báo im lặng không thể thiếu trong các kịch bản mà dữ liệu cần được làm mới khi người dùng mở ứng dụng, nhưng không làm phiền người dùng. Ví dụ: cập nhật nguồn cấp tin tức trong nền, đồng bộ hóa đăng ký, tải nội dung mới để truy cập ngoại tuyến, cập nhật widget, vô hiệu hóa bộ nhớ đệm. Silent Push cũng được sử dụng để “làm nóng” ứng dụng trước một hành động dự kiến của người dùng.
Việc gửi Silent Push khác biệt đáng kể so với thông báo thông thường và tuân theo các quy tắc tối ưu hóa năng lượng. Hệ thống iOS nhận yêu cầu push từ APNS, xác định đó là silent push (content-available: 1) và quyết định có gửi hay không dựa trên nhiều yếu tố: mức pin, chế độ tiết kiệm năng lượng, tần suất silent push trước đó, hoạt động của ứng dụng và tải CPU hiện tại.
Trên các thiết bị có chip Apple M và iOS 15+, silent push tích hợp với cơ chế Power Nap, cơ chế này định kỳ đánh thức thiết bị để thực hiện các tác vụ nền. Power Nap hợp nhất nhiều silent push thành một khoảng thời gian hoạt động, giảm mức tiêu thụ năng lượng tổng thể. Nhà phát triển không thể kiểm soát trực tiếp Power Nap — hệ thống tự động đưa ra quyết định dựa trên hành vi của người dùng và lịch sử sử dụng ứng dụng.
Khi hệ thống gửi một silent push, ứng dụng nhận được lệnh gọi application(_:didReceiveRemoteNotification:fetchCompletionHandler:) trong AppDelegate. Nhà phát triển phải gọi completion handler trong vòng 30 giây, truyền kết quả chính xác (UIBackgroundFetchResult). Nếu quá trình xử lý không hoàn thành kịp thời, hệ thống có thể giới hạn tần suất silent push cho ứng dụng này hoặc ngừng gửi chúng hoàn toàn.
// Xử lý Silent Push trong AppDelegate
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["sync-type"] as? String
else {
completionHandler(.failed)
return
}
if type == "news-feed" {
NewsFeedSyncService().sync { success in
completionHandler(success ? .newData : .failed)
}
} else if type == "cache-invalidate" {
CacheManager.shared.invalidateAll()
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
Apple không công bố khoảng cách chính xác giữa các silent push, nhưng dựa trên thử nghiệm và tài liệu, khuyến nghị gửi không quá 2–3 thông báo im lặng mỗi giờ cho mỗi thiết bị. Nếu gửi thường xuyên hơn, hệ thống bắt đầu bỏ qua silent push và dữ liệu ngừng được gửi. Nếu cần đồng bộ hóa thường xuyên hơn, hãy cân nhắc sử dụng URLSession với cấu hình nền hoặc VoIP push.
Silent Push được sử dụng trong nhiều tác vụ khác nhau, nơi dữ liệu cần được cập nhật mà không cần sự tham gia tích cực của người dùng. Hãy xem xét các trường hợp sử dụng hiệu quả nhất của cơ chế này trong các ứng dụng iOS thực tế.
Các ứng dụng tin tức, trình đọc và ứng dụng du lịch sử dụng Silent Push để tải nội dung mới trong nền. Khi người dùng mở ứng dụng, dữ liệu đã được tải sẵn và có sẵn ngay cả khi không có kết nối Internet. Cách tiếp cận này cải thiện đáng kể trải nghiệm người dùng — màn hình tải trống biến mất và nội dung hiển thị ngay lập tức. Máy chủ gửi một silent push khi có bài viết mới và ứng dụng tải chúng trong nền để đọc ngoại tuyến.
iOS WidgetKit cập nhật widget theo lịch trình, nhưng để cập nhật tức thì sau khi dữ liệu thay đổi ở phía máy chủ, Silent Push được sử dụng. Ứng dụng trong nền xử lý silent push, cập nhật kho dữ liệu cục bộ cho widget và làm mới dòng thời gian bắt buộc qua WidgetCenter. Người dùng thấy thông tin cập nhật trên widget mà không cần mở ứng dụng — tỷ giá hối đoái, dự báo thời tiết, trạng thái giao hàng.
Khi máy chủ cập nhật dữ liệu quan trọng (ví dụ: quy tắc định giá, tính năng khả dụng cho người dùng cao cấp), Silent Push cho phép vô hiệu hóa bộ nhớ đệm cục bộ ngay lập tức. Khi mở lần tiếp theo, ứng dụng sẽ tải dữ liệu mới từ máy chủ thay vì sử dụng bộ nhớ đệm cũ. Điều này đặc biệt phù hợp với các ứng dụng có nội dung trả phí hoặc đăng ký.
Trong một số kịch bản, huy hiệu trên biểu tượng ứng dụng cần được cập nhật mà không hiển thị thông báo. Silent Push với trường badge trong tải trọng cho phép đặt giá trị bộ đếm mong muốn mà không làm phiền người dùng bằng biểu ngữ. Ví dụ: ứng dụng trò chuyện có thể cập nhật huy hiệu với số lượng tin nhắn chưa đọc mà không hiển thị mỗi tin nhắn mới dưới dạng thông báo nếu người dùng đã ở trong ứng dụng.
Để Silent Push hoạt động chính xác, cần cấu hình ở ba cấp độ: dự án Xcode, tải trọng JSON trên máy chủ và mã xử lý trong ứng dụng. Mỗi cấp độ đều quan trọng: bỏ qua bất kỳ bước nào sẽ khiến thông báo được gửi dưới dạng thông thường hoặc không được gửi.
Trong Xcode, bạn cần bật khả năng Push Notifications và Background Modes với hộp kiểm Remote notifications được chọn. Push Notifications tạo chứng chỉ cho APNS, trong khi Remote notifications trong Background Modes cho phép hệ thống đánh thức ứng dụng khi nhận được silent push. Không có Remote notifications, silent push sẽ được gửi nhưng ứng dụng sẽ không được kích hoạt trong nền và dữ liệu sẽ không được xử lý.
Tải trọng Silent Push phải chứa khóa aps với content-available: 1 và KHÔNG được chứa alert, sound hoặc badge. Các trường tùy chỉnh được truyền ở cùng cấp với aps và chứa dữ liệu để xử lý: loại thao tác, định danh đối tượng, siêu dữ liệu. Tải trọng không có content-available sẽ được xử lý như thông báo thông thường; có alert thì sẽ là thông báo thông thường ngay cả khi có content-available.
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
Khi nhận được silent push, iOS gọi application(_:didReceiveRemoteNotification:fetchCompletionHandler:) trước khi ứng dụng hiển thị. Trong phương thức này, bạn cần phân tích userInfo, thực hiện công việc cần thiết (yêu cầu mạng, ghi Core Data, cập nhật bộ nhớ đệm) và luôn gọi completionHandler với kết quả chính xác trong vòng 30 giây. Không gọi completionHandler được hệ thống coi là lỗi và ảnh hưởng đến tần suất của các silent push trong tương lai.
Silent Push không phải là kênh gửi dữ liệu đáng tin cậy cho các hoạt động quan trọng — đó là cơ chế tối ưu hóa, không phải đồng bộ hóa được đảm bảo. Nhà phát triển phải hiểu các giới hạn và thiết kế hệ thống sao cho ứng dụng hoạt động chính xác cả khi có và không có silent push.
iOS không đảm bảo gửi mỗi silent push. Hệ thống có thể trì hoãn hoặc hủy gửi khi pin yếu (dưới 20%), ở chế độ nguồn điện thấp, sau các silent push thường xuyên hoặc nếu ứng dụng không được sử dụng trong một thời gian dài. Thống kê gửi trung bình theo Apple: khoảng 70–80% silent push được gửi trong vòng 5 phút, số còn lại có thể bị trì hoãn hoặc mất.
Apple khuyến nghị tuân thủ một số quy tắc để sử dụng silent push hiệu quả. Không gửi quá 2–3 silent push mỗi giờ cho mỗi thiết bị — vượt quá giới hạn sẽ dẫn đến chặn. Sử dụng tải trọng nhỏ gọn: kích thước tải trọng tối thiểu giúp tăng tốc xử lý và giảm tải mạng. Luôn gọi completionHandler càng nhanh càng tốt: quá trình xử lý càng lâu, khả năng hệ thống hạn chế silent push trong tương lai càng cao.
Đối với các kịch bản yêu cầu gửi được đảm bảo hoặc nhiều thời gian xử lý hơn, hãy cân nhắc các lựa chọn thay thế. VoIP push (PushKit) đảm bảo gửi và cung cấp nhiều thời gian hơn nhưng chỉ dành cho các ứng dụng VoIP. Background fetch (UIApplication background fetch) được hệ thống khởi chạy theo lịch trình nhưng không thể được khởi tạo bởi máy chủ. WebSocket duy trì kết nối liên tục nhưng tiêu thụ nhiều pin hơn và không phù hợp với tất cả các loại ứng dụng.
Để gỡ lỗi Silent Push, hãy sử dụng Console.app trên Mac và lọc theo tên ứng dụng. Hệ thống ghi nhật ký mỗi silent push với nhãn “background task” và cho biết quá trình xử lý có thành công hay không. Trên thiết bị, hãy kiểm tra qua Settings → Developer → Background Modes Logging. Theo dõi phía máy chủ được thực hiện thông qua APNS Feedback Service để xác định các thông báo không được gửi.
Các câu hỏi thường gặp
Silent Push không hiển thị cho người dùng, không phát âm thanh và không xuất hiện trong Trung tâm thông báo. Mục đích của nó là kích hoạt ứng dụng trong nền để đồng bộ hóa dữ liệu. Push thông thường luôn hiển thị biểu ngữ và có thể bao gồm âm thanh và huy hiệu.
Ứng dụng có 30 giây để hoàn thành tác vụ nền. Sau khi gọi completionHandler, hệ thống đưa thiết bị về chế độ ngủ. Nếu completionHandler không được gọi kịp thời, hệ thống có thể ngừng gửi silent push đến ứng dụng này.
Hệ thống có thể trì hoãn việc gửi khi pin yếu, ở chế độ tiết kiệm năng lượng, sau khi gửi silent push thường xuyên hoặc nếu ứng dụng không được sử dụng trong một thời gian dài. Đây là hành vi bình thường của iOS, không liên quan đến lỗi triển khai.
Có, bạn có thể bao gồm content-available: 1 cùng với alert — trong trường hợp này, thông báo sẽ hiển thị cho người dùng và ứng dụng sẽ nhận được kích hoạt nền bổ sung. Nhưng nếu tác vụ chỉ là đồng bộ hóa nền mà không hiển thị, thì không thể bao gồm alert.
Sử dụng Console.app trên Mac để xem nhật ký tác vụ nền. Gửi một silent push thử nghiệm qua APNS và kiểm tra xem didReceiveRemoteNotification có được gọi với completionHandler chính xác không. Trong Xcode, hãy sử dụng trình mô phỏng với mô phỏng chế độ nền.
Tóm tắ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