5

PushManager.getSubscription()Jakie są różnice między `` pushManager.getSubscription` pushManager.subscribe` i usługi pracownika

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.

Według dokumentacji MDN za pushManager. Tam metody są prawie takie same, z wyjątkiem punktu, który w przypadku getSubcription() może zostać rozwiązany z wartością pustą.

Zasadniczo rozumiem, że mogę po prostu użyć subscribe(), a Pracownik Serwisowy spróbuje uzyskać subskrypcję w przypadku jej dostępności, a także utworzyć nową, jeśli nie jest dostępna.

=> Ale próbowałem zrobić coś innego. Chcę spróbować najpierw uzyskać subskrypcję, jeśli zostanie rozwiązana z null spróbuję ją zasubskrybować.

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); 
     }) 
    }); 

Ale wtedy ja zakończyła się błędem:

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

Jest to mylące, i mam wątpliwości jest to ograniczenie Chrome na push API serwisu pracownik lub może ewentualnie błąd. Czy ktoś ma jakieś informacje na temat tego dziwnego zachowania?

Odpowiedz