2017-12-19 9 views
1

FirebaseのリアルタイムDBを使用しているiOSアプリケーションでチャット機能を開発しています。私は 'タイプインジケーター'を実装しました。ユーザーが入力を開始すると、フラグがDB内で真に反転されます。Firebaseチャットアプリ - タイムアウト後にタイピングインジケータを停止する

ユーザーからの活動がない一定時間(約5秒)後にこれをfalseに戻すには、どのような最も安全な方法がありますか?これは、ユーザーが入力を開始するたびにタイムアウトをリセットするだけで、クライアント側で簡単に行うことができます。ただし、クライアントがクラッシュした場合や、このタイムアウト前にユーザーが終了した場合はどうなりますか?

Firebaseのクラウド機能を使用して、キーを監視してサーバでタイムアウトを行うことで、インジケータがtrueに設定されるたびに機能を実行する方が良いでしょうか?物事が拡大し始めるときには、これはより安全に聞こえるが、かなり高価になる。

どのような考えですか?

+0

[-onDisconnectSetValue:](https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDatabaseReference#/c:objc(cs)FIRDatabaseReference(im )onDisconnectSetValue :)クライアントが切断すると、ノード値をfalseに設定できます。 Firebaseにはタイマーがありません。両方のクライアントが切断されている場合(受け入れられた回答ごとに)、システム全体が同期しなくなります。 – Jay

答えて

1

指定した理由により、ロジックをサーバーに配置するのは良い方法です。

もう1つの方法は、インジケータフラグを "senderLastTypedSomething"タイムスタンプに置き換えることです。こうすることで、受信側のクライアントはタイムスタンプをチェックし、そのインジケータを適切に表示できます。送信側のクライアントが消えた場合の「死者のスイッチ」の種類。

+0

良いアイデア、私はそれを実装し、それがどのように動作するかを見てみましょう!ありがとうございました – DJDMorrison

+1

うまくいきました。ユーザーがまだ入力している場合は、DBのタイムスタンプを数秒ごとに更新します。次に、タイムスタンプが更新されるたびに、タイムスタンプを保存し、5秒後にそれがまだ同じかどうかをチェックするために、他のクライアント上の関数を起動します – DJDMorrison

関連する問題