Web推送通知,未注册错误-节点JS(Web推送)

时间:2018-09-08 10:07:23

标签: push-notification web-push

我正在处理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);
      }
    })

  })


}

0 个答案:

没有答案