2016-12-26 9 views
2

私はいくつかの説明が必要です。Firebaseを使用した1対1のAndroidチャット

私はFirebaseリアルタイムデータベースを使用しています。

今、2つのAndroidデバイス間でリアルタイムチャットを実装する必要があります。プッシュ通知も必要です。

ので、リアルタイムデータベースに基づくソリューションは、アプリが実行されていない場合、それはイベントをonChildAdded処理しないので、ドロップすることです。

私は、サーバーへのデバイスから上流のメッセージを使用して、私は私の目的を達成することができますドキュメントに読み込みます。

今、アプリケーションサーバーが必要であることも書かれています。

私はアプリケーションサーバ(XMPPまたはHTTP)の必要性を明らかにしたい、そしてそのメッセージの全体の流れは装置Aから送信され、デバイスB

でオン通知M1れます私の意見のアプリケーションサーバはそう、途中に男として行動しなければならない:

A ---> XMPPサーバ---> FCM

FCM ---> XMPPサーバ--- > B

これは流れですか? ドキュメントには、私が正しいかどうかわかりません。 もしそうなら、FCMからXMPPサーバーにメッセージを送り返すにはどうすればよいですか? 通知メッセージは、XMPPサーバーからFCMからクライアントに送信されますか?

誰かが私を明確にしてください。私が考えた

その他のソリューション: 私は本当に強力firebaseリアルタイムデータベースを見つけるので、私は問題の周りを歩くためにこれらのソリューションを考えた:

  1. それがお送り変化したときにインクルードがonChildAddedのリスニングとされるアプリケーション・サーバーを作成します。クライアント装置への通知。
  2. クライアントアプリケーションでバックグラウンドサービスを作成して、onChildAddedを聞き、必要に応じて通知を作成します。

でも、私はこれらの解決策が嫌いです。 私の目標を達成するための標準と正しい方法を理解したい。

+0

Firebaseリアルタイムデータベースを使用しているときにアプリサーバーを保持する必要はありません。それがFirebaseの全概念です。これは、バックエンドサーバーをデータベースと通信する必要がないということです。 Firebaseに基づいて実装されている1対1のチャットアプリケーションで作業中に、なぜプッシュ通知を実装する必要があるのか​​正確にはわかりません。新しいメッセージを受信したときに通知を表示したいですか? –

+1

このリンクをご覧ください。これは役に立ちます。 https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html –

+0

@ReazMurshed:アプリが実行されていないときにプッシュ通知を実装する必要があります。唯一のリアルタイムデータベースではこれは不可能です。アプリが実行されていない場合は、イベントを処理できません。 私はブログを読んでいます。私は何が書かれているのか理解していますが、Firebaseのサイトの文書にFirebase CloudのメッセージングとApp Serverを使用して必要なものを実現することが提案されているため、これは最善の解決策ではないと思います。 – xcsob

答えて

1

FirebaserとFirebaseクラウドメッセージングとにデバイスをメッセージを送信するには、ここで質問コメント

で議論記事の著者は、あなたのプロジェクトのFCMサーバキーを指定する必要があります。その名前が示すように、このキーは信頼できる環境で実行されるコード、つまり自分が管理するサーバーでのみ使用する必要があります。上流のメッセージ を送る

  1. 1ユーザー:あなたは2つのステップを必要とする:(受信側ユーザは必ずしもオンラインではありません1チャットアプリケーションなど1のように)デバイス間のメッセージを送信すること

  2. 他のユーザーは、手順2を処理することができますFirebaseクラウドメッセージングおよびカスタムアプリケーションサーバーのコードを使用して下流メッセージ

を受け取るしかし、それは、まだステップ1を残します:ユーザーが何らかの形であなたのコードをトリガーするメッセージを送信する必要がありますアプリサーバーでこれを行うにはいくつかの方法があります。

たとえば、アプリケーションサーバーにHTTPエンドポイントを実装し、チャットアプリケーションにメッセージを送信させることもできます(データベースへの送信に加えて)。

また、XMPPエンドポイントを実装し、チャットアプリケーションにメッセージを送信させることもできます(データベースに送信することに加えて)。

My articleは、エンドポイントの実装をまったく必要としないさらに別の方法を示唆しています。これは、アプリケーションサーバー上で実行されるnode.jsスクリプトを使用し、基本的にはデータベースのクライアントにすぎません。このスクリプトは、関連するチャットメッセージを検出するたびに、FCM APIを呼び出し、ダウンストリームメッセージを送信します。

Firebaseデータベースをエンドポイントとして使用し、サーバーサイドスクリプトを使用するこのパターンは、Firebaseを使用する場合には非常に一般的です。私たちは古典的なブログ投稿Where does Firebase fit in your app?(オプション2として)とarticle in the Google Cloud documentationにそれを記録しました。

+0

こんにちは、 お返事ありがとうございます。あなたの記事を私の問題の具体的な解決策と考えていました。 あなたの記事と同じように、通知を受け取っているJavaサーバーを実装し、通知をユーザーに送信すると考えました。 私の疑問は次のとおりです。 1)これはスケーラブルなソリューションですか?サーバーはボトルネックになりますか?より信頼性と効率性を高めるために、ノードに実装する方が良いでしょうか? 2)2つのデバイス間のメッセージがリアルタイムデータベースで常に交換されますが、唯一の変更は誰かがメッセージを送信したときに通知が送信されることですか?私は意味する: – xcsob

+0

AはBにメッセージを送る これは、 を意味します。1)チャットA-Bの子としてメッセージを追加します。 2)通知要求をエンティティ通知の子として追加します。 3)アプリケーションサーバーは通知の子を読み取り、B にプッシュ通知を送信します。4)チャットを開き、チャットA-BのリスナーonChildAddedを使用してメッセージを表示します。 これが流れですか?おかげさまで – xcsob

+0

よく説明されている@FrankvanPuffelen。 –

関連する問題