Chrome Push Notification: ce site a été mis à jour en arrière-plan
lors de la mise en œuvre de la notification chrome push, nous étions en train de récupérer la dernière modification de notre serveur. Ce faisant, le travailleur du service affiche une notification supplémentaire avec le message
Ce site a été mis à jour en arrière-plan
déjà essayé avec la suggestion postée ici
https://disqus.com/home/discussion/html5rocks/push_notifications_on_the_open_web/
Mais ne pouvait pas trouver quelque chose d'utile jusqu'à aujourd'hui. Est-il une suggestion ?
5 réponses
généralement, dès que vous recevez un message push de GCM (Google Cloud Messaging), vous devez afficher une notification push dans le navigateur. Ceci est mentionné sur le 3ème point ici:
il se peut donc que vous sautiez la notification push même si vous avez reçu un message push de GCM et vous reçoivent une notification push avec un message par défaut comme "ce site a été mis à jour en arrière-plan".
j'exprimais le même problème mais après une longue recherche j'ai appris à savoir que c'est parce que le retard se produit entre L'événement PUSH et moi-même.enregistrement.showNotification (). J'ai seulement manqué le mot-clé retour avant moi-même.enregistrement.showNotification ()
Vous devez donc mettre en œuvre la structure de code suivante pour recevoir la notification:
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
})
});
})
);
});
j'ai rencontré ce problème dans le passé. Dans mon expérience, la cause est généralement l'une des trois questions:
- vous ne montrez pas de notification en réponse à la poussée
message. Chaque fois que vous recevez un message push sur l'appareil, lorsque
vous terminez le traitement de l'événement une notification doit être laissée visible sur
appareil. Ceci est dû à l'abonnement avec le
userVisibleOnly: true
option (bien que ce ne soit pas optionnel, et ne pas le définir) entraînera l'abonnement à échouer. - Vous n'êtes pas à l'appel de
event.waitUntil()
en réponse à la manipulation de l'événement. Une promesse doit être passée dans cette fonction pour indiquer au navigateur qu'il doit attendre que la promesse se résolve avant de vérifier si une notification est laissée affichage. - Pour une raison quelconque vous êtes à la résolution de la promesse passé à
event.waitUntil
avant l'affichage d'une notification. Notez queself.registration.showNotification
est une promesse et asynchrone, donc vous devez être sûr qu'il a résolu avant que la promesse passé àevent.waitUntil
résoudre.
si vous avez besoin de plus de choses au moment de recevoir l'événement de notification push, le showNotification()
retourne un Promise
. Donc vous pouvez utiliser le chaînage classique.
const itsGonnaBeLegendary = new Promise((resolve, reject) => {
self.registration.showNotification(title, options)
.then(() => {
console.log("other stuff to do");
resolve();
});
});
event.waitUntil(itsGonnaBeLegendary);
Cela fonctionne, il suffit de copier/coller/modifier. Remplacer le "retour de l'auto.enregistrement.showNotification () " avec le code ci-dessous. La première partie consiste à gérer la notification, la deuxième partie est chargée de la notification du clic. Mais ne me remerciez pas, à moins que vous ne remerciiez mes heures à chercher des réponses sur Google.
Sérieusement, tous les remerciements vont à Matt Gaunt sur 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);
});