2

在遵循 Google 关于推送通知的教程之后,我将推送通知功能添加到了我的 Gatsby + Netlify 支持的 PWA 网站。

它有效,但有一个错误。

步骤 1客户端,它订阅获取服务工作者注册。

swRegistration.pushManager.subscribe({
  userVisibleOnly: true
})
.then(subscription => {
  console.log('User is subscribed:', subscription);
  isSubscribed = true;
})
.catch(err => {
  if (Notification.permission === 'denied') {
    console.warn('Permission for notifications was denied');
  } else {
    console.error('Failed to subscribe the user: ', err);
  }
});

第2步 然后从服务器端(Netlify Lambda函数),我们需要粘贴从这行代码从客户端打印出来的注册对象

.then(subscription => { console.log('用户已订阅:', subscription); isSubscribed = true; })

为了使其工作(服务器端/ lambda函数):

const webPush = require('web-push');

const pushSubscription = YOUR_SUBSCRIPTION_OBJECT;

// TODO 4.3a - include VAPID keys

const payload = 'Here is a payload!';

const options = {
  TTL: 60,

  // TODO 4.3b - add VAPID details
  vapidDetails: {
    subject: "mailto:my@gmail.com",
    publicKey: vapidPublicKey,
    privateKey: vapidPrivateKey,
  },
};

webPush.sendNotification(
  pushSubscription,
  payload,
  options
);

现在,您可能已经注意到了这个问题。

在本地开发时,我可以通过以下方式启动我的 Gatsby PWA 网站

盖茨比建造&&盖茨比服务

然后它从 Gatsby PWA 客户端打印出注册对象。然后我可以将它(注册对象)粘贴到 Netlify lambda 函数中,然后启动我的 Netlify Lambda 函数

网络化开发

但是在部署 Garsby + Netlify PWA 网站时,lambda 函数是与 PWA 一起部署的,那么如何确保 lambda 函数使用从客户端收到的注册,这种注册只有在用户在部署后点击网站时才会发生?

4

0 回答 0