Chrome Push-уведомление: этот сайт был обновлен в фоновом режиме
при реализации уведомления Chrome push мы получали последние изменения с нашего сервера. При этом сервисный работник показывает дополнительное уведомление с сообщением
этот сайт был обновлен в фоновом режиме
уже пробовал с предложением, размещенным здесь
https://disqus.com/home/discussion/html5rocks/push_notifications_on_the_open_web/
Но до сих пор не нашел ничего полезного. Есть какие-нибудь предложения ?
5 ответов
Как правило, как только вы получаете push-сообщение от GCM (Google Cloud Messaging), вы должны показать push-уведомление в браузере. Это упоминается в 3-м пункте здесь:
Так может случиться, что каким-то образом вы пропускаете push-уведомление, хотя вы получили push-сообщение от GCM, и вы получают push-уведомление с некоторым сообщением по умолчанию, таким как"этот сайт был обновлен в фоновом режиме".
я испытывал ту же проблему, но после долгого исследования я узнал, что это потому, что задержка происходит между событием PUSH и self.регистрация.showNotification(). Я пропустил только ключевое слово return перед self.регистрация.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
})
});
})
);
});
я столкнулся с этой проблемой в прошлом. По моему опыту, причина, как правило, одна из трех проблем:
- вы не показываете уведомление в ответ на толчок
сообщение. Каждый раз, когда вы получаете push-сообщение на устройстве, когда
вы заканчиваете обработку события уведомление должно быть оставлено видимым на
устройство. Это связано с подпиской на
userVisibleOnly: true
option (хотя обратите внимание, что это не является необязательным и не устанавливает его подписка на неудача. - ты не звонишь
event.waitUntil()
в ответ на обработку события. Обещание должно быть передано в эту функцию, чтобы указать браузеру, что он должен ждать разрешения обещания, прежде чем проверять, осталось ли уведомление. - по какой-то причине вы разрешаете обещание, переданное
event.waitUntil
перед отображением уведомления. Обратите внимание, чтоself.registration.showNotification
является обещанием и асинхронным, поэтому вы должны быть уверены, что он разрешен до того, как обещание переданоevent.waitUntil
решает.
Если вам нужно больше вещей, чтобы произойти во время получения события push-уведомления,showNotification()
возвращает Promise
. Таким образом, вы можете использовать классическую цепочку.
const itsGonnaBeLegendary = new Promise((resolve, reject) => {
self.registration.showNotification(title, options)
.then(() => {
console.log("other stuff to do");
resolve();
});
});
event.waitUntil(itsGonnaBeLegendary);
это работает, просто скопируйте / вставьте / измените. Заменить "возвратить себя".регистрация.showNotification () " с приведенным ниже кодом. Первая часть предназначена для обработки уведомления, вторая часть-для обработки щелчка уведомления. Но не благодарите меня, если вы не благодарите меня за часы поиска ответов в гугле.
серьезно, хотя, все спасибо Мэтту Гонту в developers.google.com
self.addEventListener('push', function(event) {
console.log('Received a push message', event);
var title = 'Yay a message.';
var body = 'We have received a push message.';
var icon = 'YOUR_ICON';
var tag = 'simple-push-demo-notification-tag';
var data = {
doge: {
wow: 'such amaze notification data'
}
};
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag,
data: data
})
);
});
self.addEventListener('notificationclick', function(event) {
var doge = event.notification.data.doge;
console.log(doge.wow);
});