Отображение push-уведомлений в угловых - PullRequest
0 голосов
/ 14 июня 2019

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/

Спасибо.

1 Ответ

1 голос
/ 14 июня 2019

Похоже, вы забыли добавить всплывающее сообщение:

pushService.sendSubscriptionToTheServer(subscription).subscribe(change => {

    //-->Here you need to write popup message after notification

})
...