在遵循 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 函数使用从客户端收到的注册,这种注册只有在用户在部署后点击网站时才会发生?