Lors de l’implémentation de la notification Push chrome, nous recherchions les dernières modifications de notre serveur. Ce faisant, le technicien affiche une notification supplémentaire avec le message
Ce site a été mis à jour en arrière-plan
Déjà essayé avec la suggestion affichée ici https://disqus.com/home/discussion/html5rocks/Push_notifications_on_the_open_web/
Mais je n'ai rien trouvé d'utile jusqu'à présent. Y a-t-il une suggestion?
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, d'une manière ou d'une autre, vous sautiez la notification Push bien que vous ayez reçu un message Push de GCM et que vous obteniez une notification Push avec un message par défaut du type "Ce site a été mis à jour en arrière-plan".
J'examinais le même problème, mais après une longue recherche, je me suis rendu compte que c'était à cause d'un délai entre l'événement Push et self.registration.showNotification (). J'ai seulement manqué le mot-clé avant self.registration.showNotification ()
Vous devez donc implémenter la structure de code suivante pour obtenir une 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é. D'après mon expérience, la cause est généralement l'une des trois questions suivantes:
userVisibleOnly:
true
(bien que ceci ne soit pas facultatif, ne le définissez pas Entraînera l'échec de l'abonnement.event.waitUntil()
en réponse à la gestion de l'événement. Une promesse doit être transmise à cette fonction pour indiquer au navigateur qu'il doit attendre d'être résolue avant de vérifier si une notification est laissée affichée.event.waitUntil
avant qu'une notification ne soit affichée. Notez que self.registration.showNotification
est une promesse asynchrone, vous devez donc vous assurer qu'elle a été résolue avant que la promesse transmise à event.waitUntil
ne soit résolue.Cela fonctionne, il suffit de copier/coller/modifier. Remplacez "return self.registration.showNotification ()" par le code ci-dessous. La première partie consiste à gérer la notification, la seconde à gérer le clic de la notification. Mais ne me remerciez pas, à moins que vous ne remerciez mes heures de recherches sur Google pour obtenir des réponses.
Sérieusement, tous nos 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);
});
Si vous souhaitez que davantage d'événements se produisent au moment de la réception de l'événement de notification Push, la fonction showNotification()
renvoie une variable Promise
. Vous pouvez donc 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);