In diesem Codelab erfahren Sie Schritt für Schritt, wie Sie einen Push-Benachrichtigungsserver erstellen. Am Ende des Codelabs haben Sie einen Server, der:
- Verfolgt Push-Benachrichtigungsabos (d.h., der Server erstellt einen neuen Datenbankeintrag, wenn ein Client Push-Benachrichtigungen aktiviert, und löscht einen vorhandenen Datenbankeintrag, wenn ein Client Push-Benachrichtigungen deaktiviert)
- Sendet eine Push-Benachrichtigung an einen einzelnen Client
- Sendet eine Push-Benachrichtigung an alle abonnierten Clients
In diesem Codelab geht es darum, dass Sie durch praktische Übungen lernen. Konzepte werden nur wenig behandelt. Weitere Informationen zu Push-Benachrichtigungen finden Sie unter Wie funktionieren Push-Benachrichtigungen?.
Der Clientcode dieses Codelabs ist bereits vollständig. In diesem Codelab implementieren Sie nur den Server. Informationen zum Implementieren eines Push-Benachrichtigungsclients finden Sie im Codelab: Build a push notification client.
Browserkompatibilität
Dieses Codelab funktioniert mit den folgenden Kombinationen aus Betriebssystem und Browser:
- Windows: Chrome, Edge
- macOS: Chrome, Firefox
- Android: Chrome, Firefox
Dieses Codelab funktioniert nicht mit den folgenden Betriebssystemen (oder Betriebssystem- und Browserkombinationen):
- macOS: Brave, Edge, Safari
- iOS
Anwendungs-Stack
- Der Server basiert auf Express.js.
- Die web-push-Node.js-Bibliothek übernimmt die gesamte Push-Benachrichtigungslogik.
- Abonnementdaten werden mit lowdb in eine JSON-Datei geschrieben.
Sie müssen keine dieser Technologien verwenden, um Push-Benachrichtigungen zu implementieren. Wir haben uns für diese Technologien entschieden, weil sie ein zuverlässiges Codelab ermöglichen.
Einrichtung
Authentifizierung einrichten
Bevor Push-Benachrichtigungen funktionieren, müssen Sie Ihren Server und Client mit Authentifizierungsschlüsseln einrichten. Weitere Informationen finden Sie unter Web-Push-Protokollanfragen signieren.
- Öffnen Sie das Terminal.
- Führen Sie im Terminal npx web-push generate-vapid-keysaus. Kopieren Sie die Werte für den privaten und den öffentlichen Schlüssel.
- Öffnen Sie .envund aktualisieren SieVAPID_PUBLIC_KEYundVAPID_PRIVATE_KEY. Setzen SieVAPID_SUBJECTaufmailto:test@test.test. Alle diese Werte müssen in doppelte Anführungszeichen gesetzt werden. Nachdem Sie die Änderungen vorgenommen haben, sollte die Datei.envetwa so aussehen:
VAPID_PUBLIC_KEY="BKiwTvD9HA…"
VAPID_PRIVATE_KEY="4mXG9jBUaU…"
VAPID_SUBJECT="mailto:test@test.test"
- Öffnen Sie public/index.js.
- Ersetzen Sie VAPID_PUBLIC_KEY_VALUE_HEREdurch den Wert Ihres öffentlichen Schlüssels.
Abos verwalten
Ihr Client übernimmt den Großteil des Abovorgangs. Ihr Server muss hauptsächlich neue Push-Benachrichtigungsabos speichern und alte Abos löschen. Diese Abos ermöglichen es Ihnen, in Zukunft Nachrichten an Clients zu senden. Weitere Informationen zum Abo-Prozess finden Sie unter Client für Push-Benachrichtigungen abonnieren.
Neue Aboinformationen speichern
- Klicken Sie auf dem App-Tab auf Service Worker registrieren. Im Statusfeld sollte eine Meldung ähnlich der folgenden angezeigt werden:
Service worker registered. Scope: https://example.com
- Klicken Sie auf dem App-Tab auf Push-Benachrichtigungen abonnieren. Ihr Browser oder Betriebssystem fragt Sie wahrscheinlich, ob Sie der Website erlauben möchten, Ihnen Push-Benachrichtigungen zu senden. Klicken Sie auf Zulassen (oder die entsprechende Formulierung, die in Ihrem Browser/Betriebssystem verwendet wird). Im Statusfeld sollte eine Meldung ähnlich der folgenden angezeigt werden:
Service worker subscribed to push.  Endpoint: https://fcm.googleapis.com/fcm/send/…
- Öffnen Sie das Terminal, um die Logs zu sehen. Sie sollten /add-subscriptiongefolgt von einigen Daten sehen./add-subscriptionist die URL, an die der Client eine POST-Anfrage sendet, wenn er Push-Benachrichtigungen abonnieren möchte. Die folgenden Daten sind die Aboinformationen des Kunden, die Sie speichern müssen.
- Öffnen Sie server.js.
- Aktualisieren Sie die Logik des /add-subscription-Routen-Handlers mit dem folgenden Code:
app.post('/add-subscription', (request, response) => {
  console.log('/add-subscription');
  console.log(request.body);
  console.log(`Subscribing ${request.body.endpoint}`);
  db.get('subscriptions')
    .push(request.body)
    .write();
  response.sendStatus(200);
});
Alte Aboinformationen löschen
- Kehren Sie zum App-Tab zurück.
- Klicken Sie auf Push-Benachrichtigungen deaktivieren.
- Sehen Sie sich die Logs noch einmal an. Sie sollten /remove-subscriptiongefolgt von den Aboinformationen des Kunden sehen.
- Aktualisieren Sie die Logik des /remove-subscription-Routen-Handlers mit dem folgenden Code:
app.post('/remove-subscription', (request, response) => {
  console.log('/remove-subscription');
  console.log(request.body);
  console.log(`Unsubscribing ${request.body.endpoint}`);
  db.get('subscriptions')
    .remove({endpoint: request.body.endpoint})
    .write();
  response.sendStatus(200);
});
Benachrichtigungen senden
Wie unter Push-Nachricht senden beschrieben, werden Push-Nachrichten nicht direkt von Ihrem Server an Clients gesendet. Stattdessen wird ein Push-Dienst verwendet. Ihr Server startet im Grunde nur den Prozess des Push-Nachrichtensendens an Clients, indem er Webdienst-Anfragen (Web-Push-Protokollanfragen) an einen Webdienst (den Push-Dienst) sendet, der dem Browseranbieter gehört, den Ihr Nutzer verwendet.
- Aktualisieren Sie die Logik des /notify-me-Routen-Handlers mit dem folgenden Code:
app.post('/notify-me', (request, response) => {
  console.log('/notify-me');
  console.log(request.body);
  console.log(`Notifying ${request.body.endpoint}`);
  const subscription = 
      db.get('subscriptions').find({endpoint: request.body.endpoint}).value();
  sendNotifications([subscription]);
  response.sendStatus(200);
});
- Aktualisieren Sie die Funktion sendNotifications()mit dem folgenden Code:
function sendNotifications(subscriptions) {
  // TODO
  // Create the notification content.
  const notification = JSON.stringify({
    title: "Hello, Notifications!",
    options: {
      body: `ID: ${Math.floor(Math.random() * 100)}`
    }
  });
  // Customize how the push service should attempt to deliver the push message.
  // And provide authentication information.
  const options = {
    TTL: 10000,
    vapidDetails: vapidDetails
  };
  // Send a push message to each client specified in the subscriptions array.
  subscriptions.forEach(subscription => {
    const endpoint = subscription.endpoint;
    const id = endpoint.substr((endpoint.length - 8), endpoint.length);
    webpush.sendNotification(subscription, notification, options)
      .then(result => {
        console.log(`Endpoint ID: ${id}`);
        console.log(`Result: ${result.statusCode}`);
      })
      .catch(error => {
        console.log(`Endpoint ID: ${id}`);
        console.log(`Error: ${error} `);
      });
  });
}
- Aktualisieren Sie die Logik des /notify-all-Routen-Handlers mit dem folgenden Code:
app.post('/notify-all', (request, response) => {
  console.log('/notify-all');
  response.sendStatus(200);
  console.log('Notifying all subscribers');
  const subscriptions =
      db.get('subscriptions').cloneDeep().value();
  if (subscriptions.length > 0) {
    sendNotifications(subscriptions);
    response.sendStatus(200);
  } else {
    response.sendStatus(409);
  }
});
- Kehren Sie zum App-Tab zurück.
- Klicken Sie auf Benachrichtigen. Sie sollten eine Push-Benachrichtigung erhalten. Der Titel sollte Hello, Notifications!und der TextkörperID: <ID>sein, wobei<ID>eine zufällige Zahl ist.
- Öffnen Sie Ihre App in anderen Browsern oder auf anderen Geräten und versuchen Sie, Push-Benachrichtigungen zu abonnieren. Klicken Sie dann auf die Schaltfläche Alle benachrichtigen. Sie sollten auf allen Ihren abonnierten Geräten dieselbe Benachrichtigung erhalten. Die ID im Text der Push-Benachrichtigung sollte also dieselbe sein.
Nächste Schritte
- Weitere Informationen zur Funktionsweise von Push-Benachrichtigungen finden Sie unter Push-Benachrichtigungen – Übersicht.
- Im Codelab: Build a push notification client (Codelab: Push-Benachrichtigungsclient erstellen) erfahren Sie, wie Sie einen Client erstellen, der die Berechtigung für Benachrichtigungen anfordert, das Gerät für den Empfang von Push-Benachrichtigungen registriert und einen Service Worker verwendet, um Push-Nachrichten zu empfangen und als Benachrichtigungen anzuzeigen.
 
 
        
        