Benachrichtigt werden, wenn etwas fertig ist

Der Sinn des ganzen Produkts ist der Moment, in dem ein Job fertig wird, während Sie woanders sind. Progress Watch liefert das über Web Push, direkt vom Server an Ihren Browser — Desktop und Telefon über einen Mechanismus, und nichts dazwischen gehört uns.

Einschalten

Push ist pro Bereich opt-in. Öffnen Sie einen Bereich, drücken Sie Benachrichtigen, und dieser Browser ist für diesen Bereich registriert und für keinen anderen. Bis Sie drücken, wird nichts über Sie gespeichert, und den Bereich zu entfernen meldet ihn wieder ab.

Auf dem Telefon zuerst die Seite installieren

iOS liefert Web Push nur an eine Seite, die zum Home-Bildschirm hinzugefügt wurde, und daran führt kein Weg vorbei: Öffnen Sie den Bereich in Safari, Teilen, Zum Home-Bildschirm, und drücken Sie Benachrichtigen von dort. Android und Desktop funktionieren aus einem gewöhnlichen Tab.

Das Installieren hat auf iOS einen zweiten Vorteil. Safari löscht den lokalen Speicher einer gewöhnlichen Seite nach sieben Tagen ohne Besuch, eine installierte Web-App ist davon ausgenommen — und in diesem Speicher liegt Ihre Liste der Bereiche. Es gibt kein Konto, aus dem sie sich wiederherstellen ließe.

Ein Baum aus Schritten ist eine Benachrichtigung

Jede Aufgabe, die fertig wird, benachrichtigt, auch jeder Schritt eines Jobs. Sie stapeln sich nicht: Ein Schritt ersetzt die vorherige Benachrichtigung seines Jobs an Ort und Stelle, statt sie zu ergänzen, ein Deploy aus zehn Schritten liest sich also als eine Zeile, die sich immer wieder ändert, und nur der Abschluss des Jobs selbst meldet sich erneut.

Was die Beteiligten erfahren

Nutzdaten sind für den Browser verschlüsselt, der sich angemeldet hat, mit Schlüsseln, die nur er hat. Google, Mozilla und Apple leiten Chiffretext weiter und können Ihre Aufgabentitel nicht lesen. Was sie erfahren, ist, dass ein bestimmter Browser etwas empfangen hat, und wann.

Ihr eigener Server erfährt eine Sache, die er sonst nicht wüsste: dass ein Browser sich für einen bestimmten Bereich angemeldet hat. Das ist der Grund, warum es ein Knopf pro Bereich ist und keine globale Einstellung — die Liste der Bereiche, die ein Browser hält, lebt in diesem Browser und nirgendwo sonst, und eine Anmeldung ist das Einzige, was einen Bereich in die Aufzeichnungen des Servers bringt.

Wenn Sie selbst hosten, sendet PUSH_CONTENT=minimal „Task completed“ ohne Titel. Verschlüsselt sind die Nutzdaten so oder so; das hier ist für den Sperrbildschirm eines Telefons, das jemand anderes sehen kann.

Selbst hosten: es muss HTTPS sein

Ein Browser gibt einen Service Worker nur auf einem sicheren Ursprung heraus, und Web Push braucht einen. Auf http://192.168.1.50:7979 erscheint der Knopf überhaupt nicht, was auch immer Ihre Schlüssel sagen — und nichts erklärt, warum, denn aus Sicht der Seite existiert die Funktion auf diesem Browser nicht. localhost ist die eine Ausnahme, und genau deshalb funktioniert das, während Sie es ausprobieren, und hört auf, sobald Sie es auf eine Maschine im Netz verschieben.

Benachrichtigungen bedeuten also ein Zertifikat: etwas davor, das TLS terminiert — Caddy, Traefik, nginx, ein Cloudflare-Tunnel — und FORCE_SSL=true gesetzt, sobald es da ist.

Selbst hosten: die Schlüssel erzeugen

Beide Schlüssel ungesetzt heißt, die Funktion existiert nicht — kein Knopf, und nichts über irgendwen gespeichert. Erzeugen Sie einmal ein Paar:

Tragen Sie beide in den environment:-Block beider Dienste in docker-compose.yml ein und führen Sie erneut docker compose up -d aus. Nicht restart — das benutzt die Konfiguration weiter, die die Container schon haben. Sie auf der App zu setzen und auf dem Worker nicht ist der Fehler, den man benennen sollte: Der Knopf erscheint, jemand drückt ihn, und nie wird etwas zugestellt.

Es gibt nichts, wo man sich registrieren müsste — kein Firebase-Projekt, kein Apple-Entwicklerkonto, kein API-Schlüssel. Wer den Browser gebaut hat, betreibt den Push-Dienst; dessen Adresse kommt in der Anmeldung mit, die der Browser Ihrem Server übergibt, und das VAPID-Paar ist ein selbstsignierter Beleg dafür, dass jede Benachrichtigung vom selben Absender kam. VAPID_SUBJECT ist nur eine Kontaktadresse, und niemand prüft sie.

Rotieren Sie die Schlüssel nicht. Bestehende Anmeldungen sind an sie gebunden, Browser werden nicht informiert, und sie empfangen schlicht nichts mehr.

Warum es keine mobile App gibt

Eine React-Native-App war dafür entworfen und ist nicht gebaut worden, weil Web Push abdeckt, wofür sie da war. Das Einzige, was sie weiterhin besser könnte, ist, mehrere Server gleichzeitig zu beobachten: Ein Browser ist an einen Ursprung gebunden, ein Bereich auf einem anderen Server öffnet sich also dort, statt sich in eine einzige Liste einzureihen. Wenn Sie einen gehosteten und einen selbst betriebenen Bereich beobachten, installieren Sie die Seite von beiden.