Nachricht von Server an Handy senden

  • Antworten:32
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 29

05.06.2020, 17:02:40 via Website

Hallo zusammen,
meine App kommuniziert mit einem WebService: Das Handy sendet einen HTTP Request an den Server, der schickt als Response Daten zurück, die auf dem Handy angezeigt werden; das klappt soweit.

Es gibt Situationen, in denen sich ein auf meinem Handy angezeigter Wert durch eine Aktion eines anderen Users ändert. Ich könnte einen Aktualisieren-Button einfügen, der einen neuen HTTP-Request an den Server schickt, die App empfängt die Response und zeigt den aktuellen Wert an; der Wunsch ist aber, den geänderten Wert automatisch auf mein Handy zu kriegen, ohne daß ich einen Aktualisieren-Button klicken muß.

Ich bin auf das Stichwort Push-Notification / Firebase gestoßen, werde aber aus allen gefundenen Artikeln nicht ganz schlau: Ist das das richtige für mich? Meistens wird als Usecase für Firebase beschrieben, daß eine Message angezeigt wird, wenn die App nicht geöffnet ist. In dem Fall interessiert mich die Nachricht aber nicht.

Sind Push-Notifications die Nachrichten, die kommen, wenn man vom oberen Display-Rand nach unten wischt? Ich möchte diese Messages eigentlich überhaupt nicht als einzeln sichtbare Messages / AlertDialoge / Toast oder ähnliches.

Sondern ich möchte, daß der Server bei Änderung des Wertes in irgendeiner Form eine Benachrichtigung an das Handy schickt, die in der App so ähnlich auswertbar ist wie eine HTTP-Response.

Ich könnte ein Konzept implementieren, mit dem die App dem Server mitteilt, daß sie an diesem Wert interessiert ist, sodaß der Server die Änderung nur an die betroffenen Handys schicken muß.

Macht man so etwas mit Firebase? Oder gibt es ein besseres Stichwort?

Viele Grüße
Gerhard

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 11.012

05.06.2020, 17:45:00 via Website

Hallo Gerhard,

ja Firebase Cloud Messaging (FCM) ist da schon der richtige Ansatz. (Firebase bietet viele Services an, FCM ist nur einer davon.)
Die Daten kannst du in einem Broadcastreceiver entgegennehmen und dann weiter an deine Activity schicken.
Eine User-Notification ist dafür nicht notwenig.
Beachte aber dabei die Firebase Limits: https://firebase.google.com/docs/cloud-messaging/concept-options

Ansonsten überträgst du die Daten am besten im Json Format, also wie jede gänige API. Das Format kannst du selber definieren und bleibt sehr Flexibel. Normale Strings gehen natürlich auch, nur ist das ganze dann nicht so komfortabel.
Auf Serverseite musst du dann GeräteIds von registrierten Geräten Speichern können. Über zusätzliche Logik kannst du dann auf festlegen, welche Geräte die Notification nun bekommen sollen.

— geändert am 05.06.2020, 17:45:49

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

16.07.2020, 14:10:21 via Website

Hallo,

danke für die Antwort; aber jetzt muß ich nochmal rückfragen: Die Diskussion im Projekt hat ergeben, daß wir hierfür keinen Google-Service wollen (wegen Datenschutz).

Firebase ist ja ein riesiges Tool, von dem wir nur einen kleinen Teil genutzt hätten. Gibt es vielleicht außer Google noch einen ähnlichen Service, der das Verschicken von Notifications von einem Webservice an auszuwählende Geräte ermöglicht, der aber nach deutschen Maßstäben datenschutz-konform ist?

Viele Grüße
Gerhard

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

17.07.2020, 10:36:41 via Website

Hallo,

das Stichwort Push Notification habe ich auch schon gefunden. Aber entweder verstehe ich es falsch, oder es passt nicht. Bei Push Notification lese ich immer, ein Message-Text poppt auf dem Display auf oder erscheint im Browser oder erscheint, wenn du vom oberen Display-Rand nach unten wischst.

Was ich möchte, ist folgendes: Ich schreibe eine App und einen zugehörigen Webservice, die miteinander kommunizieren. Wenn ein User die App geöffnet hat und einen Wert aus der Database anzeigt, und sich dieser Wert serverseitig ändert (durch eine Aktion eines anderen Users), dann soll der Webservice eine Information an die App des betroffenen Users schicken, die diese empfängt, interpretiert und den angezeigten Wert still und leise aktualisiert. Wenn der User die App in dem Moment nicht offen hat, läuft die Message ins Leere, weil die App sowieso den aktuellen Wert von Server holt, wenn sie gestartet wird.

Ich stelle mir vor, daß ich im Server einen Send-Irgendwas-Aufruf mit der Identifikation und dem zu sendenden Inhalt schreiben muß, und in der App eine Methode onReceiveIrgendwas, die dann aufgerufen wird und die gesendeten Daten (String oder Json-Struktur o.ä.) empfängt und auswertet.

Oder gibt es eine Methode, mit der man Push Notifications in der App empfangen kann? Wenn die Notification dann zusätzlich zu der gewünschten Auswertung in der App auch noch in der Notification-Liste am oberen Display-Rand erscheint, wäre nicht so schön, aber akzeptabel, wenn es nicht anders geht. Aber leiber wäre mir, wenn die Message nirgends anders herauskommt als in der Aktualisierung des angezeigten Wertes in der App.

Viele Grüße
Gerhard

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.303

17.07.2020, 10:50:05 via Website

Also eigentlich ist Firebase genau das was man dafür nutzt.
Entweder machst du das mit Push Nachrichten über FCM, oder über die Firebase Realtime Database.
Die sendet jede Änderung der Daten in Echtzeit in deine App.

Wenn du das WIRKLICH selbst machen willst - wovon ich abraten würde, weil es eine "world of pain" ist - wären WebSockets die Technologie der Wahl.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

17.07.2020, 11:46:28 via Website

Hallo Rafael,

das Feature FCM mag exakt das sein, was ich mir vorstelle. Aber wenn man sich die Nutzungsbedingungen von Firebase anschaut und die Daten, die dazu erfasst werden, stehen unserem Projektmanagement und mir die Haare zu Berge. Nein, einen Google Server wollen wir da nicht einbinden.

WebSockets ist ein neues Stichwort. Das schaue ich mir mal an. Danke, auch für deine Warnung; dann kann ich das Projektmanagement schon mal darauf vorbereiten, was uns bevorsteht :-).

Viele Grüße
Gerhard

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

17.07.2020, 13:54:02 via App

Mit WebSockets musst du aber ständig einen Service im Hintergrund laufen lassen und darauf achten das das System diesen nicht abschießt. Dann kommt eine Akkubelastung hinzu etc...
Je nachdem wie häufig du Daten haben willst könntest du auch alle x Minuten pollen. Auch nicht schön aber vlt besser als ein eigener Service im Hintergrund.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

17.07.2020, 15:47:12 via Website

Hallo im übrigen ist es auch nicht unbedingt notwendig die push Nachrichten auf dem Display oder Status Zeile anzuzeigen. Der resiver kann auch ohne Anzeige arbeiten.

FCM läuft sowieso immer im tief im System eigentlich schon im Kernel.

Ist also immer vorhanden. Du musst ja auch fast keine Daten mit FCM übertragen. Du willst ja dem User nur mitteilen das es neue Daten gibt die die app dann selber von deinem Server abholt.

— geändert am 17.07.2020, 15:58:03

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

17.07.2020, 16:42:07 via Website

Didumm. Mit Service meinst du einen Service auf dem Handy? Der Webservice auf dem zentralen Server läuft ja sowieso. Hast du (grobe) Zahlen zur zu erwartenden Akkubelastung?

Alle 10 Sekunden pollen hatte ich auch schon vorgeschlagen; der Projektmanager wünschte sich eine Aktualisierung sofort, nicht erst nach 10 Sekunden. Außerdem würde alle 10 Sekunden pollen (oder öfter) wieder auf das Datenvolumen gehen und diejenigen belasten, die einen Tarif mit begrenztem Datenvolumen haben.

Als weitere Alternative schoß mir noch die Idee durch den Kopf, eine SMS an das betroffene Handy zu schicken. Aber wenn die dann nur in den SMS-App angezeigt wird, nutzt es auch nichts. Gibt es eine Möglichkeit, in der App einen EventHandler zu schreiben, er eine SMS empfängt?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

17.07.2020, 16:52:59 via Website

Hallo Jokel,

das Problem bei FCM ist nicht die einzelne Nachricht, sondern der Datenschutz und das Registrieren auf einem Google-Server. Wer weiß schon, was Google alles ermittelt, speichert, auswertet und an wen auch immer weitergibt?

Reveiver ohne Anzeige klingt so, als ob ich Push Notifications mit einem EventHandler in der App empfangen könnte? Und kann der Webservice eine Push Notification auch an ein einzelnes Handy schicken? Bei Artikeln über Push Notifications sind meistens Werbe-Aktionen beschrieben, die an alle Welt gesendet werden. In meinem Fall ist von einer Notification ein einzelner User betroffen, oder wenn es hoch kommt, vielleicht fünf. Ich könnte natürlich einen Filter in dem EventHandler einbauen, der eine Notification verwirft, wenn sie den User nicht betrifft. Aber lieber würde ich die Notifications gezielt nur an die betroffenen User schicken.

Viele Grüße
Gerhard

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

17.07.2020, 20:46:03 via App

Bei FCM kannst du einzelne User gezielt ansprechen und Nachrichten an einzelne Registration Id schicken.
das ist hier alles implementiert.
Die IDs kannst du auch nur bei dir Speichern, diese kennt dann Google über den Account.
und wenn der User einen Google Account hat, hat er den Google Datenschutzbestimmungen sowieso zugestimmt.

Und ja mit Service meine ich einen Android Service welcher im Hintergrund laufen muss, was sowas an Akku kostet ist nicht pauschal zu sagen, das kommt darauf an, was du machst und welche Technik du verwendest.
Somit nicht vorher zu sehen.

Fyi:
https://steelkiwi.com/blog/push-notifications-services-how-to-choose/

— geändert am 17.07.2020, 20:50:13

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.303

18.07.2020, 18:49:34 via Website

Als weitere Alternative schoß mir noch die Idee durch den Kopf, eine
SMS an das betroffene Handy zu schicken. Aber wenn die dann nur in den
SMS-App angezeigt wird, nutzt es auch nichts. Gibt es eine
Möglichkeit, in der App einen EventHandler zu schreiben, er eine SMS
empfängt?

Ja das geht. WhatsApp macht ja genau das bei der Anmeldung.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

19.07.2020, 11:26:41 via Website

Hallo ja das über SMS zu lösen ist schon möglich .
Nur ist es recht langsam und der User bekommt auch die SMS angezeigt. Außerdem brauchst du auch die Tel. Nummer des Handys um die SMS schicken zu können. Gebühren fallen auch für eine SMS an.

Ich würde das das FCM Data Message benutzen.
https://firebase.google.com/docs/cloud-messaging/concept-options

und wenn du nur eine Info schickst das neue Daten auf dem Server sind. Sollte es auch keine Probleme mit dem Datenschutz geben. Denn du schickst ja nur der App eine Info das sie die neuen Daten mit deinen Authentifikation bei deinen Server abholen kann. Wenn die App nicht läuft brauchst du auch nicht darauf reagieren.
Startet die App holst du erstmals die aktuellen Daten vom Server. Bist also auch wieder aktuell.

https://www.kuketz-blog.de/vorsicht-android-entwickler-beim-umstieg-von-gcm-auf-fcm-ist-tracking-aktiviert/

— geändert am 19.07.2020, 15:03:09

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

20.07.2020, 08:44:46 via Website

Hallo zu dem Thema Service. Wenn ich dich richtig verstehe wird der ja nur solange laufen wie deine App im fodergrund ist. Geht die app in den hindergrund könntest du ihn beenden.
Beim wider sichtbar werden der App startest du ihn neu und holst gleich die neusten daten.

Somit sollte der Akku auch nicht so stark belastet werden. Wenn die app nicht gestartet ist brauchst du doch auch nicht auf neu daten zu reagieren.

Oder wie ist sonst das handling der App.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.303

20.07.2020, 08:56:46 via Website

Ich glaub das Problem mit dem Datenschutz ist halt eher, dass FCM nur funktioniert, wenn es die Geräte-ID in Verbindung mit dem Push-Token serverseitig speichert. Das sind personenbezogene Daten.
Diese Speicherung geschieht in den USA nach den dortigen (lascheren) Datenschutz-Standards.
Um die gab es ja jetzt auch kürzlich wieder Ärger, weil der EUGH geurteilt hat, dass bei Übertragung von Daten aus der EU in die USA der Datenschutz nicht leiden darf.

Kann ich schon verstehen, dass man das nicht unbedingt toll findet, aber mann muss auch abwägen was der Aufwand wäre es anders zu machen.
Wenn man bedenkt, dass sogar deutsche Banking-Apps FCM nutzen, würde ich da aber wirklich ungern das Rad neu erfinden. Vor allem nehme ich an, dass es bei der App zumindest nicht um Daten geht, die sensibler sind, als die im Online-Banking.

— geändert am 20.07.2020, 08:57:27

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

20.07.2020, 10:44:26 via Website

FCM ist auf jeden Fall der akku schonennste Nachrichten Service. Denn der läuft immer und auf Kernel ebne.

@Rafael K. welche Nachrichten Dienste kennst du noch für Android.?

WhatsApp, Email Push nutzen meiner Meinung nach auch FCM.

Zum Speichern in der USA, es war doch so das du bei firebase am Anfang beim Erstellen des Projektes gefragt wirst wo auf welchen Server du das Projekt haben willst.

— geändert am 20.07.2020, 11:03:11

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

20.07.2020, 11:09:11 via App

Ich glaube WA nützt zusätzlich noch XMPP Push Technologien um auch auf Geräten ohne Google zu laufen. aktuelle Huawei Geräte z.b
E-Mail ist es ganz vom Client abhängig, die meisten 3rd Party Mail Apps Pollen alle x Minuten, wirkliches Push können nur die Apps der Provider direkt machen ansonsten müssten deine E-Mail Zugangsdaten an Server der 3rd Party App Betreiber weitergegeben werden.

SMS dürfte gehen und sollte zumindest in Zeiten von Wifi-Calls etc. auch überall mit WLAN oder Mobilfunk empfangbar sein. Kosten dürften mit einer passenden Flat mit unlimited SMS nicht sehr hoch sein.
Allerdings muss der Nutzer sich dann mit seiner Telefonnummer registrieren, das finde ich nur für Push Nachrichten etwas blöd.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 29

20.07.2020, 11:12:56 via Website

Hallo zusammen,

das Problem bei FCM ist nicht der Inhalt der einzelnen Nachricht. Nach meiner Einschätzung ist das Problem die Datenkrake Google. Um FCM zu nutzen, muß der User sich bei Google für den Dienst registrieren. Und dann verknüpft Google, so fürchte ich, die Nachricht mit den Ortungsdaten und anderen Gigabytes über den User, und daraus entsteht schon eine komplexere Aussage (oder eine Fehlinterpretation, die eher noch kritischer ist).

Wenn Google oder andere Firmern in den Datenschutz-Erklärungen schreiben "Wir verwenden die Daten BEISPIELSWEISE, um zu ...", werden in dieser Liste doch nur die völlig unkritischen Verwendungszwecke stehen, denen jeder zustimmt; und was Google sonst mit den Daten macht, bleibt Spekulation.

Vielen Dank für alle eure Ideen und Informationen; wir werden sie in unserer Projektrunde mal diskutieren.
Viele Grüße
Gerhard

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.303

20.07.2020, 11:24:23 via Website

@Rafael K. welche Nachrichten Dienste kennst du noch für Android.?

Wie gesagt keine :-D
The next best thing wären halt WebSockets, aber die sind nicht so tief im System verankert und können z.B. das Geräte nicht aus dem Sleep aufwecken.

Und dann verknüpft Google, so fürchte ich, die Nachricht mit den
Ortungsdaten und anderen Gigabytes über den User, und daraus entsteht
schon eine komplexere Aussage (oder eine Fehlinterpretation, die eher
noch kritischer ist).

Das kann man halt so oder so sehen.
Google kommuniziert ohnehin STÄNDIG mit JEDEM Android Phone.
Also die Pushes deiner App braucht Google ganz sicher nicht, um Bewegungsprofile von Geräten anzulegen :-)
Wenn Deine App also nicht weitere Profile über den Nutzer anlegt, wird durch deine App zumindest der Datenschutz des Nutzers nicht schlechter als er eh schon ist.
Wenn es also nicht grade darum geht eine App am Play Store vorbei auszuliefern auf Geräte, die nicht mit einem Google Account eingeloggt sind, wirst Du immer auf Geräte abzielen, die schon im Würgegriff von Google hängen.
Dann kann es Dir auch egal sein FCM die Daten nochmal zu geben, die Google eh schon hat :-)

Hilfreich?
Gerhard, Jokel und 1 mehr GerhardJokelPascal P.
Diskutiere mit!
Empfohlene Artikel bei NextPit