Уведомление о Chrome Push: этот сайт обновлен в фоновом режиме
При внедрении уведомления об обновлении chrome мы получили последнее изменение с нашего сервера. При этом сервис-работник показывает дополнительное уведомление с сообщением
Этот сайт обновлен в фоновом режиме
Уже пробовал с предложением, размещенным здесь
https://disqus.com/home/discussion/html5rocks/push_notifications_on_the_open_web/
Но до сих пор не удалось найти ничего полезного. Есть ли какие-либо предложения?
Ответы
Ответ 1
Обычно, как только вы получаете push-сообщение от GCM (Google Cloud Messaging), вы должны показывать push-уведомление в браузере. Об этом говорится в 3-м пункте здесь:
https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web#what-are-the-limitations-of-push-messaging-in-chrome-42
Так что может случиться так, что каким-то образом вы пропускаете push-уведомление, хотя у вас есть push-сообщение от GCM, и вы получаете push-уведомление с некоторым сообщением по умолчанию, например: "Этот сайт обновлен в фоновом режиме".
Ответ 2
Я рассказывал об одной и той же проблеме, но после долгих исследований я узнал, что это связано с задержкой между событием PUSH и self.registration.showNotification(). Я только пропустил ключевое слово return перед self.registration.showNotification()
Итак, вам нужно реализовать следующую структуру кода, чтобы получить уведомление:
var APILINK = "https://xxxx.com";
self.addEventListener('push', function(event) {
event.waitUntil(
fetch(APILINK).then(function(response) {
return response.json().then(function(data) {
console.log(data);
var title = data.title;
var body = data.message;
var icon = data.image;
var tag = 'temp-tag';
var urlOpen = data.URL;
return self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
});
})
);
});
Ответ 3
Я столкнулся с этой проблемой в прошлом. По моему опыту, причиной обычно является один из трех вопросов:
- Вы не показываете уведомление в ответ на push
сообщение. Каждый раз, когда вы получаете push-сообщение на устройстве, когда
вы завершаете обработку события, уведомление должно оставаться видимым на
Устройство. Это связано с подпиской на опцию
userVisibleOnly:
true
(хотя обратите внимание, что это необязательно, и не устанавливайте ее
приведет к сбою подписки.
- Вы не вызываете
event.waitUntil()
в ответ на обработку события. В эту функцию следует передать обещание, чтобы указать браузеру, что он должен дождаться обещания, прежде чем проверять, осталось ли уведомление.
- По какой-то причине вы разрешаете обещание, переданное
event.waitUntil
, прежде чем будет показано уведомление. Обратите внимание, что self.registration.showNotification
является обещанием и асинхронным, поэтому вы должны быть уверены, что оно разрешилось до того, как решение, переданное в event.waitUntil
, будет разрешено.