2016-12-26 5 views
2

Ich brauche einige Klarstellungen.One to One Android Chat mit Firebase

Ich benutze Firebase Echtzeitdatenbank.

Jetzt muss ich einen Echtzeit-Chat zwischen zwei Android-Geräten implementieren. Ich brauche auch Push-Benachrichtigungen.

Also, die Lösung auf Basis von Echtzeit-Datenbank ist da zu fallen, wenn die App nicht läuft, wird es nicht handhaben die Ereignis onChildAdded.

Ich lese auf der Dokumentation, dass ich mein Ziel erreichen kann, mit der Upstream-Nachricht vom Gerät zum Server.

Jetzt ist es auch geschrieben, dass wir einen App-Server benötigen.

Ich will nur die Notwendigkeit des Anwendungsservers (XMPP oder HTTP) geklärt werden, und es ist, der gesamte Fluss der Nachricht M1 von der Vorrichtung A gesendet wird, und die Meldung auf dem Gerät B.

In meiner Meinung nach der App-Server als Mann in der Mitte handeln sollte, so:

A ---> XMPP SERVER ---> FCM

FCM ---> XMPP SERVER --- > B

Ist das der Fluss? Auf der Dokumentation kann ich nicht verstehen, ob ich Recht habe oder nicht. Wenn ja, wie sende ich eine Nachricht vom FCM zurück zum XMPP Server? Die Benachrichtigung wird von FCM an den Client gesendet oder von XMPP Server?

Bitte jemand klären mich.

Andere Lösung von mir dachte: Da ich wirklich mächtig Feuerbasis Echtzeit-Datenbank finden, dachte ich, diese Lösung, um das Problem zu gehen:

  1. Neues App-Server die für onChildAdded hört und wenn es senden ändert eine Benachrichtigung an das Client-Gerät.
  2. Erstellen eines Hintergrunddienstes in der Client-App, der auf onChildAdded hört und bei Bedarf eine Benachrichtigung erstellt.

Sogar alle mag ich diese Lösungen nicht. Ich möchte nur den Standard und den richtigen Weg verstehen, um mein Ziel zu erreichen.

+0

Sie müssen keinen App-Server behalten, während Sie die Firebase-Echtzeitdatenbank verwenden. Das ist das ganze Konzept von Firebase, bei dem Sie keinen Backend-Server für die Kommunikation mit unserer Datenbank benötigen. Ich weiß nicht genau, warum Sie auch eine Push-Benachrichtigung implementieren müssen, wenn Sie an einer Chat-Anwendung arbeiten, die auf Basis von Firebase implementiert wird. Sie möchten eine Benachrichtigung anzeigen, wenn eine neue Nachricht empfangen wird? –

+1

Sie können diesen Link sehen. Dies könnte helfen. https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html –

+0

@ReazMurshed: Ich muss Push-Benachrichtigung implementieren, wenn die App nicht ausgeführt wird. Mit der einzigen Echtzeitdatenbank ist dies nicht möglich. Wenn die App nicht ausgeführt wird, kann sie das Ereignis nicht verarbeiten. Ich las den Blog. Ich verstehe, was geschrieben wird, aber ich denke, das ist nicht die beste Lösung, da die Dokumentation auf der Firebase-Site vorschlägt, Firebase Cloud Messaging und einen App Server zu verwenden, um zu erreichen, was ich brauche. – xcsob

Antwort

1

Firebaser und Autor des diskutierten Artikel in der Frage Kommentare hier

Meldungen ein Gerät mit Firebase Cloud Messaging - zu senden, müssen Sie Ihr Projekt FCM Server Key angeben. Wie der Name schon sagt, sollte dieser Schlüssel nur in Code verwendet werden, der in einer vertrauenswürdigen Umgebung ausgeführt wird: d. H. Auf einem Server, den Sie steuern.

Um Gerät-zu-Gerät-Nachrichten (wie in einer 1: 1 Chat-Anwendung, wo der empfangende Benutzer Online ist nicht unbedingt mit) Sie müssen in zwei Schritten:

  1. ein Benutzer eine Upstream-Nachricht senden
  2. der andere Benutzer empfängt die Downstream-Nachricht

Mit Firebase Cloud Messaging und Ihren benutzerdefinierten App-Server-Code, können Sie Schritt Griff 2. Aber das läßt noch Schritt 1: der Benutzer muss eine Nachricht senden, die irgendwie Code auslöst auf dem App-Server. Es gibt einige Möglichkeiten, dies zu tun.

Zum Beispiel könnten Sie einen HTTP-Endpunkt auf Ihrem App-Server implementieren und die Chat-Anwendung auch dort senden lassen (zusätzlich zum Senden an die Datenbank).

Sie könnten auch einen XMPP-Endpunkt implementieren und die Chat-Anwendung die Nachricht dorthin senden lassen (wiederum zusätzlich zum Senden an die Datenbank).

My article schlagen wir noch eine andere Möglichkeit vor, die keine Implementierung eines Endpunkts erfordert. Es verwendet ein node.js-Skript, das auf Ihrem Anwendungsserver ausgeführt wird und im Wesentlichen nur ein Client für die Datenbank ist. Immer wenn dieses Skript eine relevante Chat-Nachricht erkennt, ruft es die FCM-API auf und sendet die Downstream-Nachricht.

Dieses Muster der Verwendung der Firebase-Datenbank als Endpunkt und die Verwendung serverseitiger Skripts ist bei Firebase recht häufig. Wir haben es in unserem klassischen Blogpost Where does Firebase fit in your app? (als Option 2) und in diesem article in the Google Cloud documentation dokumentiert.

+0

Hallo Mann, danke für die Beantwortung. Ich betrachtete Ihren Artikel als eine konkrete Lösung für mein Problem. Ich dachte, einen Java-Server zu implementieren, der auf Benachrichtigung wartet (wie Sie in Ihrem Artikel taten), und dann eine Benachrichtigung an den Benutzer senden. Meine Zweifel sind: 1) Ist das eine skalierbare Lösung? Könnte der Server ein Flaschenhals sein? Es ist besser, es in Knoten zu implementieren, um zuverlässiger und effizienter zu sein? 2) die Nachricht zwischen den beiden Geräten wird immer durch die Echtzeit-Datenbank ausgetauscht, die einzige Sache, die sich ändert, ist die Benachrichtigung gesendet, wenn jemand eine Nachricht sendet? Ich meine: – xcsob

+0

A schicke eine Nachricht an B. Das wird bedeuten: 1) die Nachricht als Kind des Chats hinzufügen A-B; 2) Fügen Sie die Anforderung der Benachrichtigung als Kind der Entitätsbenachrichtigung hinzu. 3) App Server liest das Kind der Benachrichtigung und sendet eine Push-Benachrichtigung an B 4) B den Chat öffnen und sieht die Nachricht mit dem Listener onChildAdded auf dem Chat A-B. Ist das der Fluss? Danke. – xcsob

+0

Gut erklärt @FrankvanPuffelen. –