我正在处理Web推送通知,我已经做了所有事情,只是当我尝试发送通知时说NotRegistered
,我不知道出了什么问题。
首先,我请求用户许可,如果他们允许通知,那么我会获得endpoint
详细信息以及Vapid Keys。我将这些详细信息保存在数据库中。
我已经创建了一个带有按钮Notify Users
的UI,单击该按钮时,会对服务器进行ajax调用,该调用将从数据库中获取所有endpoints
。然后使用web-push
模块,对webpush.sendNotifications(endpoint, payload, options)
进行api调用。
但不幸的是,此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);
}
})
})
}