RFC-0004: Push Notifications mit UnifiedPush#5
Open
antontranelis wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
RFC-0004: Push Notifications mit UnifiedPush
Zusammenfassung
Push Notifications für die Web-of-Trust-App über UnifiedPush — einen offenen, dezentralen Standard der ohne Google-Abhängigkeit funktioniert. Ein Code-Pfad für F-Droid und Play Store. ntfy als selbst-gehosteter Push-Server. Push dient nur zum Wecken der App — Nachrichteninhalte bleiben Ende-zu-Ende verschlüsselt über das bestehende Relay.
Motivation
Aktuell erfährt ein User erst von neuen Verifizierungen, Bestätigungen oder Space-Einladungen wenn er die App öffnet. Das Relay puffert Nachrichten zuverlässig, aber es gibt keinen Mechanismus um den User aktiv zu benachrichtigen.
Push Notifications lösen das — und sie sind Voraussetzung für zukünftige Features wie Chat in Spaces.
Was Push auslöst
Warum nicht Google FCM?
Vorschlag
UnifiedPush als Standard
UnifiedPush ist ein offener Standard der Google als Mittelsmann ersetzt. Statt einer permanenten Verbindung zu Google hält ein Distributor auf dem Gerät die Verbindung zu einem Push-Server deiner Wahl.
Architektur
Komponenten
1. ntfy als Push-Server
ntfy ist ein leichtgewichtiger, Open-Source Push-Server. Läuft als Docker-Container neben dem Relay auf unserem Server.
ntfy.utopia-lab.org2. Distributor auf dem Gerät
Der Distributor ist das Gegenstück zu Google Play Services — er hält die Verbindung zum Push-Server. Drei Optionen:
Empfehlung: Embedded als Default (kein Onboarding-Overhead), mit Option für externe Distributoren.
3. Relay-Erweiterung
Der Relay weiß bereits ob ein User offline ist (WebSocket-Connection Map + Offline Queue). Erweiterungen:
Neues Schema:
Neue Message-Typen:
push-register— App sendet ihren Endpoint nach dem Loginpush-unregister— App löscht ihren EndpointPush-Trigger: Wenn eine Nachricht in die Offline-Queue geht und ein Endpoint registriert ist → HTTP POST an den Endpoint.
Rate Limiting: Maximal ein Push alle 30 Sekunden pro DID. Verhindert Spam bei Nachrichtenschwemmen.
4. Push-Payload
Minimaler Payload — kein Nachrichteninhalt, nur der Typ:
{"wot": true, "t": "verification"}Kein fromDid, kein Name, keine Details. Privacy bleibt gewahrt. Die App zeigt eine generische Notification: "Neue Verifizierung empfangen".
5. App-Integration (Capacitor)
Neues natives Plugin
UnifiedPushPlugin(analog zu BiometricKeystorePlugin):UnifiedPushReceiver(BroadcastReceiver) +UnifiedPushPlugin(Capacitor Bridge)PushService.ts—register(),unregister(),onPushReceived()iOS
UnifiedPush auf iOS funktioniert nur über einen APNs-Proxy. Apple erlaubt keine anderen Background-Push-Mechanismen.
ntfy kann als APNs-Gateway fungieren, erfordert aber:
Empfehlung: iOS-Push als Phase 2. Für Phase 1 funktioniert iOS weiterhin mit Auto-Reconnect beim Öffnen der App.
Space-Aktivität (Opt-In)
Für Push bei Space-Aktivität:
push-subscribe-spacean RelayAlternativen
Google FCM
WebSocket Keepalive
Matrix Push
Polling
Offene Fragen
Embedded vs. externe Distributor-App: Embedded ist einfacher für User, aber hat höheren Batterieverbrauch. Sollen wir beides anbieten oder nur Embedded?
Apple Developer Account: Haben wir einen? Brauchen wir für iOS-Push und auch für den App Store. Wer registriert ihn?
ntfy Server-Last: Wie viele gleichzeitige Verbindungen kann ein ntfy-Container halten? Bei der aktuellen Nutzerzahl (10-100) kein Problem, aber skaliert es?
Notification-UI: Wie detailliert sollen Notifications sein? Nur "Neue Nachricht" oder "Neue Verifizierung von Anton"? Letzteres erfordert dass der Push den Absender-Namen enthält (Privacy-Tradeoff).
Notification-Einstellungen: Soll der User granular steuern können welche Push-Typen er bekommt? Oder erstmal alles-oder-nichts?
Chat-Vorbereitung: Push ist Voraussetzung für Chat in Spaces. Soll die Push-Architektur schon Chat-Nachrichten als Typ vorsehen?
Implementierungsreihenfolge