Pinning Chat Messages
In Order to show or pin some important message in chat, users can use these APIs. The APIs allow users to pin messages with real-time listeners to all the chatroom listeners.
Note
Only the Producer or creators of the chatroom are allowed to pin messages.
These are access control through backend API's so can be controlled/managed easily.
Pin Message
The function pinMessage allows the producer or the creator of the chatroom to choose which message to focus on. The parameters of the function are messageID, chatRoomID and chatMessage. On successful completion, the function returns an object of type PinMessageInfo
What is PinMessageInfo?
PinMessageInfo
is an object which contains information related to pin messages likeroomId
,messageId
,pinById
etc. For doing any operation on pinned message, you may require the pinMessageInfo id (throughgetPinMessageInfoList
API)
// requires an instance of LiveLikeChatMessage,
// returns an instance of pinMessageInfo or error string.
sdk.chat().pinMessage(
messageId = chatMessage.id!!,
chatRoomId = chatRoomId!!,
chatMessagePayload = chatMessage,
liveLikeCallback = object: LiveLikeCallback < PinMessageInfo > () {
override fun onResponse(result: PinMessageInfo ? , error : String ? ) {
error?.let {}
result?.let {
messageInfo ->
}
}
}
)
LiveLike.pinMessage({
roomId: "9e6f1bc4-9f02-4c57-92b7-7521d0f5b027",
messageId: "aa7e03fc-01f0-4a98-a2e0-3fed689632d7",
messagePayload: { // messagePayload of type IMessagePayload
message: "test Message"
}
}).then(pinMessageInfo => console.log(pinMessageInfo))
//pinMessage(_ message: ChatMessage) is a part of the chatSession of a particular Chat Room
//It requires an object of the chat message to be passed as a parameter to the API
chatSession.pinMessage(message) { result in
switch result {
case .failure(let error):
//Returns an error
case .success(let pinMessage):
//Returns an object of type PinMessageInfo
}
}
Unpin Message
To Unpin a message use unpinMessage API which requires id of PinMessageInfo object and in returns it provide success or error message string.
sdk.chat().unPinMessage(pinMessageInfoId = pinnedList[index].id!!,
liveLiveLikeCallback = object: LiveLikeCallback < LiveLikeEmptyResponse > () {
override fun onResponse(result: LiveLikeEmptyResponse ? , error : String ? ) {
error?.let {}
result?.let {}
}
}
)
const pinMessageInfoId = "3f81ccb0-ec95-4e71-a0b7-462889699f75";
LiveLike.unpinMessage({
pinMessageInfoId: pinMessageInfoId
}).then(res => {
// success res is no content, err response would contain error details.
console.log(res)
})
chatSession.unpinMessage(pinMessageInfoID: messageID) { result in
switch result {
case .success:
//Successfully Unpinned Message
case .failure(let error):
//Returns error
}
}
List Of Pin Messages
To get the list of pin messages, use getPinMessageInfoList which requires ChatRoomID and orderBy and returns list of pin message info or error message string.
Ordering of List of PinMessageInfo
The API getPinMessageInfoList accepts a parameter orderBy which lets you choose if the list should be received in ascending ( asc ) or descending ( desc ) order.
// Also requires instance of LiveLikePagination and instance of PinMessageOrder
sdk?.chat()?.getPinMessageInfoList(
chatRoomId!!,
LiveLikeOrdering.ASC,
LiveLikePagination.FIRST,
object: LiveLikeCallback < List < PinMessageInfo >> () {
override fun onResponse(result: List < PinMessageInfo > ? , error : String ? ) {
result?.let {}
error?.let {}
}
}
)
LiveLike.getPinMessageInfoList({
roomId: "37e1720a-fc7b-4962-b216-6be9ed69dc96",
orderBy: "desc" // order by pinned time, optional prop, could be "asc" | "desc"
}).then(paginatedPinMessageInfoList => console.log(paginatedPinMessageInfoList))
chatSession.getPinMessageInfoList(orderBy: .asc, page: .first) { result in
switch result {
case .success(let pinMessages):
//Returns a list of pinMessages based on pagination
case .failure(let error):
//Returns an error to handle
}
}
Real Time Events for Pin/Unpin Message
In order to receive real-time events for pin/unpin messages, add listeners/delegates.
Platform specific implementation
Implementation for receiving real time events is different for Web, Android and IOS.
chatSession.setMessageListener(object: MessageListener {
private val TAG = "LiveLike"
override fun onNewMessage(message: LiveLikeChatMessage) {
}
override fun onHistoryMessage(messages: List < LiveLikeChatMessage > ) {
}
override fun onDeleteMessage(messageId: String) {
}
override fun onPinMessage(message: PinMessageInfo) {
activity?.runOnUiThread {
// use ui thread to work on any UI element here
}
}
override fun onUnPinMessage(pinMessageId: String) {
activity?.runOnUiThread {
// id of the pinMessageInfo class
}
}
})
// For getting real time pin message event with the pinMessageInfo
function onReceivedPinMessageListener (pinMessageInfoEvent) {
console.log(pinMessageInfoEvent)
}
LiveLike.addChatRoomEventListener(
LiveLike.ChatRoomEvent.PIN_MESSAGE,
onReceivedPinMessageListener,
{ roomId: "695ea6f4-fe7b-47cc-817c-2d73fdba264a" }
);
// For removing pin message listener
LiveLike.removeChatRoomEventListener(
LiveLike.ChatRoomEvent.PIN_MESSAGE,
onReceivedPinMessageListener,
{ roomId: "695ea6f4-fe7b-47cc-817c-2d73fdba264a" }
);
// For getting real time unpin message event with unpin message info id
function onReceivedUnpinMessageListener (unpinEventMessage) {
console.log(unpinEventMessage)
}
LiveLike.addChatRoomEventListener(
LiveLike.ChatRoomEvent.UNPIN_MESSAGE,
onReceivedUnpinMessageListener,
{ roomId: "695ea6f4-fe7b-47cc-817c-2d73fdba264a" }
);
// For removing unpin message listener
LiveLike.removeChatRoomEventListener(
LiveLike.ChatRoomEvent.UNPIN_MESSAGE,
onReceivedUnpinMessageListener,
{ roomId: "695ea6f4-fe7b-47cc-817c-2d73fdba264a" }
);
Updated about 1 month ago