Data Message von Firebase an die App senden

  • 7 Antworten
  • Letztes Antwortdatum
4

469110

Gast
Hallo,

ich möchte eine Erinnerungsfunktion in meine App einbauen. Hierfür soll eine Notification angezeigt werden. Um diese Notification auszuführen soll von Firebase eine Nachricht gesendet werden mit der Art von Erinnerung. Jenachdem wird dann die Notification angezeigt.
Ich habe zum Test eine Nachricht von der Firebaseconsole aus gesendet.
Da wird aber auch eine Notification von Firebase angezeigt. Die gesendete Nachricht enthält aber nur Informationen mit denen der User nichts anfangen kann. Deshalb soll sie von der App noch verarbeitet werden (richtige Sprache etc.).

Bei ein bisschen informieren bin ich darauf gekommen dass es zwei verschiedene Nachrichtentypen gibt.
Was ich brauche ist eine "Data Message".

Meine Frage ist jetzt wie sendet man die?
Geht das über die Firebaseconsole?
Wie macht man das mit Php?


Ich hoffe mir kann jemand weiterhelfen

Liebe Grüße
Oliver Zeiss
 
Hi Oliver,

ich mir vor einer Weile auch mal Firebase angesehen, nur weil ich wissen wollte was es ist. Da habe ich ein Beispiel gesehen in dem deine Anwendung beschrieben wird.
Du solltest auf der Webseite zu Firebase Hilfe finden. Ich bin mir nur nicht sicher, ob ich nur ein Video zu diesem Beispiel gesehen habe oder ob es dort eine Beispiel-App gab.
 
Danke für den Link aber da habe ich auch schon nachgelesen.
Eine Nachricht zu verschicken geht ja. Ich verstehe aber nicht so ganz wie man eine Data Message versendet.
Ich möchte einfach nur dass der Code den ich geschrieben hab ausgeführt wird und keine Notification von der Libary erscheint.
 
Ich möchte einfach nur dass der Code den ich geschrieben hab ausgeführt wird und keine Notification von der Libary erscheint.

Dann lass doch in dem Falle einfach deine Notification im FireBaseMessagingService weg.
Was das bezwecken, soll ist mit allerdings rätselhaft


Bsp
Code:
public class FCMMessageReceiverService extends FirebaseMessagingService
{
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage)
    {
     sendNotification(remoteMessage.getNotification().getBody());
    }

    private void sendNotification(String messageBody)
    {
      // hier keine Notify  und deine  eigene Routine
    }

}

Manifest
Code:
  <service
            android:name=".FCMMessageReceiverService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
 
Zuletzt bearbeitet:
Sorry ich glaub ich habe es zu ungenau beschrieben.

Die onMessageReceived Methode soll immer ausgeführt werden und dann meine Notification anzeigen.
Das heißt egal ob die App im Vordergrund, Hintergrund oder garnicht läuft.

Läuft die App nicht soll die sozusagen aufgeweckt werden.
 
Die OnMessageRecieved wird IMMER aufgerufen , das hast du nicht im Griff.
Ich denke , dir fehlt noch die Begrifflichkeit , was ein Service ist.

In der Receive Callback kannst du reinpacken , was du magst -
Ob du eine Notify ausgibst, per Intent eine Activity startest, oder rosa wölkchen malst .
 
Zuletzt bearbeitet:
Wir haben es jetzt hinbekommen. Und zwar wollten wir ja eine Data Message senden.
So eine Datamessage führt die onReceived() Methode immer aus. Es sollte ja auch so sein, dass die App aufgeweckt wird wenn sie nicht läuft.
How to handle notification when app in background in Firebase

Hier in dem Php Beispiel wird eine Datamessage versendet. Das mit den Tokens haben wir nicht getestet und das ist daher auskommentiert.
PHP:
<?php
    //Für einzelnes Gerät
    //$token = "C-l6T_a7HouUK****";
    //$registrationIds = array($token);
    $url = "https://fcm.googleapis.com/fcm/send";
    //Server Schlüssel
    $serverKey = "meinKey";
    $topic_adress = "/topics/meinTopic";
    define( 'API_ACCESS_KEY', $serverKey );

    $msg = array(
        'myMessage'  => 'Das ist meine Nachricht.',
        'otherMessage'  => 'Meine andere Nachricht.',
        'time_to_live' => '600',
        'delivery_receipt_requested' => 'true'
    );

    $fields = array(
        //Für einzelne Geräte
        //'registration_ids'    => $registrationIds,
        'to' => $topic_adress,
        'data'            => $msg
    );
    $headers = array(
    //Web-Api-Schlüssel
      'Authorization: key=' . $serverKey,
     'Content-Type: application/json'
    );

    $ch = curl_init();

    curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );

    curl_setopt( $ch,CURLOPT_POST, true );

    curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );

    curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );

    curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );

    curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );

    $result = curl_exec($ch );

    curl_close( $ch );

    echo $result;
?>

Um dann in der onReceived() Methode auf die Daten zuzugreifen führt man das hier aus:
Code:
if (remoteMessage.getFrom().equals("/topics/meinTopic")) {
    String message = remoteMessage.getData().get("myMessage");
    String message2 = remoteMessage.getData().get("otherMessage");
}

Das kann man theoretisch auch für irgendeine Aktion die die App im Hintergrund ausführen soll verwenden.

Ich bedanke mich trotzdem für die Antworten und hoffe ich kann damit anderen Leuten helfen.

Ein schönes Wochenende noch.
 
  • Danke
Reaktionen: swa00
Zurück
Oben Unten