Push-уведомление не отправляется в Chrome (уровень рабочего стола)

Это код My 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'});
   });
};

Это код на стороне клиента моего браузера для захвата конечной точки, аутентификации и ключа:

 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, и веб-push отправляет push-уведомление в конечную точку, и я могу получить приветственное push-уведомление. Но тот же код в хроме не работает. т.е. он не выдает никаких ошибок и в то же время не выдает приветственное push-уведомление.

Может кто-то помочь мне с этим? Любая помощь приветствуется. Спасибо.


person Ketha Kavya    schedule 14.10.2016    source источник
comment
Это часто вызвано несоответствием между вашим ключом API GCM и вашим идентификатором отправителя (объявленным в манифесте). Проверьте их, затем откажитесь от подписки и повторно подпишитесь в браузере, чтобы получать push-уведомления.   -  person collimarco    schedule 14.10.2016
comment
Я указал номер проекта в качестве идентификатора отправителя и ключ сервера в качестве ключа API GCM.   -  person Ketha Kavya    schedule 19.10.2016
comment
Вы смотрели логи ПО? Есть ли что-нибудь в хроме?   -  person Jay    schedule 19.10.2016
comment
Нет, я ничего не получаю.   -  person Ketha Kavya    schedule 21.10.2016


Ответы (2)


Для Chrome вам необходимо установить ключ API GCM (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.

person Marco Castelluccio    schedule 14.10.2016
comment
Gcm_sender_id и ключ API GCM одинаковы? - person Ketha Kavya; 14.10.2016
comment
Нет, это две разные ценности. Идентификатор отправителя - это значение, которое указывается в манифесте приложения. - person Marco Castelluccio; 14.10.2016
comment
Я указал номер проекта в качестве идентификатора отправителя и ключ сервера в качестве ключа API GCM. - person Ketha Kavya; 14.10.2016

Если вы используете web-push, это может иметь какое-то отношение к вашим зашифрованным данным. Попробуйте следующий код для server.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));
  });
person Jay    schedule 18.10.2016
comment
VALID_SUBSCRIPTION.keys.p256dh, VALID_SUBSCRIPTION.keys.auth - это правильный ключ подписки и значения аутентификации? Я привел те же значения в web push. - person Ketha Kavya; 19.10.2016