2015-10-02 1 views
1

J'ai un Service Worker qui récupère plusieurs notifications du serveur. Le problème est que toutes les notifications dans Chrome se ferme automatiquement sauf la dernière. Qu'est-ce que je fais mal?Plusieurs notifications push Chrome se ferment automatiquement à l'exception du dernier

self.addEventListener('push', function(event) { 
var subscriptionId; 
var sessionId; 
var notification = {}; 

event.waitUntil(
    self.registration.pushManager.getSubscription().then(function(subscription) { 
     subscriptionId = subscription.endpoint.split('/'); 
     subscriptionId = subscriptionId[subscriptionId.length - 1]; 

     notification.title = 'Yay a message.'; 
     notification.icon = '/app/img/icon-256x256.png'; 
     notification.tag = 'notification-tag-' + (new Date)*1; 
     notification.messages = []; 

     //get context 
     fetch(requestUrl, 
      { 
       method: 'post', 
       body: body 
      }).then(function(response) { 
       response.json().then(function(data) { 
        sessionId = response.headers.get('SessionId'); 
        fetch(requestUrl + '?SessionId=' + sessionId, { 
         method: 'post', 
         headers: JSON.stringify({ 
          'Content-Type': 'application/json' 
         }), 
         body: JSON.stringify({ 
          data: { 
           subscriberId: subscriptionId 
          } 
         }) 
        }).then(function(responce) { 
         responce.json().then(function(data) { 
          data = data.data; 
          if (!data.chromeNotifications || !data.chromeNotifications.length) return; 
          data.chromeNotifications.forEach(function(push) { 
           notification.messages.push(push.message); 
          }); 
         }).then(function() { 
          var promises = []; 
          for(var i=0; notification.messages && i<notification.messages.length; i++) { 
           promises.push(self.registration.showNotification(notification.title, { 
            body: notification.messages[i], 
            icon: notification.icon, 
            tag: notification.tag 
           })); 
          } 
          return Promise.all(promises); 
         }); 
        }); 
       }) 
      }); 
    }).catch(function(error) { 
     console.error('Unable to get subscription data', error); 
     var title = 'An error occurred'; 
     var message = 'We were unable to get the information for this push message'; 
     var notificationTag = 'notification-error'; 
     return self.registration.showNotification(title, { 
      body: message, 
      tag: notificationTag 
     }); 
    }) 
); 

Répondre

4

avant de récupérer les notifications en attente de votre serveur, sur la ligne 13 de votre exemple, vous définissez la tag fois être unique pour le message entrant Push. Ce tag est ensuite utilisé pour chacun des messages récupérés sur votre serveur, sur la ligne 47.

La notification tag d'une notification peut être utilisée pour indiquer que, lorsqu'elle est créée, la notification doit essayer de remplacer toute notification précédente partageant le même tag avant d'en afficher un nouveau. Dans ce cas, vous écrasez à plusieurs reprises vos notifications précédentes.

La solution est de ne pas utiliser tag du tout, puisque vous voulez qu'il soit unique de toute façon. Il est logique de le conserver pour votre notification d'erreur - cela n'aide pas les utilisateurs si vous le montrez deux fois.