Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Service soll Push-Nachricht erzeugen (https://www.delphipraxis.net/213898-service-soll-push-nachricht-erzeugen.html)

Stewag 16. Okt 2023 15:07


Service soll Push-Nachricht erzeugen
 
Meine Wetter-App für Wassersportler zeigt u.a. Wellenhöhen an.

Ich möchte, dass der Benutzer sich bei sehr hohen Wellen durch eine Push-Nachricht warnen lassen kann.
Da die App selber dazu nicht zu laufen braucht, würde ich einen Service einbinden, der im Hintergrund den entsprechenden Server abfragt.

Meine Frage: Wie gehe ich vor, um beim Überschreiten des Warnwertes eine Push-Nachricht auf dem Smartphone anzuzeigen?
Der Service selber kann das doch nicht, oder?

supermulti81 16. Okt 2023 15:21

AW: Service soll Push-Nachricht erzeugen
 
Hallo,

das kannst du am besten über den Google Firebase Cloud Messaging (FCM) machen. Für Android ist soweit alles drin, man muss dann nur eine JSON Datei importieren. Für iOS muss man dann noch die Firebase SDK für iOS runterladen (bei Delphi 11.3 ist das die Version 6.28).
Bei Android musst du dann noch die Projekteinstellung setzen Push erlauben. Bei iOS muss beim Apple Identifier Push aktiviert werden. Das dazu mal ganz grob.

Bei der APP verbindest du dich dann mit FCM und erhälst einen Token, diesen muss du bei deinem User ablegen.

Wenn dein Service dann ermittelt, dass eine Push Nachricht an einen User gesendet werden soll, dann musst du die Token vom User (eventuell mehrere, da er mehrere Geräte verwenden könnte) auslesen und über die FCM API an diese Token die Nachrichten senden.

Mal ganz grob umrissen.

MfG

Stewag 16. Okt 2023 15:33

AW: Service soll Push-Nachricht erzeugen
 
Vielen Dank, Supermulti, das klingt nachvollziehbar! :-D
Dann versuche ich mich mal an der Umsetzung...

supermulti81 16. Okt 2023 18:00

AW: Service soll Push-Nachricht erzeugen
 
Hier mal noch Links:

Für Android:
https://synaptica.info/en/2022/03/14...otification-1/

Für iOS:
https://synaptica.info/en/2022/03/24...otification-1/

Und für deinen Service dann hier noch Infos:
https://firebase.google.com/docs/ref...messages?hl=de

Stewag 19. Okt 2023 11:26

AW: Service soll Push-Nachricht erzeugen
 
Ich habe jetzt einen Android-Service erstellt, der prüft, ob die Voraussetzung für eine Push-Nachricht erfüllt ist und diese nach dem Vorbild des Snippets
"Embarcadero\Studio\22.0\Samples\Object Pascal\Mobile Snippets\Notifications\SendCancelNotification" direkt an das Notification Center sendet:
Code:
 ...
NotificationC.PresentNotification(Notification)
Den Service habe ich in meine MultiDevice App integriert und starte ihn daraus mit
Code:
TLocalServiceConnection.StartService([Dienstname])
Es erscheinen aber keine Push-Nachrichten.

Vermutlich kann ein Dienst keine Push-Nachrichten direkt an das System senden und ich brauche zwingend die von supermulti beschriebene FCM?

Da ich die Push-Nachricht ja nicht von außen an die App senden will, sondern diese selbstständig prüft, ob eine Push-Nachricht angezeigt werden soll, habe ich gedacht ich könnte auf die Firebase Cloud verzichten.

MyRealName 20. Okt 2023 10:59

AW: Service soll Push-Nachricht erzeugen
 
Ich würde das Ganze erstmal ohne Service probieren, damit Du weisst, dass Dein Code in Ordnung ist...

btw. Klarstellung zu SuperMulti81's Text : Der Token, den Du in der App bekommst, wenn der User diese startet, musst Du nicht beim User ablegen, sondern auf Deinem Server, damit Du weisst, wem Du das schicken sollst.

Das Versenden geht ja eigentlich über einen http-Aufruf (ich hatte das mal mit RealThinClient gemacht) :

Delphi-Quellcode:
  RtcDataRequest.Request.Method := 'POST';
  RtcDataRequest.Request.FileName:='/fcm/send';
  RtcDataRequest.Request['Content-Type']:='application/json';
  // Das ist Dein key, den Du von Google für FCM bekommst (keine Angst, das ist nicht meiner ;)
  RtcDataRequest.Request['Authorization']:='key=AAACFWjzosA:APA31bH60XgRU6QGoN8PQ0-1CUROMSZVGThqz5nS3yCfIrMeWMiFJjslg6l7geF_P9fB8f__hzbSZt8rIq0NrDOmRKxpk2pVM9mTvav8OHtjzcKFEmViGFobEuPzvBZlGA7ootKV8j0E';
  With RtcDataRequest.Request.Info.newRecord('data') do begin
    asText['to']:= ADestino;  // hier kommt der Token rein, den Du für deinen Empfänger hast
    with newRecord('data') do
      asText['message'] := AMessage; // hier Deine Nachrichten-Text
    end;
  RtcDataRequest.Post;

Stewag 20. Okt 2023 12:13

AW: Service soll Push-Nachricht erzeugen
 
Schuld waren ältere Java Files! Hier kommt die Lösung des Problems:
https://github.com/DelphiWorlds/HowT...rviceDelphi111

Jetzt klappt es.

Demnach KANN ein Android Service eine Notification erzeugen.
Ein FCM wird nur benötigt, wenn die Notification von außen an das Smartphone gesendet werden soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz