Web Push-уведомление, незарегистрированная ошибка - узел JS (Web Push) - PullRequest
0 голосов
/ 08 сентября 2018

Я работаю над веб-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);
      }
    })

  })


}
...