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?
Jeszcze raz dziękuję! :) –