Push-уведомления Chrome: отправляйте невидимые push-уведомления

Я хочу отправлять не только пуши с сообщениями (через fetch), но иногда и невидимый пуш (т.е. вообще не показывать уведомления), просто чтобы проверить, сколько пользователей еще подписались и как быстро они получают пуши.

Я пробовал этот код. Кажется, это работает, но на некоторых устройствах я получаю сообщение «Этот сайт был обновлен в фоновом режиме», что сбивает с толку.

self.addEventListener('push', function(event) {
    event.waitUntil(
        fetch(my_awesome_url)
        .then(function(response) {
            if (response.status !== 200) {
                throw new Error('Server code: ' + response.status);
            }

            return response.json().then(function(data) {
                if (typeof data.data !== 'object') return; // invisible push, show nothing
                var notificationData = {
                    body: data.content,
                    data: data.data,
                    tag: data.id || Math.random(),
                    icon: typeof data.data == 'object' ? data.data.image : ''
                };

                return self.registration.showNotification(data.title, notificationData);
            });
        })
        .catch(function (err) {
        })
    );
});

Как я могу на самом деле запретить браузеру показывать что-либо?


person DevSerg    schedule 07.04.2016    source источник


Ответы (1)


Вы не можете.

В вашем коде на стороне клиента вам пришлось бы написать следующую строку:

subscribe({userVisibleOnly: true});

Это связано с тем, что браузеры только поддерживают push-уведомления, когда вы показываете сообщение.

Не пытайтесь отправить сообщение до тех пор, пока это не потребуется, а затем перехватывайте ответы об ошибках для неверных подписок.

Здесь есть отличный ответ на этот вопрос с более подробной информацией: Тихие push-уведомления Google Chrome

person Matt Gaunt    schedule 07.04.2016
comment
Firefox позволяет отправлять некоторые уведомления, которые не имеют видимого эффекта для пользователя, он имеет некоторые эвристики, чтобы избежать злоупотребления этой функцией сайтами. Вы можете провести несколько экспериментов здесь: serviceworke.rs/push-quota.html. - person Marco Castelluccio; 08.04.2016