Tôi đã đọc qua các tài liệu để Chrome triển khai API đẩy web here và tôi nhận thấy API nói "bạn hứa sẽ hiển thị thông báo bất cứ khi nào bạn nhận được thông báo" và theo giới hạn được nêu "bạn có để hiển thị thông báo khi bạn nhận được thông báo đẩy".Thông báo đẩy im lặng của Google Chrome
Sau khi triển khai ví dụ trên máy cục bộ của tôi, tôi đã sử dụng cURL để gửi thông báo đẩy thành công. Tôi đã tò mò, vì vậy tôi nhận xét ra dòng mà thực sự gọi chức năng showNotification, và đặt trong một console.log thay vào đó và thấy rằng tôi có thể, trên thực tế, gửi, nhận, và hoàn toàn bỏ qua một thông báo đẩy. Tôi thậm chí đã thử sử dụng một câu lệnh if để kiểm soát có hay không hiển thị chúng dựa trên boolean toàn cầu mà tôi đã kiểm soát từ trang chính của tôi, và nó hoạt động. Vì vậy, tôi đã tự hỏi nếu có ai biết những gì họ có nghĩa là bằng cách nói rằng bạn cần phải hiển thị một thông báo, và các thông báo đẩy im lặng không có sẵn?
Đây không chỉ là vấn đề, tôi có thể cần kiểm soát việc có hiển thị các thông báo này trong ứng dụng web của mình hay không, vì vậy sẽ rất tuyệt nếu điều này thực sự có thể. Mã dưới đây trong trường hợp bạn tò mò.
self.addEventListener('push', function(event) {
var title = 'New Message';
var body = 'You have received a new message!';
var icon = '/img/favicon.png';
var tag = 'well-notification';
console.log("DID RECEIVE NOTIFICATION")
if(settingsShowNotification) {
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
);
}
});
EDIT: Trên Chrome 47, nếu có liên quan.
CẬP NHẬT: Sau khi thử nghiệm thêm, tôi đã tìm thấy vấn đề rõ ràng là tôi không thể cập nhật biến toàn cầu ban đầu khi người dùng điều hướng khỏi và sau đó điều hướng đến cùng một trang. Tuy nhiên, tôi đã có thể phá vỡ điều này bằng cách sử dụng một biến trên serviceworker chính nó và gửi một tin nhắn đến nhân viên dịch vụ bằng cách sử dụng API mô tả here để chuyển đổi boolean showNotifications.
Wow! Cảm ơn câu trả lời này. Tuyệt vời tìm! –
Trong trường hợp của chúng tôi sau khi nhận được thông báo, chúng tôi kiểm tra trạng thái trên máy chủ và chỉ hiển thị thông báo nếu đáp ứng điều kiện. Để ngăn chặn một thông báo bắt buộc, chúng tôi trả về không bao giờ hoàn thành lời hứa như 'event.waitUntil (new Promise (function() {}))'. –
Vài bình luận. Nếu bạn muốn phát hiện xem bạn có cần hiển thị thông báo hay không, hãy kiểm tra các ứng dụng khách sổ hiện đang mở và xem có bất kỳ chế độ hiển thị nào trong số chúng hiển thịState === 'hiển thị' hay không. Có một thông số mới được gọi là API ngân sách sẽ cho phép nhà phát triển kiểm tra xem họ có thể * không * hiển thị thông báo (tức là cho phép đẩy im lặng) nhưng điều này sẽ bị giới hạn ở một mức nhất định. –