如何将数据从服务器传递给服务工作者

时间:2017-05-04 13:08:09

标签: javascript service-worker

我正在尝试将数据从我的服务器传递给服务工作者,但数据对于服务工作者来说是空的。

这是我的代码:

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));
});

但是标题没有得到承认。如何将数据从服务器传递给服务工作者?

1 个答案:

答案 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。您的公钥在服务器端和客户端应该相同。