2016-08-08 2 views
0

Gcm Push-Benachrichtigung sendet ordnungsgemäß an Endpunkte, wenn der Browser geöffnet ist: Benachrichtigungen, die in JSON-Datei sind.gcm Push-Benachrichtigung: keine tatsächliche Nachricht anzeigen, öffnen Sie den Browser

serviceWorker.js

'use strict'; 
self.addEventListener('install', function(event) { 
    self.skipWaiting(); 
    console.log('Installed', event); 
}); 

    self.addEventListener('activate', function(event) { 

    console.log('Activated', event); 
}); 
self.addEventListener('push', function(event) { 
    console.log('Started', self); 
    self.addEventListener('install', function(event) { 
     self.skipWaiting(); 
    }); 

    self.addEventListener('activate', function(event) { 
     console.log('Activated', event); 
    }); 

    self.addEventListener('push', function(event) { 
     var url = "http://localhost/pntest/gmpush1.json?param="+Math.random(); 
     event.waitUntil(
      fetch(url).then(function(response) { 
       if (response.status !== 200) { 
        console.log('Problem. Status Code: ' + response.status); 
        throw new Error(); 
       } 
       // Examine the text in the response 
       return response.json().then(function(data) { 

        if (data.error || !data.notification) { 
         console.error('The API returned an error.', data.error); 
         throw new Error(); 
        } 

        var promises = []; 
          for(var i=0; data.notification && i < data.notification.length; i++) { 
           promises.push(self.registration.showNotification(data.notification[i].title, { 
            body: data.notification[i].body, 
            'renotify': true, 
            icon: data.notification[i].icon 
            //tag: notification.tag 
           })); 
          } 
          return Promise.all(promises); 
       }); 
      }) 
     ); 
    }); 

    self.addEventListener('notificationclick', function(event) { 
     console.log('Notification click: tag ', event.notification.tag); 
     event.notification.close(); 
     var newurl = event.notification.data.newurl; 
     console.log(newurl.updatedurl); 
     var url = newurl.updatedurl; 
     event.waitUntil(
      clients.matchAll({ 
       type: 'window' 
      }) 
      .then(function(windowClients) { 
       console.log(url); 
       for (var i = 0; i < windowClients.length; i++) { 
        var client = windowClients[i]; 
        if (client.url === url && 'focus' in client) { 
         return client.focus(); 
        } 
       } 
       if (clients.openWindow) { 
        return clients.openWindow(url); 
       } 
      }) 
     ); 

    }); 
});  

gcmpush1.json

{"notification": [{"body": "Test data", "url": "https://www.google.com/", "icon": "http://www.wired.com/wp-content/uploads/2015/09/google-logo-1200x630.jpg", "title": "Test Notification"}]} 

Wenn Browser geöffnet ist, zeigt es die ursprüngliche Nachricht

Test-Mitteilung

Wenn der Client-Browser offline (nicht geöffnet) ist, während der Auslöser ausgelöst wird. Wenn der Client-Browser Wiedereröffnung i ursprüngliche Nachricht erhalten nehme aber, was ich bekommen ist

Website im Hintergrund aktualisiert wurde

In meinem curl Aufruf, die ich verwendet habe 'time_to_live' = 2419200 .

Antwort

1

Immer, wenn die Benachrichtigung beim Laden der Daten im Chrome-Benachrichtigungsfenster fehlschlug und das 'PUSH' -Ereignis erfolgreich generiert wurde. Es wird angezeigt "Site wurde im Hintergrund aktualisiert". (Nothing mit Benachrichtigung Lieferung von Locke zu tun, es kann in Ordnung sein.)

Paare von Beobachtungen von Ihnen Servicemitarbeiter Code:

1). Sie verwenden den localhost-Pfad zum Abrufen von Daten, verursachen ein Problem beim Laden von Benachrichtigungsdaten, während localhost offline ist.

var url = "http://localhost/pntest/gmpush1.json?param="+Math.random(); 

2). Sie verwenden zwei 'PUSH' Event-Code in Ihrer SW. kann Arbeit in einer Funktion einwickeln.

self.addEventListener('push', function(event) {... 

Sie können unter URL für die Erstellung von einfachen Service-Worker beziehen, um dynamische Daten für Push-Benachrichtigungen zu erhalten.

https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web?hl=en

Verwandte Themen