2016-08-08 7 views
0

Ich habe Push-Benachrichtigungen, , wenn ich die Seite dann testen über curl-Befehle, ich habe die Benachrichtigung erhalten!Erhalten Sie Benachrichtigungen 24/7 über service-worker.js in Chrome

Aber nach einer Weile (vielleicht 1-2 Minuten), wenn ich die Registerkarte, dass die Push-Benachrichtigungen Bereich registriert wurde schließen, dann testen Sie die Benachrichtigungen erneut, ich kann nicht die Benachrichtigungen erhalten. Dies passiert normalerweise mehr in Google Chrome in Handys.

Die Problemumgehung, die ich hier gemacht habe, ist, dass ich zuerst auf die Seite der Scoped-Seite gehen muss, dann, wenn ich die Benachrichtigung erneut teste, funktioniert es jetzt. Obwohl ich das nicht haben kann, weil ich die Kunden brauche, um Benachrichtigungen zu erhalten, ohne ständig auf der Seite zu sein.

Hier sind meine Push-Veranstaltung in Servicemitarbeitern

self.addEventListener('push', function(event) { 
    var SOME_API_ENDPOINT = "https://somewhre.com/push_notification_api/service_worker_endpoint"; 

    event.waitUntil(
     fetch(SOME_API_ENDPOINT, { 
       method: 'post',  
       headers: { 
        "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" 
       }, 
       body: 'subscription_id=' + subscriptionId 
      }).then(function(response) { 

      return response.json().then(function(data) { 
       var title = data.notification.title; 
       var message = data.notification.message; 
       var icon = base + "assets/images/logo_notification.png"; 
       var notificationTag = data.notification.url; 
       // var notificationTag = 'https://google.com'; //data.notification.tag; 
       return self.registration.showNotification(title, { 
        body: message, 
        icon: icon, 
        tag: notificationTag 
       }); 
      }); 
     }) 
    ); 
}); 

Wie finde ich meine Service-Mitarbeiter 24/7 selbst machen, obwohl ich in der Seite des Bereichs bei der Registrierung von SW bin nicht?

Muss ich eventListeners 'install', 'activate' und 'fetch' verwenden?

Antwort

0

Servicearbeiter scheinen zu bestehen, aber wirklich nicht - eine neue Instanz spinnt als Reaktion auf Ereignisse. Dies ist der Fall, wenn Sie auf Mobilgeräten neu starten, um ein Push-Ereignis zu behandeln. Es gibt jedoch auch Vorschläge, dass beschäftigte Service-Mitarbeiter mehrere Instanzen parallel zulassen sollten.

Ihr subscriptionId ist ein globaler Parameter, also kann es auch undefined sein, wenn Ihr push Ereignis ausgelöst wird.

Um dies zu beheben, müssen Sie die subscriptionId in einer Art von Speicher (Maylber IndexedDB) zu halten.

Ich denke auch, damit ein Service-Mitarbeiter bestehen bleibt, muss ein install Ereignis haben und dieses Ereignis muss erfolgreich sein.

Verwandte Themen