Forum: PC-Programmierung Push Notification nativ auf Webserver für PWA


von Jona (Gast)


Lesenswert?

Hi,

ich habe einen Mini Webserver (der kann leider kein Node.js).
Ich möchte damit eine kleine App entwickeln mit der ich auch 
Push-Notifications machen möchte. Das ganze Idealerweise unter iOS, 
Android und Windows. Aber das wichtigste ist eigentlich Android, der 
rest erstmal egal.

Ich habe mich etwas eingelesen und bin zu dem Entschluss gekommen, dass 
man da wohl was mit "Serviceworkern" machen muss!?.
Ich möchte relativ "Nativ" arbeiten, also ohne Firebase, Node.js (läuft 
bei mir nicht) -> sozusagen unabhänig von externen Serverquellen.

Vom Prinzip kann man sich die App ein wenig wie einen Chat vorstellen 
(nur dass der Austausch nicht persönliche Nachrichten, sondern 
Statusmeldungen und Profile anderer User sind).
In der PWA soll man diverse "Benachrichtigungen" abonnieren können, und 
dann wenn jemand eine Nachricht versendet, sollen die an die Abonnenten 
verschickt werden.

Nun zu meinen Fragen:
1. ist das überhaupt "ohne echte externe Quellen möglich" (außer meinem 
Webserver)
2. kann man das nativ in HTML, JavaScript, jQuery, php, css umsetzen 
(mit Webworkern und Serviceworkern)?
3. hat jemand zufällig ein "einfaches" Beispiel für mich?

Es ich finde relativ schnell Beispiele in ASP und Co... auch Firebase 
und Node.js... aber irgendwie nicht für das was ich möchte.

viele grüße

von Einer (Gast)


Lesenswert?

Naja, wenn Dein Web-Server nur ein statischer Server ist, also auf einen 
HTTP-Request von einem Client nur eine Datei ausliefern kann, wie soll 
dieser Server dann irgendetwas zu irgendeinem Client pushen?

von Jona (Gast)


Lesenswert?

@Einer genau da hab ich das "verständnisproblem". Ich möchte ja 
"ausschließlich" was pushen, wenn auch jemand "aktiv" etwas tut.

d.h. wenn alle Clients offline sind, dann müsste man auch niemals etwas 
benachrichtigen. Sobald aber Client 7 online ist und eine Aktivität 
"triggert" kann er doch Client 3 benachrichtigen? <- ganz ohne Node.js 
der wirklich "immer aktiv" ist!?

Und Statisch bin ich ja mit PHP und ner kleinen Datenbank (SQL hab ich 
vergessen zu listen) natürlich nicht.

von Εrnst B. (ernst)


Lesenswert?

Jona schrieb:
> Sobald aber Client 7 online ist und eine Aktivität
> "triggert" kann er doch Client 3 benachrichtigen?

Die Webbrowser (egal ob Desktop oder Mobil, oder als PWA verpackt) 
kommunizieren i.A. nicht direkt miteinander, sondern mit dem Webserver.
Dabei ist's egal, ob das auf der Webseite direkt oder indirekt über 
Serviceworker angestoßen wird.

d.H. Client 7 hat eine Verbindung zum Server, Client 3 auch, Client 7 
schickt seine Aktion an den Server, der leitet die an Client 3 weiter, 
der reagiert darauf.

Wie die Implementierung des Server-Teils dabei aussieht, ob du das in 
Javascript, in PHP, Python oder Whitespace implementierst, oder ob du 
einen externen Serverdienst ansprichst, ist dabei wurscht.

von Netzwerker (Gast)


Lesenswert?

Einfach mal Googlen gibt mir z.B. das hier: 
https://gist.github.com/prime31/5675017

Warum solltest du mit PHP keine Push notifications versenden können? 
Müsstest du eben dann aufrufen, wenn jemand eine Aktion ausführt. 
Irgendwelche Worker brauchst du da nicht und zur Not hast du vielleicht 
Cronjobs?

von Kolja L. (kolja82)


Lesenswert?

Interessantes Thema, aber muss es denn über eine push notification 
laufen?

Lass doch deine Clients auf dem Server in die Datenbank schreiben und 
rufe diese mittels Javascript fetch() in einem kurzen Intervall ab und 
wenn es neues gibt, zeig es an.

Hast du schon vorzeigbaren Code?

von Jona (Gast)


Lesenswert?

@kolja82: die "Push-Notification" sorgt dafür, dass wenn die App nicht 
"aktiv offen" ist, dass man eine Benachrichtigung bekommt.

Eine Meldung auf eine "Website" zu Plazieren ist kinderkacke und mit 
webworker gar kein Thema.
Etwas eine Information in eine Datenbank zu schreiben und diese 
Abzufragen ist ebenso kein Thema - ebenso die Information an "aktive" 
Endgeräte zu verteilen.

PWA sind für mich selbst aber "Neuland". Ich hab schon so manches fertig 
gestellt. Die Installation, das Caching - dafür gibt es schöne tutorials 
-> soweit so gut.

Aber bevor ich einen node.js Server aufsetze oder gar noch einen ASP.net 
Server ist es wohl einfacher eine native App für Windows oder Android zu 
schreiben. Der Anreiz der PWA ist aber ein "Einfachheit" der 
Installation und VORALLEM die Plattform-Unabhänigkeit <- wenn auch Apple 
"natürlich" wieder rumzickt und mimimi, wir wollen alleine die Macht 
über unsere Nutzer haben :P
<- das kann man gut finden - ist aber schwer bescheuert!

@Netzwerker: jain... das ist die Google-API und somit an die 
Google-Services gebunden - schöne Idee "theoretisch auch Funktional" 
aber leider auch wieder "verseucht von einem Hersteller den ich meiden 
möchte". <- Ziel des PWAs ist ja "genau sowas" zu umgehen ;)

Spannender sind da schon die github@minishlink/web-push notifications in 
PHP ... aber gerade bin ich noch zu dumm die zum laufen zu bekommen.
Leider ist das auch keine schlanke Lib sondern ein WUST an mächtigem 
Tool. Auch das kann nice sein - aber weniger meine Welt <- besonders, 
wenn man Code langlebig halten möchte.

@ernst: deine Nachricht hab ich leider nicht ganz umrissen. Mir geht es 
ja darum "PWA" kann was was der "normale Browser nicht kann" und das 
sind die Standard-Notifications, wenn der "Browser" minimiert (ggf. 
sogar geschlossen) ist (wobei bei mir in der tat theoretisch auch 
minimiert reicht). Eine Information auf der Website zu Plazieren ist, 
wie ich es @kolja82 bereits geschrieben habe, keine echte 
Herausforderung. Aber Push ist was anderes als "pull" und noch mehr geht 
es mir um die "Notification"

von Kolja L. (kolja82)


Lesenswert?

Ja, du hast in allem (was ich verstanden habe) Recht. Ich hatte wohl 
nicht verstanden, dass dir die push Funktion wortwörtlich so wichtig 
ist.

An deinem Ergebnis bin ich aber sehr interessiert.
Wenn ich diese Woche mal Zeit finde, recherchiere ich auch nochmal.

von Joachim S. (oyo)


Lesenswert?

@Jona:
Falls Du die Seite nicht eh bereits kennst: Unter
https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications#how_web_push_works
gibt es eine wie ich finde gute und knappe Übersicht, wie die "Push API" 
(die Du für Dein Vorhaben wohl verwenden würdest) technisch eigentlich 
funktioniert. Da die Push-Nachrichten ja das zentrale Problem bei Deinem 
Vorhaben sind, ist das imho sehr hilfreich.

Ich sehe aktuell keinen Grund, warum Dein Vorhaben nicht möglich sein 
sollte - also auch mit einem "Billig-Webserver", der quasi nur PHP kann.

Allerdings ist bei der "Push API" strenggenommen immer eine "externe 
Quelle" involviert, um auf eine Deiner Fragen zurückzukommen.
Jeder Webbrowser, der die benötigte "Push API" implementiert, betreibt 
für die "Push API" einen eigenen Internet-Dienst/-Server. An diesen muss 
Dein Server via PHP eine Nachricht schicken, wann immer er eine 
Push-Nachricht an einen Deiner Clients verschicken will. Aus Sicht 
Deines Webservers ist das Versenden einer Push-Nachricht an einen Deiner 
Clients also ähnlich dazu, eine eMail zu verschicken - wenn Dein Server 
eine Push-Nachricht an einen Deiner Clients schicken will, kommuniziert 
er nicht direkt mit Deinem Client, sondern schickt die Nachricht wie 
eine Art eMail an einen zwischengeschalteten, vom jeweiligen 
Webbrowser-Hersteller betriebenen Server, von dem der Client die 
Push-Nachrichten dann empfängt.

Ich habe die Push API bislang allerdings nicht selbst verwendet, daher 
sind meine Aussagen mit einer gewissen Vorsicht zu geniessen.

von Jona (Gast)


Lesenswert?

@oyo: vielen vielen vielen Dank... das hat schon gut weiter geholfen <- 
zumindest im Verständnis.

Ich komme jetzt schon Gerätesezifisch (bzw. browserabhänig) an endpoint, 
p256dh sowie auth

Leider weiß ich noch nicht wie ich das verarbeite. Ich hab auch noch 
keine schönen Beispiele gefunden.

> Einerseits das direkte CURL über gewisse Services oder auch direkt in einem 
PHP-File.
Die Onlinebeispiele sind zu 90% über nodejs mit web-push, ebenso gibt es 
(die oben bereits erwähnte) php-web-push library von minishlink - welche 
leider viel zu umfangreich und nativ auch nicht auf meinem Web Server 
läuft.

ich werde hier wohl weiter Recherchieren müssen.

Probleme hab ich leider auch mit Begrifflichkeiten wie API (hier setzt 
einer den Serverkey ein, der nächste die Google API - ich will aber auch 
an Windows [https://wns2-par02p.notify.windows.com] senden.
Dann gibt es ApplicationKeys und Client-Keys ... ich hab p256dh ...

Das ist alles noch viel viel Wust, wo ich viel zu wenig weiß. Ich hab 
bisher zu viel "reverse Engineering" gemacht und viel zu wenig "selbst" 
aufgebaut. Aber nun, da kann ich das jetzt mal lernen :P

Falls dennoch jemand das ein oder andere gute Beispiel hat, bin ich 
dafür offen :)

Vielen Dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.