0

firebase匿名認証を使用し、フォアグラウンドサービスからfirebaseデータベースに書き込むアンドロイドアプリを作成しました。私はonDisconnect().removeValue()を使用して、websocketが閉じられたときに私のアプリケーションで作成されたデータをクリーンアップしています。ユーザーがアプリに積極的に関わっている場合は、onDisconnect()が予期したとおりに呼び出されます(つまり、セキュリティルールは正常です)。しかし、フォアグラウンドサービスが長時間(例えば、夜間、画面が消灯など)実行されている場合、onDisconnect()コールは決して再びトリガーされません。アプリはウェイクアップ(ファイヤーベースサーバーなどとの通信)時に機能しますが、アイドル時間の後にアプリを終了すると、onDisconnect()コールが何とか失われているようです。AndroidでフォアグラウンドサービスからFirebaseを正しく使用する方法

私は、匿名認証セッションがfirebase SDKによって毎時静かにリフレッシュされることを読んでいます。これがアクティビティで起こっている可能性があります(そして、OSによって殺されますが、フォアグラウンドサービスを有効にしておく)ので、サーバはコールバックを廃棄することになりますonDisconnect?もしそうなら、この機能はフォアグラウンドサービス内に保存できますか?

答えて

0

Firebaseには最近、バグがありました(修正されているかどうかは不明です)。毎時再認証すると、そのノードを変更する権限がなくなるため、onDisconnect()が失われます。これにより複製が作成されます。

いくつかの可能な解決策:

  1. は、タイムスタンプを添付して、最後のタイムスタンプが時間を超えているかどうかを確認し、それがある場合は、新しいものを追加する場合、それを削除します。

  2. ノードに書き込むための認証要件を削除して切断を追跡します(これは安全ですが、必要に応じて安全です)。 here

は、ここではいくつかのより多くの選択肢、およびFirebaseチームのメンバーから、問題をよりよく説明しています。

+0

ありがとう@Aubtin。コードに関する問題ではなく、Firebaseチームが問題を認識していることを知っておくとよいでしょう。 –

0

Androidアプリケーションプロセスは無期限に存続できます。ユーザーがアプリの使用を停止すると、Androidが復帰した場合や、いつ戻ってくるかを速めるために、Androidはプロセスを生かし続けることがあります。これは最適化であると考えることができ、時にはこれが起こることを期待する必要があります。あなたはこの動作を制御しようとすべきではありません。Androidがこれをあなたのために管理できるようにしてください。

あなたのデータベースへの接続は、アプリケーションがまだ稼動しており、データベースへの接続を保持しているため、閉じられていません。ユーザーがあなたのアプリケーションの使用をやめたら、それを追跡することをお勧めします。その後、適切な時点で強制的にクリーンアップを実行してください。

関連する問題