javascript - getSubscription 返回一个空订阅

标签 javascript service-worker push-api

我是服务 worker 和 GAE 的新手,我可以注册服务 worker 但无法订阅 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 block 并简单地返回。

最佳答案

最初,当用户未订阅时,getSubscription 返回的 promise 解析为 null。您需要调用 registration.pushManager.subscribe 来订阅用户(然后,下次用户访问您的站点时,getSubscription 将解析为非空值订阅)。

ServiceWorker Cookbook 上有很多例子.

一个简单的例子:

// Use the PushManager to get the user's subscription to the push service.
serviceWorkerRegistration.pushManager.getSubscription()
.then(function(subscription) {
  // If a subscription was found, return it.
  if (subscription) {
    return subscription;
  }

  // Otherwise, subscribe the user (userVisibleOnly allows to specify
  // that we don't plan to send notifications that don't have a
  // visible effect for the user).
  return serviceWorkerRegistration.pushManager.subscribe({
    userVisibleOnly: true
  });
})
.then(function(subscription) {
  // Here you can use the subscription.

关于javascript - getSubscription 返回一个空订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35332678/

相关文章:

javascript - Firefox 47 上的 pushpad 错误 : navigator. serviceWorker 未定义

javascript - 如何使用 Jasmine 2.0 测试 ES6 Promise?

javascript - CSS3 缩放图像到容器中心

javascript - WebGL:将 8 位灰度图像加载到纹理时图像无效

javascript - 使用 javascript 从本地主机 Web 服务保存 json 数据

javascript - 服务 worker : Fetch event listener only works after page reload

javascript - 如何识别 Service Worker 中正确的持久数据?

javascript - 如果我实现网络推送通知,我的个人网站是否需要隐私政策?

google-chrome - Chrome推送通知: This site has been updated in the background

javascript - 如何在 ServiceWorker 的响应中设置 cookie