App.ts
const VAPID_PUBLIC = "XXX"
export class AppComponent {
title = 'web';
constructor(swPush: SwPush, pushService: PushNotificationService) {
if (swPush.isEnabled) {
swPush
.requestSubscription({
serverPublicKey: VAPID_PUBLIC,
})
.then(subscription => {
pushService.sendSubscriptionToTheServer(subscription).subscribe(change => {
})
})
.catch(console.error)
}
}
нажимные notification.service.ts
import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'
const SERVER_URL = 'http://localhost:3000/subscription'
@Injectable()
export class PushNotificationService {
constructor(private http: HttpClient) {}
public sendSubscriptionToTheServer(subscription: PushSubscription) {
return this.http.post(SERVER_URL, subscription)
}
}
server.js
const express = require('express');
const webpush = require('web-push');
const cors = require('cors');
const bodyParser = require('body-parser');
const PUBLIC_VAPID =
'XXX';
const PRIVATE_VAPID = 'XXX';
const fakeDatabase = [];
const app = express();
app.use(cors());
app.use(bodyParser.json());
webpush.setVapidDetails('mailto:domain@test.com', PUBLIC_VAPID, PRIVATE_VAPID);
app.post('/subscription', (req, res) => {
const subscription = req.body;
fakeDatabase.push(subscription);
});
app.post('/sendNotification', (req, res) => {
const notificationPayload = {
notification: {
title: 'New Notification',
body: 'This is the body of the notification',
},
};
const promises = [];
fakeDatabase.forEach(subscription => {
promises.push(
webpush.sendNotification(
subscription,
JSON.stringify(notificationPayload)
)
);
});
Promise.all(promises).then(() => res.sendStatus(200));
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
С помощью приведенного выше кода я пытаюсь отображать уведомления с использованием угловых и экспресс. Я запустил сервер на http://localhost:3000
, затем запустил ng build --prod
then http-server dist/apps/projectName
.
Запрос уведомлений работает независимо от того, разрешить или нет, при нажатии кнопки «Разрешение» я получаю ответ 200 (проверка на вкладке «Сеть» Chrome Dev Tools). Но уведомление не появляется и не отображается в браузере. Мне нужна помощь в исправлении этого.
Я попробовал код из https://malcoded.com/posts/angular-push-notifications/
Спасибо.