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