0

私は、ユーザがプライベートメッセージをお互いに送ることができるアプリを開発中です。 新しいメッセージを受け取ったユーザーに通知を送信したい。 どこでもFCMなどのクラウドサービスを使用していると言われました。Android - Firebaseで新しいプライベートメッセージを受信したときに通知を送信する

私は次のメソッドが動作しない理由を私は思ったんだけど、Firebaseデータベース内の各ユーザーの受け取ったメッセージを格納しています:

  1. ユーザのログイン時には、利用者の受け取ったメッセージデータベースにfirebase参照を設定しますノード。

  2. は無限ループでAsyncTaskを開始

    2.1セットOnDataChangeのイベントは、ユーザの受け取ったメッセージ・ノードの変更を聞くためにOnDataChangeのにより警告任意の変化に

    2.2、ログインに通知を送ります彼は新しいメッセージを受信しました。

これは機能しますか?

+1

こんにちはE.あなたはすべてのメッセージに通知をしたいのですが、それはプッシュ通知のようですか?正確な問題を把握できるように、あなたが試しているコードをいくつか追加してください。 –

+0

なぜAsyncTaskを使用するのですか?あなたはすでにリアルタイムデータベースであるFirebaseを持っています。 –

答えて

2

一般に、あなたが提案しているものはうまくいくでしょう。 (@int jは無限ループやAsyncTaskの必要はないと言ったので)

どれも!ユーザーのバッテリーは、あなたが提案しているもので非常に長く続くことはありません。リスナーがデータベースを常に聴いているようにするのは良い方法ではありません。アプリがフォアグラウンドにある間は問題ありませんが、アプリがバックグラウンドにあるときはデータベースリスナーの接続を解除する必要があります。このため、FCMを使用してメッセージが利用可能であることをユーザーに通知することを示唆するメッセージが多数表示されます。

+0

ありがとうございます。 (またはフラグメント)でFirebaseベースのリスナーを開始し、finish()メソッド(またはpopbackstack)を呼び出すと、リスナーがまだアクティブであるか、それを含むアクティビティとともにデタッチされますか/断片)? –

+0

このような場合にメモリリークを引き起こしている可能性があります。あなたはonPauseのリスナーを削除する必要があります。 –

+0

ありがとうございます。遅れて申し訳ありませんが、そのデータベースリスナーを配置する場所はどこですか?ユーザーの画面が何であっても、アプリがフォアグラウンド/バックグラウンドにある場合でも、常にアクティブになる場所が必要です。 –

関連する問題