Угловое обещание SwPush requestSubscription никогда не разрешается - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь добавить веб-push-уведомления в угловом приложении, следуя инструкциям в https://blog.angular -university.io / angular-push-notifications /

У меня естьдобавил простой SwPush.requestSubscription(), например:

public requestSubscription() {
  this.swPush.requestSubscription({
    serverPublicKey: environment.vapidPublicKey
  })
  .then(subscription => {
    return this.save(subscription);
  })
  .catch(err => {
    console.log('Could not subscribe to notifications', err);
  });
}

Я собрал приложение, выполнив ng build --prod и использую localhost, чтобы работники службы работали.

Всплывающее окно с разрешением / блокировкой уведомлений отображается, как и ожидалось, но при нажатии кнопки Разрешить запрос requestSubscription не разрешается.

Чего мне не хватает?

Редактировать:

Я понял, что другой фрагмент кода вызывал проблему, о которой я не думал, что вначале был связан, и именно поэтому я не упомянул об этом в своем вопросе.

До requestSubscription Я создал метод для получения текущего статуса разрешений ( grant | denied | default | prompt ), используя API разрешений (если доступен), следующим образом:

public getNotificationPermissionState(): Observable<string> {
  if ( !('serviceWorker' in navigator) ) {
    return of('unsupported');
  }

  // @ts-ignore
  if (typeof navigator.permissions !== 'undefined') {
    // @ts-ignore
    return navigator.permissions.query({ name: 'notifications' })
      .then((result) => {
        return of(result.state);
      });
  }

  return of(Notification.permission);
}

Когда я полностью удалил navigator.permissions.query() позвоните и только что использовали Notification.permission обещание requestSubscription было выполнено.

Я не публикую это как ответ, если кто-то знает, почему эти двое не согласны и не хотят говорить...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...