我正在尝试将数据从我的服务器传递给服务工作者,但数据对于服务工作者来说是空的。
这是我的代码:
var webpush = require('web-push');
var message = sendData.message;
var subscription_info = sendData.subscription_info;
webpush.setVapidDetails(
'mailto:xxx',
public_key,
private_key
);
webpush.setGCMAPIKey('xxx');
webpush.sendNotification(subscription_info, String(message));
这是console.log(消息):
{ text: 'message',
title: 'title',
icon_image: 'http://google.com/xxx.jpg',
link: 'www.google.com' }
这是我的服务人员:
self.addEventListener('push', function(event) {
var title = event.data.title;
var options = {
body: event.data.text,
requireInteraction: true
};
event.waitUntil(self.registration.showNotification(title, options));
});
但是标题没有得到承认。如何将数据从服务器传递给服务工作者?
答案 0 :(得分:1)
在NodeJS端尝试以下代码。你缺少将JSON消息对象转换为Buffer(二进制)。
var webpush = require('web-push');
var message = sendData.message;
var subscription_info = sendData.subscription_info;
webpush.setVapidDetails(
'mailto:xxx',
<Vapid public key>,
<Vapid private key>
);
webpush.setGCMAPIKey('xxx');
message = new Buffer.from(JSON.stringify(message)); // missing code.
webpush.sendNotification(subscription_info, String(message));
在订阅服务工作者时,您需要发送带有发送订阅请求的加密公钥,并使用该公钥从服务器发送推送通知。
const vapidPublicKey = '<Vapid public key>';
const convertedVapidKey = urlBase64ToUint8Array(vapidPublicKey);
registration.pushManager.subscribe({
userVisibleOnly: true, //Always show notification when received
applicationServerKey: convertedVapidKey
})
.then(function (subscription) {
console.log(subscription) // use this subscription info on server side
console.info('Push notification subscribed.');
})
.catch(function (error) {
console.error('Push notification subscription error: ', error);
});
<强> PS。您的公钥在服务器端和客户端应该相同。