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
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?
@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.
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.
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?
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?
@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"
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.
@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.
@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