0

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

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

+0

Это часто вызвано несоответствием между вашим ключом GCM апи и вашим идентификатором отправителя (объявленным в манифесте). Проверьте их, затем отмените подписку и переадресацию из браузера, чтобы нажимать уведомления. – collimarco

+0

Я дал номер проекта в качестве идентификатора отправителя и ключа сервера в качестве ключа GCM API. –

+0

Вы посмотрели журналы SW? Вы получаете что-нибудь в хроме? – Jay

ответ

0

Для 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.

+0

есть. Я уже установил ключ API GCM. –

+0

gcm_sender_id и ключ API GCM являются одинаковыми? –

+0

Нет, это два разных значения. Идентификатор отправителя - это значение, которое отображается в манифесте приложения. – Marco

0

Если вы используете веб-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)); 
    }); 
+0

VALID_SUBSCRIPTION.keys.p256dh, VALID_SUBSCRIPTION.keys.auth - это ключ подписки и значения auth? Я дал те же значения в веб-толчке. –