5

PushManager.getSubscription()Was ist der Unterschied zwischen `pushManager.subscribe` und` pushManager.getSubscription` Dienst Arbeiter sind

Retrieves an existing push subscription. It returns a Promise that resolves to a PushSubscription object containing details of an existing subscription. If no existing subscription exists, this resolves to a null value.

[...]

PushManager.subscribe()

Subscribes to a push service. It returns a Promise that resolves to a PushSubscription object containing details of a push subscription. A new push subscription is created if the current service worker does not have an existing subscription.

Nach pushManager Dokumentation des MDN. Dort sind die Methoden ziemlich gleich, außer dem Punkt, der im Fall von getSubcription() mit einem Nullwert aufgelöst werden kann.

Ich bin im Grunde verstehen, dass ich einfach subscribe() verwenden kann und Service Worker wird versuchen, das Abonnement zu bekommen, falls es verfügbar ist, und auch neue erstellen, falls es nicht verfügbar ist.

=> Aber ich habe versucht, etwas anderes zu tun. Ich möchte versuchen, das Abonnement zuerst zu bekommen, wenn es mit null aufgelöst wird, werde ich versuchen, es zu abonnieren.

navigator.serviceWorker.register('./worker.js') 
    .then(function(reg) { 

     // Subscribe push manager 
     reg.pushManager.getSubscription() 
     .then(function(subscription) { 

      if(subscription){ 
       // TODO... get the enpoint here 
      } else { 
       reg.pushManager.subscribe() 
       .then(function(sub){ 
        // TODO... get the endpoint here 
       }); 
      } 

     }, function(error) { 
      console.error(error); 
     }) 
    }); 

Aber dann bin ich mit dem Fehler endete:

Uncaught (in promise) DOMException: Subscription failed - no active Service Worker

Es ist verwirrend, und ich bezweifeln dies ist eine Beschränkung von Chrome auf Push-API-of-Service Worker oder kann möglicherweise ein Fehler. Hat jemand irgendwelche Informationen über dieses seltsame Verhalten?

Antwort

Verwandte Themen