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 ?

22
demandé sur Hakam Fostok 2015-06-29 08:55:52

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:

https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web#what-are-the-limitations-of-push-messaging-in-chrome-42

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".

11
répondu Satyajit Dey 2015-07-02 09:49:16

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
                  })
              });
          })
      );
  });
21
répondu Yogendra 2015-08-19 11:57:53

j'ai rencontré ce problème dans le passé. Dans mon expérience, la cause est généralement l'une des trois questions:

  1. 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.
  2. 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.
  3. Pour une raison quelconque vous êtes à la résolution de la promesse passé à event.waitUntil avant l'affichage d'une notification. Notez que self.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.
11
répondu owencm 2016-01-04 14:28:48

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);
1
répondu Vitezslav Lindovsky 2018-09-05 15:14:36

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);
});
-1
répondu FoxDonut 2018-02-21 08:14:11