2016-08-26 3 views
6

Ich bin neu bei der Verwendung von FCM-Benachrichtigungen für Android-Anwendung unter https://firebase.google.com/docs/cloud-messaging/server. Ich habe es gelesen und festgestellt, dass in den Seitenanforderungen für FCM Server Folgendes steht:Wann benötigen Sie einen App-Server für Firebase Cloud Messaging?

Ein App-Server, den Sie in Ihrer Umgebung implementieren müssen. Diese App Server senden Daten an eine Client-Anwendung über die Verbindung FCM ausgewählten Server, geeignete XMPP oder HTTP-Protokoll

Aber ich bin sehr verwirrt über diese. Da ich mehr in den Artikel zu lesen, ich sehe, dass es eine API ist, die wie folgt aussieht:

POST http://fcm.googleapis.com/fcm/send

Wenn ich diese API mit so etwas wie OkHttpClient aufrufen und meine Bitte bauen wie so (unter der Voraussetzung, dass ich Authentifizierungs-Header und ein POST Körper eingeschlossen)

private void sendRegistrationToServer(String token) { 
    OkHttpClient client = new OkHttpClient(); 
    RequestBody body = new FormBody.Builder().add(“Body", "").build(); 
    //Assuming I have authentication and body put in 
    Request request = new Request.Builder().url("http://fcm.googleapis.com/fcm/send”).post(body).build(); 
    try { 
     client.newCall(request).execute(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

Würde ich in der Theorie, in der Lage mit einer Benachrichtigung zu senden, was Informationen ich möchte dieses Gerät? Ich kann die Nachricht durch die folgende Klasse erhalten:

public class NotificationService extends FirebaseMessagingService { 
    ... 
    // [START receive_message] 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     // TODO(developer): Handle FCM messages here. 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 

     // Check if message contains a data payload. 
     if (remoteMessage.getData().size() > 0) { 
      Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 
     } 

     // Check if message contains a notification payload. 
     if (remoteMessage.getNotification() != null) { 
      Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
     } 
    } 

Ich bin sicher, dass mein Verständnis falsch ist irgendwo da die Dokumentation nicht sagen, dass wir einen Anwendungsserver benötigen, aber wenn jemand bitte darauf hinweisen könnte, wo ich bin Missverständnis, wie man FCM-Benachrichtigungen implementieren, das wäre großartig. Wenn jemand ein Beispiel dafür geben könnte, wo oder wann wir einen App-Server benötigen oder wie er tatsächlich implementiert werden sollte, würde das auch sehr geschätzt werden. Vielen Dank!

+0

Ja, Sie können Benachrichtigungen vom Gerät mit Firebase API senden –

+0

Welchen Fehler genau bekommen Sie? –

+2

* firebaser hier * Das Senden von Downstream-Nachrichten über eine API erfordert die Verwendung des Serverschlüssels Ihres Projekts. Da dieser Schlüssel das Senden von Nachrichten im Namen Ihrer App ermöglicht, sollte er * niemals * in eine App eingebettet sein, die Sie an Ihre Benutzer senden. Daher die Notwendigkeit für einen App-Server. –

Antwort

1

Wenn die Dokumentation besagt, dass Sie einen App-Server benötigen, ist hauptsächlich, weil Sie eine Anwendung benötigen, die die Token der Geräte speichern, an die Sie die Benachrichtigungen senden möchten, und diese Anwendung sollte die Token auf einem Ihrer Clientgeräte aktualisieren ändere sein Token. Sie können jedoch die OkHttpClient verwenden, um eine Anforderung an den FCM-Dienst zu senden und daher eine Benachrichtigung an andere Geräte zu senden, wenn Sie natürlich die Token-ID dieser Geräte haben. Es hängt davon ab, was Sie tun möchten und es hängt davon ab, wie Sie die Benachrichtigungen verwalten möchten.

Wenn Sie ein Beispiel wollen, wie die Server-App in Java zu implementieren, hier ist ein gutes Beispiel example 1, die gepostet wurde oder hier ist eine andere post mit einer Implementierung auf PHP. Wenn Sie ein Beispiel für die Implementierung der Client-Anwendung und wie Sie es von der Firebase-Konsole testen möchten, hier ist eine andere gute example.

+0

Ich verstehe. Danke für Ihre Hilfe. Eine Frage eigentlich: Wie kann ich mit einer PHP-Implementierung das PHP-Skript als Java-Code bezeichnen? Wie kann ich mit dem PHP-Skript kommunizieren, so dass es eine Benachrichtigung mit den gewünschten Informationen sendet? – user1871869

+0

@ user1871869 Wenn Sie Ihre Server-Implementierung in PHP haben, können Sie das PHP-Skript von Java aus aufrufen, indem Sie die Standardbibliotheken verwenden, um eine POST- und GET-Anforderung zu stellen. Zum Beispiel wie in diesem Beispiel beschrieben (https://www.mkyong.com/webservices/jax-rs/restfull-java-client-with-java-net-url/). Sie können also Daten von der Java-App an das PHP-Skript senden, damit das PHP-Skript die Benachrichtigung mithilfe von Firebase an die mobilen Geräte sendet. Dies wäre nützlich, wenn Ihre PHP-Server-Implementierung die Token der mobilen Geräte speichert. – GeorgeLBA

+1

Wie ich oben zu der Frage angemerkt habe, erfordert das Senden von Downstream-Nachrichten, dass Sie den Serverschlüssel des Projekts angeben, der niemals in Ihre App eingebettet werden sollte. –

1

Wenn Sie das XMPP-Protokoll verwenden. Sie sollten einen Verbindungsserver implementieren, der die Verbindung zu FCM verwaltet, um Upstream- und Downstream-Nachrichten zu verarbeiten.

Dies ist ein Beispiel-Java-Projekt, um den Firebase Cloud Messaging (FCM) XMPP-Verbindungsserver zu präsentieren. Dieses Projekt ist ein sehr einfacher eigenständiger Server, den ich als Grundlage für ein größeres Projekt entwickelt habe. Es ist ein Anwendungsserver, den wir in unserer Umgebung implementieren müssen. Dieser Server sendet Daten über den FCM-CCS-Server über das XMPP-Protokoll an eine Client-App.

https://github.com/carlosCharz/fcmxmppserver

Und ich habe auch ein Video auf YouTube erstellt, wo ich erklären, was es tut.

https://www.youtube.com/watch?v=PA91bVq5sHw

Hoffe, Sie finden es nützlich.

Verwandte Themen