Hallo,
ich programmiere aktuell ein bischen zum Testen einen Backgroundworker.
Dieser arbeitet im Hintergrund und wird zukünftig für mich Informationen aus einer Website (API) sammeln. Wenn sich dort etwas geändert hat (Angebot, Preis, etc.) dann soll er mich darüber informieren.
Aktuell bilde ich das über eine Information per Mail ab.
Mein eigentliches Ziel ist jedoch, dass über Pushnachrichten abzubilden. So kann ich über einen einfachen Klick auf die Pushnachricht direkt in die Applikation auf eine relvante Activity gelangen und mir die veränderten Daten dort anzeigen lassen.
In den Tutorials zu den Pushnotifications lese ich jedoch immer nur etwas von Serverseite und Empfängerseite. Ich verstehe, dass so z.B. auch Whatsapp funktioniert. Der Server stellt fest, dass der Benutzer eine neue Nachricht hat und pingt dann quasi die Applikation an, wo eine Pushnachricht erscheint.
Ich möchte nun ja aber, dass meine App quasi selber der Sender ist und der Empfänger quasi der Benutzer. Wenn die App im Hintergrund läuft erfahre ich ja sonst nie, dass Änderungen eingetreten sind. Die aktuelle Umsetzung per Mail finde ich unschön, da ich dann die Applikation selber starten muss und dann auf die jeweilige Activity.
Kann man Pushnachrichten so nicht verwenden, wie ich mir das vorstelle?
Wenn das nämlich nicht geht, kann ich den Backgroundworker vergessen und muss mir dann etwas programmieren, was auf einem Server arbeitet und mich so anpingen kann.
Meine Umgebung:
Windows 10 Home 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)
Meine Entwicklungsumgebung:
Microsoft Visual Studio Professional 2019
Version 16.5.4
Zunächst die Bitte in Zukunft einen Titel zu wählen, mit dem ein potentieller Helfer direkt erkennen kann, worum es geht.
Ich habs korrigiert 👍
Push Nachrichten werden immer vom Server erzeugt.
Grund dafür ist, dass prinzipiell nicht die App sondern das Mobiltelefon, also bei Dir Android der eigentliche Empfänger ist.
Android routet dann das ganze im Namen der App in das Notification Center (bei iOS das gleiche).
Der Grund ist: die Notification muss schließlich auftauchen, auch wenn die App gar nicht läuft.
Was Du willst sind keine Push Notifications sonder Local Notifications, also ohne Server.
Local notifications in Xamarin.Forms
Local Notifications haben aufgrund ihrer Funktionsweise dann durchaus eingeschränkte Fähigkeiten.
Ich finde es aber sehr kurios, dass Du einen Worker (und das drum herum) in der App zum Crawlen der Informationen hast.
Sowas ist ja eigentlich aufgabe einer server-basierten Applikation. Auf dem Handy saugt sowas ja binnen kürzester Zeit den Akku leer.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ok, wird gemacht mit dem Threadtitel in Zukunft.
Aha, so etwas dachte ich mir schon irgendwie, habe dann tatsächlich völlig falsch angesetzt.
Jetzt muss ich aber dann doch mal fragen, wie sich so etwas realisieren lässt?
Also ich habe mir gestern auch einige Tutorials mit Kommunikation zwischen Client und Server und so etwas angeguckt, aber ich verstehe leider ein Paar Dinge nicht, weshalb ich mich gescheut habe, dass auf diesen Weg umzusetzen, wo ich aber leider wohl nicht drum rum komme.
Auf Handyebene ist dann alles klar. Hier programmiere ich den Empfang von Pushnachrichten.
Aber ich verstehe das mit dem Server noch nicht ganz, wie das dann umgebungstechnisch zu realisieren ist. Also ich habe zu hause ein NAS, das würde sich als Server ja anbieten, da rund um die Uhr erreichbar und auch für so etwas ausgelegt glaube ich (Synology DS918+).
Ich finde aber nur Tutorials, wie man da losprogrammiert, nicht aber, wei man das bereitstellt.
Ob Du völlig falsch angesetzt hast, das kann ich nicht sagen; hört sich für mich einfach ungewöhnlich an.
Aber wie das meistens läuft:
Aber gleich vorweg: das sind nun sehr viele neue Technologien für Dich.
Alles nicht sonderlich komplex, aber eben "viel".
Sofern Du .NET dafür verwenden willst, so kannst Du alles prinzipiell über Konsolenanwendung machen; eine UI Technologie wie WinForms oder WPF geht natürlich nicht.
Im Falle von .NET ist das so, dass ASP.NET Core selbst eine Konsolenapplikation ist, mit der Du sowas sehr einfach abbilden kannst.
Der Background Task kann also das Crawlen übernehmen und Notifications anstoßen; macht am Ende vom Tag exakt das, was wie Worker in Android machen - nur eben in der ASP.NET Core Pipeline.
ASP.NET Core auf der Synology:
Eine NAS ist nicht unbedingt eine Plattform für sowas.
Bei Deiner NAS hast Du nun etwas Glück, dass Du damit grundlegend sowas programmieren kannst, weil Du eine entsprechende CPU und Plattform hast, mit der Du Docker Container betreiben kannst.
Das heisst, dass Du prinzipiell eine Server App programmierst, die in einem Docker Container läuft:
Die App auf der Synology kann natürlich sehr einfach nach Außen kommunizieren, um Zb Notifications zu verschicken.
Du musst natürlich dann aber in Deinem Netzwerk sicherstellen, dass man von außen auch die Applikaton im Docker Container auf der NAS erreicht.
Ich nehme die Synology sehr gerne für Proof of Concepts bei Kunden, da sie vergleichsweise günstig ist und sehr viel Leistung bietet (deutlich mehr als ein Raspberry aber auch nicht so extrem teuer wie ein Embedded Industrie PC; meistens die DS 718+).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Wow, danke da hast du dir echt viel Mühe gegebn.
Ich habe die App nach deinen Tips auf dem Handy erstmal fertiggestellt.
Die tut schon mal so ihren Dienst absolut zufriedenstellend.
Damit das in Zukunft nicht quick & dirty ist und Akku und Datenvolumen schont, werde ich mir das mit dem Server als nächstes Projekt vornehmen.
Du hast mir sehr geholfen, da ich zuvor mit googlen nichts gefunden habe, was mir hiflt, da ich nicht wusste so richtig wonach ich suchen soll.
Ich freue mich schon damit zeitnah loslegen zu können und mein Projekt richtig rund zu machen.
Vielen Dank noch einmal