Web Push-уведомление, незарегистрированная ошибка - узел JS (Web Push)
Я работаю над веб-уведомлениями, я сделал все, только когда я пытаюсь отправить уведомление, он говорит NotRegistered
Я не знаю в чем проблема.
Прежде всего, я попросил разрешения пользователя, если они позволяют уведомление, то я получаю endpoint
детали, наряду с Vapid Keys. Я сохраняю эти данные в базе данных.
Я сделал пользовательский интерфейс с кнопкой Notify Users
, когда я нажимаю на него, на сервер делается ajax-вызов, который получает все endpoints
из базы данных. А затем с помощью web-push
модуль, вызов API для webpush.sendNotifications(endpoint, payload, options)
,
Но к сожалению это promise
возвращает ошибку, говоря NotRegistered
, Я не знаю почему.
Получение конечной точки подписчика
const applicationServerKey = this.urlB64ToUint8Array(applicationServerPublicKey);
swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
}).then(function(subscription) {
document.querySelector(".user-not-status span").textContent = "Subscribed";
_this.updateSubscriptionOnServer(subscription);
try {
_this.displaySubscription(subscription);
} catch (e) {}
isSubscribed = true;
_this.updateBtn();
})
.catch(function(err) {
console.log('Failed to subscribe the user: ', err);
_this.updateBtn();
});
Вот так я получаю это на сервере
{
ep: '{"endpoint":"https://fcm.googleapis.com/fcm/send/fRpuIScAraU:APA91bHeJLkDavIIifAoq6CXoPcuhZ16982Kqsw0B8Q6jCtTkoH15t_EFcciyYYGrSr2LRXwc6WMwx_3zUrzPzHmOCzrLQz4ei-nFk-QRXGE2wf_BenNycyZbTYAkbGruykvCL1lzl24","expirationTime":null,"keys":{"p256dh":"BH1PgQ322AT2Ctx51qkpdzDykWCAGqgqiJwVss6mMfqQcLGkdZVZscqsjDeFSh51qKIs2LB466aym0_aoHJ-afk","auth":"2akIxCTVBWPeQW657uXg4w"}}',
dc: 'Desktop',
cy: 'Pakistan',
ad: 'Garam Chashma Rd, Chitrāl, Chitral, Khyber Pakhtunkhwa, Pakistan',
st: 'Subscribed',
tm: '3:02:58 PM',
dt: '8/9/2018',
dtt: 'Sep 8, 2018'
}
Все они сохраняются в базе данных, и когда я хочу уведомить пользователя, эта конечная точка передается JSON.parse()
, а затем вызывается следующий код:
function sendPushMessage(data) {
const endpoints = data;
const vapidKeys = webpush.generateVAPIDKeys();
const publicKey = 'BMVoRmGYOTtbhSoMXpaEstem7UIj5zANRWNhB--Z5J0FOyynUkPNJHT8-kUQxJJvX5_TxCbtfEOaA_9t1qB9pd8';
const privateKey = '<private-key>';
const options = {
vapidDetails: {
subject: 'https://developers.google.com/web/fundamentals/',
publicKey: publicKey,
privateKey: privateKey
},
TTL: 60 * 60
};
getPushData().then(function(push_data) {
webpush.sendNotification(
JSON.parse(endpoints[0].end_point),
JSON.stringify(push_data),
options
).then(function() {
console.log("Notification Sent !");
}).catch(function(err) {
if (err.statusCode) {
console.log(err.body);
} else {
console.log(err.message);
}
})
})
}