serviceworker
serviceworker copied to clipboard
Регистрация двух воркеров. зачем? и некоторые проблемы
Суть. В гайде описано что регистрируется один воркер firebase-ом (и этот вокрер должен быть в папке serviceworker, а не в корне приложения), второй (по сути должен быть пустой, но он тот же самый) уже в файле app.js.
Вопрос. зачем? Окей сделал как в гайде - пуши не отображаются. Они приходят но их не видно. Добавил в firebase-messaging-sw.js
такой код:
self.addEventListener('push', function(event) {
console.log('[Service Worker] Push Received.');
console.log(`[Service Worker] Push had this data: "${event.data.text()}"`);
const title = 'Push Codelab';
const options = {
body: 'Yay it works.',
icon: 'images/icon.png',
badge: 'images/badge.png'
};
event.waitUntil(self.registration.showNotification(title, options));
});
И пуши стали появляться. Смысл onMessage
на 90 строке в app.js
если он не работает. Проверил в дебаге - navigator.serviceWorker.ready.then
не срабатывает вообще.
Что-то не то вы дебажите или что-то не то делаете.
Проверьте как работает приложение. После нажатия кнопки Send, у вас в логе должна появится запись Message received
, что значит, что onMessage
работает.
Один сервисворкер нужен для получения уведомлений в фоне от Firebase.
Второй нужен для отображения уведомлений в onMessage
.
Незачем создавать пустой сервисворкер во втором случае если можно использовать тот же воркер, что мы используем в фоне.
Так же имеет смысл делать не пустой сервсиворкер для обработки событий уведомления.
Про onMessage
я довольно подробно написал в статье.
и этот вокрер должен быть в папке serviceworker, а не в корне приложения
Наоборот. firebase-messaging-sw.js
должен находится в корне (см. исходники), но конкретно в этом проекте это не так потому, что он запускается в GitHub Pages по адресу https://peter-gribanov.github.io/serviceworker/ и изменить этот путь нельзя.
Именно поэтому, в проект скопирована оригинальная библиотека и в ней изменен путь к firebase-messaging-sw.js
onMessage
то работает, но само уведомление не показывается. Код отвечающий за отображение не работает ибо navigator.serviceWorker.ready.then
на сроке 103 не срабатывает.
На счет пути воркера. В официальной либе без папки serviceworker
, да это уже нашел.
Может вы отключили показ уведомлений. Проверьте значение переменной permission
.
Я только, что установил голый Firefox и на нем все сразу работает.
Расскажите подробней, что вы делаете и в каком браузере?
Делаю все в хроме последней версии.
Делаю так:
Скачал проект с гитхаба. Так как он требует либо https или локаль то поставил приложение в хром для локального сервера.
Создал папку, все скачанное переместил туда. Открываю страницу. Нажимаю на Register
. Разрешаю показ уведомлений. Нажимаю Send и ничего. В консоли все появляется но само уведомление не показывается.
Попробовал по вашему пути. У меня все работает.
У меня стояла принудительная проверка, что соединение по HTTPS. Я отключил ее. Проверьте еще раз. Может с этим проблема.
Проверьте права показа уведомлений:
Может вы на локале запускаете не по адресу /serviceworker/
?
В этом случае у вас не будут совпадать пути к сервисворкерам.
Пути я правил. Не знаю в чем дело получается. Уведомления разрешал.
Странно это в общем. но ладно.
Спасибо за гайд. Очень полезно)
Подскажите пожалуйста. Как сделать что бы пуши отображались при закрытом браузере?
Если вы запускаете приложение в корне, то в этом месте вам нужно изменить путь на /firebase-messaging-sw.js
и здесь подключить оригинальную библиотеку:
</body>
</html>
<script type="text/javascript" src="//www.gstatic.com/firebasejs/3.7.2/firebase.js"></script>
<script src="app.js"></script>
В таком виде у меня тоже все работает
Как сделать что бы пуши отображались при закрытом браузере?
За отображение уведомлений при закрытом браузере отвечает сервисворкер firebase-messaging-sw.js
. Читайте подробней в статье.
Посмотрел сделал - не работает.
Даже не знаю чем вам помочь :worried: Попробуйте запустить в Firefox
Это уже скорее всего от того что хром полностью закрывается.
Может подскажете. как разрешить проблему с пушами в Safari?
Спасибо.
как разрешить проблему с пушами в Safari?
Safari не поддерживает стандарт push-уведомлений.
Вроде бы, в Safari есть своё API для push-уведомлений. Я его не смотрел. Ничего сказать по этому поводу не могу. Можете посмотреть этот гайд.
Спасибо!
Вечно с эпл проблемы.
Не знаю, может это баг но на маке, в хроме не грузится иконка которую я высылаю. это нормально? там просто иконка хрома.
там просто иконка хрома
На моей практике, на некоторых мобильных устройствах вместо иконки отображается значек хрома. Я пытался это исправить различными методами, но у меня не получилось. Проблема ушла сама собой после обновления версии Android. Возможно на маке что-то аналогичное.