推送通知未发送到chrome(桌面级别)

时间:2016-10-14 12:05:59

标签: node.js google-chrome notifications service-worker web-push

这是我的server.js代码,它使用web-push模块发送通知。

exports.sendWelcomePushNotification = function (req, res) {
   var details = {
      endpoint: req.body.endpoint,
      key: req.body.key,
      secret: req.body.authSecret
   }
   webPush.sendNotification(details.endpoint, {TTL: 0, payload: 'You have subscribed to Pushnotification.', userPublicKey: details.key, userAuth: details.secret}).then(function () {
      res.sendStatus(200).json({message: 'User successfully subscribed'});
   });
};

这是我的浏览器客户端代码,用于捕获端点,auth和密钥:

 endpoint = subscription.endpoint;
 var rawKey = subscription.getKey ? subscription.getKey('p256dh') : '';
 key = rawKey ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) : '';
 var rawAuthSecret = subscription.getKey ? subscription.getKey('auth') : '';
 authSecret = rawAuthSecret ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) : '';

这是侦听通知的服务工作者代码:

self.addEventListener('push', function (event) {
  var payload = event.data ? event.data.text() : 'No Text Body';
  console.log(payload,'payload');
  event.waitUntil(
    self.registration.showNotification('Notify Message', {
        lang: 'la',
        body: 'You have subscribed to Pushnotification.',
        icon: 'https://pushover.net/images/icon-256.png',
        requireInteraction: true
    })
  );
});

此代码适用于firefox.i.e;当我允许通知时,发送api请求并且web推送正在向端点发送推送通知,并且我能够获得欢迎推送通知。但是chrome中的相同代码不起作用。即;它没有给出任何错误,同时也没有给出欢迎推送通知。

有人可以帮我吗?任何形式的帮助都非常感谢。 感谢。

2 个答案:

答案 0 :(得分:0)

对于Chrome,您需要设置GCM API密钥(https://github.com/web-push-libs/web-push#setgcmapikeyapikey)或使用VAPID(https://github.com/web-push-libs/web-push#using-vapid-key-for-applicationserverkey)。

我建议同时支持它们,因为Opera不支持VAPID,但适用于GCM。

答案 1 :(得分:0)

如果您正在使用网络推送,则可能会对您的加密数据有所了解。 请尝试使用以下code.js代码:

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

const VALID_SUBSCRIPTION = {
  endpoint: 'your-endpoint-id',
  keys: {
    p256dh: 'userPublicKey',
    auth: 'your-auth-secret'
 }
};

var payload = {
   title: "This is a title",
   body: "this is the body",
   icon: "images/someImageInPath.png"
}

webPush.setGCMAPIKey("your-gcmapikey");

webPush.sendNotification(VALID_SUBSCRIPTION.endpoint, {
    TTL: 10,
    payload: JSON.stringify(payload),
    userPublicKey: VALID_SUBSCRIPTION.keys.p256dh,
    userAuth: VALID_SUBSCRIPTION.keys.auth,
  })
  .then(function() {
    console.log(JSON.stringify(payload));
  });