채팅

1. 채팅 메시지 모델

채팅 메시지를 보내고 받을 때 FFMessage라는 모델을 사용합니다.

FFMessage의 내용은 다음과 같습니다.

fieldtypedescription
messageIdString메시지 ID. 보낼때는 없어도 된다.
messageString사용자가 보내는 메시지
messageTypeString메시지를 그룹짓는 타입
customTypeString메시지를 특정 용도로 그룹지을 때 사용하는 값
dataString메시지에 추가하고 싶은 내용이 있을 때 사용하는 값
receiverString메시지를 받는 사람의 userId.(DM의 경우에만 사용한다.)
createdAtData메시지 생성 시간
participantCountLong채팅 동접자 수(JOIN과 LEAVE에만 있다)
totalWatchCountLong채팅방 전체 사용자 수(누적, JOIN과 LEAVE에만 있다)

사용자는 두 가지 형태의 메시지를 보낼 수 있습니다. 첫번째는 라이브를 보고 있는 전체 사용자에게 메시지를 보내는 것이고, 두번째는 특정 사용자에게만 메시지를 보내는 것입니다. 첫번째 경우는 sendMessage 함수를 사용하고, 두번째 경우는 sendDM 함수를 사용합니다. 두 함수 모두 커스텀 형태로의 사용을 위해 파라메터로 customTypedata를 제공하고 있습니다.

messageType은 내용은 지정되어 있는 값으로서 사용자가 추가할 수 없습니다.(사용자가 보내는 메시지는 messageType이 모두 MESSAGE로 고정됩니다.) 메시지에 대한 사용자의 커스텀을 위해서는 customTypedata를 통해 할 수 있습니다.

2. customType과 data를 활용하는 예

채팅 메시지를 통해 사용자들이 질문과 답변을 주고 받는 예를 살펴보겠습니다. 질문과 답변에 대한 UI를 구별하고 싶고, 답변의 경우 어떠한 질문에 대한 답변인지를 표시하고 싶습니다. 어떻게 하면 될까요?

메시지를 보낼 때 질문의 경우는 customType을 "QUESTION"으로 설정하고, 답변의 경우는 customType을 "ANSWER"로 설정합니다. 이렇게 하면 메시지를 받은 사용자는 customType을 확인하여 질문과 답변을 다른 UI로 보여줄 수 있습니다. 또한, 답변의 경우 어떤 메시지에 대한 답변인지를 알고 싶으므로 메시지를 보낼 떄 data에 원 질문의 메시지를 포함합니다. 이렇게 하면 답변 메시지를 받은 사용자는 customType 필드가 "ANSWER"인 경우에는 data 필드를 확인하여 답변과 함께 질문도 같이 보여줄 수 있습니다.

// send question by streamer
streamer?.sendMessage(text = "Are you guys enjoying this live?", customType = "QUESTION")
// send answer by live watcher
player?.sendMessage(text = "Yes.", customType = "ANSWER", data = "Are you guys enjoying this live?")

3. 서버가 보내는 메시지

서버가 클라이언트에게 라이브의 상태을 알린다던가, 사용자에게 공지를 한다던가 하기 위해 서버가 클라이언트에게 메시지를 보낼 수 있습니다.서버가 보내는 메시지는 다음의 값들이 있습니다.

messageTypecustomTypedata설명
ADMINCLOSENULL라이브 종료를 알리는 메시지
DISCONNECTNULL라이브가 강제로 종료되었음을 알리는 메시지(예: 어드민이 강제 종료할 수 있습니다.)
UPDATE{ “like_count”: 5 }라이브 관련한 정보를 클라이언트에게 알려주는 메시지. JSON 형식. 현재는 like_count만 있고 추후 필드가 추가될 수 있습니다.
ACTIVENULL라이브 송출이 시작(또는 다시 시작) 되었음을 클라이언트에게 알리는 메시지
INACTIVENULL라이브 송출이 일시적으로 중단되었음을 클라이언트에게 알리는 메시지
JOINNULLNULL사용자가 채팅방에 들어왔음을 알리는 메시지
LEAVENULLNULL사용자가 채팅방을 나갔음을 알리는 메시지
  • 관련 메시지를 받으면 클라이언트에서 원하는 형태로 메시지를 표시해 주면 됩니다.

예: JOIN 메시지가 들어왔을 때는 “John 님이 들어왔습니다.”를 채팅창에 보여주고 LEAVE 메시지가 들어왔을 때는 무시

JOIN과 LEAVE 메시지에 participantCounttotalWatchCount값이 있기 때문에 동접자 수등을 화면상에 표시한다면 JOIN과 LEAVE 메시지를 받을 때 관련 값에 대한 처리를 해야 합니다.