#node.js #google-chrome #notifications #service-worker #web-push
#node.js #google-chrome #уведомления #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'});
});
};
Это код на стороне клиента моего браузера для захвата конечной точки, авторизации и ключа:
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. то есть; когда я разрешаю уведомление, отправляется запрос api, и веб-push отправляет push-уведомление на конечную точку, и я могу получить приветственное push-уведомление. Но тот же код в Chrome не работает. т.Е. Он не выдает никаких ошибок и в то же время не выдает приветственное push-уведомление.
Может кто-нибудь помочь мне с этим? Любая помощь приветствуется. Спасибо.
Комментарии:
1. Это часто вызвано несоответствием между вашим ключом api GCM и идентификатором отправителя (объявленным в манифесте). Проверьте их, затем отпишитесь и повторно подпишитесь в браузере на push-уведомления
2. Я указал номер проекта в качестве идентификатора отправителя, а ключ сервера — в качестве ключа API GCM.
3. Вы просмотрели журналы SW? Вы получаете что-нибудь в Chrome?
4. Нет. Я ничего не получаю.
Ответ №1:
Для Chrome вам нужно либо установить ключ API GCM (https://github.com/web-push-libs/web-push#setgcmapikeyapikey ) или использовать БЕЗВКУСНЫЙ (https://github.com/web-push-libs/web-push#using-vapid-key-for-applicationserverkey ).
Я бы посоветовал поддерживать их оба, потому что Opera не поддерживает VAPID, но работает с GCM.
Комментарии:
1. gcm_sender_id и ключ API GCM совпадают?
2. Нет, это два разных значения. Идентификатор отправителя — это значение, которое указывается в манифесте приложения.
3. Я указал номер проекта в качестве идентификатора отправителя, а ключ сервера — в качестве ключа API GCM.
Ответ №2:
Если вы используете 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));
});
Комментарии:
1. VALID_SUBSCRIPTION.keys.p256dh, VALID_SUBSCRIPTION.keys. auth правильно ли указаны значения ключа подписки и авторизации? Я дал те же значения в web push.