Laden...

Notifications direkt durch die App erzeugen

Erstellt von boenz666 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.752 Views
B
boenz666 Themenstarter:in
13 Beiträge seit 2018
vor 3 Jahren
Notifications direkt durch die App erzeugen

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

16.806 Beiträge seit 2008
vor 3 Jahren

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.

B
boenz666 Themenstarter:in
13 Beiträge seit 2018
vor 3 Jahren

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.

  • Also was für ein Projekttyp muss das sein? Ich schätze mal keine Wpf/Windows Forms Anwendung, sondern so etwas wie eine Consolenanwendung?
    Oder geht da alles tatsächlich?
  • Wie stelle ich so etwas auf meinem Server bereit? Also was für ein Dateityp muss das sein?
16.806 Beiträge seit 2008
vor 3 Jahren

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:

  • Eine zentrale Plattform (nennen wir es mal Server App) würde das Crawling übernehmen
  • Dadurch wird natürlich dann auch kein Akku oder Bandbreite/Volumen gezogen
  • Sobald die Server App etwas findet wirft sie "Events", ähnlich wie Events in WinForms zB
  • EventHandler reagieren dann darauf und verschicken dann zB eine Mail, eine SMS oder eine Notification
  • Die Server App bietet eine Schnittstellen, mit der dann Apps aktiv kommunizieren können: eine Notification beinhaltet also zB die Information, dass es etwas "neues" gibt - aber keine Inhalte. Die Inhalte holt sich die Mobile App dann über einen GET Request, zB über REST oder gRPC von der Server App
    Je nach Ausbaustufe reicht eine minimalste Server Applikation; kann man aber natürlich auch im Endeffekt unendlich weit skalieren.

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:

  • ASP.NET Core selbst bekommst Du über das entsprechende Publishing in den Docker Container.
  • Aus dem Container machst Du ein Image.
  • Das Image schiebst Du in eine Registry (ähnliche Funktionweise wie NuGet)
  • Die Registry hinterlegst Du im Docker Manager auf der Synology
  • Das Image kannst dann laden und lokal einen Container starten
    Docker images for ASP.NET Core

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+).

B
boenz666 Themenstarter:in
13 Beiträge seit 2018
vor 3 Jahren

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