2017-03-01 5 views
3

私は、ユーザを同期させたいロビーを持っています。したがって、ユーザーがアプリの実行中にインターネットをオフにすると、彼は削除する必要があります。私はFirebaseがサーバ側のコーディングをサポートしていないことを知っているので、コーディングはクライアント側である必要があります。 How to delete firebase data after "n" daysDelete firebase data older than 2 hoursの回答は、ユーザーがオンラインでインターネットに接続していることを期待しているため、この質問には答えません。だから私の質問は、彼らがインターネットを持っていないときにユーザーを削除することは可能ですか?ユーザーに5秒ごとに値を更新させ、その更新が行われていないときには、そのロビーの他のユーザーがプレーヤーを削除するようにすることを考えました。すべてのプレイヤーが5秒ごとにたくさんのデータを取得してアップロードする必要があるため、この方法は良くありません。これを解決する最善の方法は何ですか?Firebaseの期間の後に値を変更する

編集:それを短くするために、各ユーザーにイメージがあると言うことができます。ユーザーが接続されているときは緑、接続が切断されているときはグレーである必要があります。

編集2:それを考えた後、接続されたユーザーをクライアント側のサーバーに正確に提示することは本当に難しいです。そのため、誰も別の解決策がない場合は、サーバーサイドコードを実行できる別のサーバーを追加する必要があります。サーバーが大量であるため、使用するサーバーを知りたいと思います。サーバは、ユーザが接続されているか切断されているかどうかをチェックするだけの簡単な機能を実行し、Firebaseと通信できます。私が正しいとすれば、これは次のようになります:servers

しかし、サーバーもユーザーと直接通信する必要があります。私はどこから始めるのか全く分からない。

+0

https://firebase.google.com/docs/database/ios/offline-capabilities#section-connection-state –

+0

私はそのオプションについて知っていました。しかし、インターネットを持っていないユーザーは、サーバーにデータをアップロードすることになっていますか?ユーザーがインターネットを再び有効にするときに関数が実行されることはわかっていますが、これは最善の方法ではありません。 – NoKey

+0

この関数はサーバー上でコールバックを登録するため、接続が失われたときに実行されます。しかし、iOSの制限により、ユーザーがアプリケーションを終了するとすぐに接続が失われます –

答えて

1

完全に間違っていない場合は、onDisconnectを使用できるはずです。 Firebase、ドキュメントから

どうonDisconnect

:onDisconnect()操作が確立されると、それはFirebaseリアルタイムデータベースサーバーに住んで :作品。サーバーはセキュリティーをチェックして、ユーザーが要求された書き込みイベントを実行できることを確認し、クライアントが無効であることをクライアントに通知します。サーバーは接続を監視します。いずれかの時点でタイムアウトした場合、またはクライアントによってアクティブに閉じられている場合、サーバーはセキュリティを2回チェックして(操作がまだ有効であることを確認してから)、イベントを呼び出します。

私はonDisconnectRemoveValueを使用しています。アプリケーションを閉じると、ユーザーはロビーから自分自身を削除します。飛行機モードでデバイスをオンにしたときの動作はわかりませんが、ドキュメントには問題はないようです。

1つのこと:実際のデバイスでそれをテストすると、シミュレータに問題が発生します。少なくとも、インストールしてください。

を編集してください:飛行機モードでデバイスを置いたときにonDisconnectを確認しても問題ありません。問題は約1:30分にユーザーが削除されるということです。ドキュメントを読んだり、サポートに相談すれば、あなたが望む時間を設定する方法を見つけることができます(そしてたぶんそうかもしれません) 。

+0

これは闘争でした、私は飛行機モードで遅れがあるのを知らなかった...ありがとう! – NoKey

関連する問題