2017-12-19 3 views
1

Firebase의 실시간 DB를 사용하여 만들고있는 iOS 앱에서 채팅 기능을 개발 중입니다. 나는 '타이핑 인디케이터'를 구현했습니다. 사용자가 타이핑을 시작하면, DB에서 플랙이 플립됩니다.Firebase Chat App - 시간 초과 후 입력 표시기를 중지합니다.

사용자가 아무런 활동도하지 않으면 약 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

논리를 서버에 배치하는 것은 지정된 이유로 좋은 접근 방법입니다.

또 다른 대안은 표시기 플래그를 "senderLastTypedSomething"시간 소인으로 대체하는 것입니다. 그렇게하면 수신 클라이언트는 타임 스탬프를 확인하고 적절하게 표시기를 표시 할 수 있습니다. 보내는 클라이언트가 사라지는 경우 "죽은 사람의 스위치"종류.

+0

좋은 아이디어, 그것을 구현하고 그것이 어떻게 작동하는지 보겠습니다! 감사합니다 – DJDMorrison

+1

멋지게 운동했습니다. 사용자가 계속 입력하는 경우 DB에 타임 스탬프를 2 초마다 업데이트합니다. 그런 다음 타임 스탬프가 업데이트 될 때마다 다른 클라이언트에서 타임 스탬프를 저장하고 해당 타임 스탬프가 5 초 동안 동일하게 유지되는지 확인합니다 – DJDMorrison