2017-12-23 75 views
1

Firebase를 사용하여 응용 프로그램을 작성하고 있습니다. 이 앱의 기능 중 하나는 사용자가 다른 사용자에게 메시지를 보낼 수있는 채팅 기능입니다. this one 또는 this one과 같이 이것을 구현하는 방법을 설명하는 온라인 자습서는 모두 익명 인증을 사용하므로 많은 원칙이 적용되지 않습니다. 이 기능을 사용하려면 먼저 사용자를 인증해야합니다.Firebase 용 메시징 응용 프로그램 데이터베이스 구조

내가 처분 할 수있는 두 가지 주요 사항은 내 응용 프로그램의 JSON 데이터베이스 구조에서 특정 경로의 내용을 수정 (추가, 편집, 삭제, 변경 순서)하고 이러한 변경 사항을 클라이언트 측에서 관찰하는 것입니다 그들이 일어날 때. 모든 메시지를 동일한 하위에 쉽게 넣을 수 있으며 메시지 자식에 대한 변경 사항을 수신 한 다음 현재 사용자 ID와 관련된 메시지를 찾아 클라이언트 쪽에서 모든 메시지를 대화 형식으로 구문 분석 할 수 있습니다. 그러나이 방법은 많은 불필요한 메시지를 필터링해야하는 것처럼 비효율적 인 것처럼 보입니다.

관찰 구조가 어떻게 작동해야하는지, 각 메시지에 무엇을 포함해야하는지, 별도의 대화로 효율적으로 정렬하는 방법에 대한 설명은 매우 유용 할 것입니다.

답변

0

대부분의 채팅 응용 프로그램은 대화방의 개념, 직접 대화를위한 1 : 1 회의실 또는 사용자 그룹간에 이름이 지정된 회의실에서 작동합니다. 방 ID로 그 방 (단지) 메시지를 사용하여 데이터베이스에 노드로

당신 모델 도달 룸 :

chatrooms 
    roomdid1: 
    msg1: { from: ..., text: ..., timestamp: ... } 
    msg2: { from: ..., text: ..., timestamp: ... } 
    msg3: { from: ..., text: ..., timestamp: ... } 
    roomdid2: 
    msg4: { from: ..., text: ..., timestamp: ... } 
    msg5: { from: ..., text: ..., timestamp: ... } 
    msg6: { from: ..., text: ..., timestamp: ... } 

방에 대한 메시지를로드하려면, 당신은 단지, 그 방을 듣고 예 /chatrooms/roomid1.

사용자가있는 방의 이름 지정 규칙 아이디어는 http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase을 참조하십시오.

+0

지도 주셔서 감사합니다. 매우 도움이됩니다. 나의 유일한 생각은 모든 대화방을 수동으로 분석하고 사용자가 chatroom ID를 기반으로 한 사용자인지 확인하는 것입니다 (데이터를 채우기 시작할 때 느리게 다운로드 할 수 있습니다). 채팅룸 ID가 포함 된 다른 노드를 만들고이를 통해 검색하는 것이 좋습니다. –

+0

그것은 실제로 나쁜 생각 일 것입니다. 일반적으로 각 UID로 각 사용자의 방 목록을 가져옵니다. 그래서 :'/ userrooms/$ uid/roomid1 : true','/ usersrooms/$ uid/roomid2 : true' 등 –