PushManager.getSubscription()
Извлекает существующую принудительную подписку. Он возвращает обещание, которое преобразуется в объект PushSubscription, содержащий сведения о существующей подписке. Если существующей подписки не существует, это разрешается в нулевое значение.
[...]
PushManager.подписать()
Подписывается на услугу push-уведомлений. Он возвращает обещание, которое разрешается в объект PushSubscription, содержащий сведения о принудительной подписке. Новая принудительная подписка создается, если у текущего сервисного работника нет существующей подписки.
Согласно документации MDN pushManager
. Там методы почти такие же, за исключением того, что в случае getSubcription()
он может разрешаться с нулевым значением.
Я в основном понимаю, что могу просто использовать subscribe()
, и Service Worker попытается получить подписку, если она доступна, а также создать новую, если она недоступна.
=› Но я пытался сделать что-то еще. Сначала я хочу попробовать получить подписку, если проблема разрешится с помощью null
, я попытаюсь подписаться.
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);
})
});
Но затем я оказался с ошибкой:
Uncaught (в обещании) DOMException: подписка не удалась - нет активного сервисного работника
Это сбивает с толку, и я сомневаюсь, что это ограничение Chrome на Push API Service Worker или, возможно, ошибка. Есть ли у кого-нибудь информация об этом странном поведении?