我对服务工作者和GAE还很陌生,虽然能够注册服务工作者,但无法订阅PushManager,返回订阅为空的错误。以下是参考代码。
serviceWorkerRegistration.pushManager.getSubscription()
.then(function(subscription) {
var pushButton = document.querySelector('.js-push-button');
pushButton.disabled = false;
if (!subscription) {
console.log('subscription error ');
return;
}
console.log('subscriptioned ');
// Keep your server in sync with the latest subscriptionId
sendSubscriptionToServer(subscription);
// Set your UI to show they have subscribed for
// push messages
pushButton.textContent = 'Disable Push Messages';
isPushEnabled = true;
})
.catch(function(err) {
console.warn('Error during getSubscription()', err);
});
});
在上面的代码中,在“then”内获取到的“subscription”值为“null”,因此,控制权转移到if语句块并直接返回。
registration.pushManager.subscribe(...).then(subscription => ...)
。如果已经存在订阅,则subscribe()
将返回现有的订阅,因此不需要先调用getSubscription()
。 - Jeff Posnick