Push notification 服务工作者-使用乏味的prv/pub键推送通知

Push notification 服务工作者-使用乏味的prv/pub键推送通知,push-notification,service-worker,Push Notification,Service Worker,几年前,我通过在Firebase上注册一个应用程序,并将注册号作为服务器端应用程序上manifest.json文件的一部分,在我正在处理的一个项目上与service worker实现了推送通知。在这种情况下,我请求用户允许通知,获得了一次浏览器注册,保存在服务器端,一切正常 我现在正试图实现一个类似的解决方案,但使用了乏味的()。 浏览器正确注册,将注册发送到服务器端应用程序,应用程序能够发送推送通知。 我遇到的问题是,至少24小时后,当我尝试向已注册的订阅发送推送通知时,我会收到Invalid

几年前,我通过在Firebase上注册一个应用程序,并将注册号作为服务器端应用程序上manifest.json文件的一部分,在我正在处理的一个项目上与service worker实现了推送通知。在这种情况下,我请求用户允许通知,获得了一次浏览器注册,保存在服务器端,一切正常

我现在正试图实现一个类似的解决方案,但使用了乏味的()。 浏览器正确注册,将注册发送到服务器端应用程序,应用程序能够发送推送通知。 我遇到的问题是,至少24小时后,当我尝试向已注册的订阅发送推送通知时,我会收到InvalidSubscription响应(410 NotRegistered)。 使用无趣,浏览器注册是否会在几个小时后过期?我是否需要每隔一定时间重新注册一次?如果是,如何进行?例如,如果用户在一天左右的时间内从未访问过该站点,我如何能够不断向他们发送通知?对于我遇到的这个问题,我找不到任何明确的参考

以下是我在软件中用于获得浏览器注册的JS代码:

function postPushReg(sub){
  var rawKey = sub.getKey ? sub.getKey('p256dh') : '';
  var key = rawKey ?
        btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) :
        '';
  var rawAuthSecret = sub.getKey ? sub.getKey('auth') : '';
  var authSecret = rawAuthSecret ?
                   btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) :
                   '';
  fetch('https://XXXXX', {
    method: 'post',
    headers: {'Content-type': 'application/json'},
    body: JSON.stringify({endpoint: sub.endpoint, key: key, authSecret: authSecret}),
  });
}

self.addEventListener('install', function(event){
  self.registration.pushManager.getSubscription()
  .then(function(sub){
    if (sub) return postPushReg(sub);
    return self.registration.pushManager.subscribe({userVisibleOnly: true,
                                    applicationServerKey: urlB64ToUint8Array('XXX')})
                                    .then(function(sub){
                                      postPushReg(sub);
                                    });
  });
});

self.addEventListener('push', function(e){
  ...
});
这是我用来发送通知的Rails/Ruby服务器端gem(webpush):

Webpush.payload_send(
        message: "msg",
        endpoint: j['endpoint'],
        p256dh: j['key'],
        auth: j['authSecret'],
        vapid: {
          subject: "mailto:XXXX",
          public_key: "XXX",
          private_key: "XXX",
        }
      )

同样,在最初的几个小时内,一切正常,然后我得到410个NotRegistered回复。

尝试这里发布的相同建议:,现在工作正常。我只注册了一次浏览器,两天后它仍然可以正常工作