SDK now supports Custom Report Categories
configured through Sendbird Dashboard, which takes effect after restarting the app.
Previous report categories will remain until app restart.
- Added
getReportCategoryInfoList()
- Added
ReportCategoryInfo
- Deprecated
ReportCategory
const reportCategoryInfoList: ReportCategoryInfo[] = await sb.getReportCategoryInfoList();
...
reportCategoryInfoList.forEach((reportCategoryInfo) => {
// make Report Category list
// use reportCategoryInfo.name
});
- Added
sampledUserInfoList
inReaction
- Fixed a bug where called API with deprecated param in
markAsDelivered
Added new properties in Reaction
to support more users
export default class Reaction {
...
// A list of sampled userIds that have reacted to this Reaction.
get sampledUserIds: string[]
// A count of the number of users who have reacted to this.
get count: number
// A flag indicating whether the current user has reacted to this.
get hasCurrentUserReacted: boolean
...
}
- Deprecated
userIds
inReaction
- Fixed a bug where GET muted API is called every time
- Fixed a bug when autoresend started, did not update channel info
- Fixed a bug where
expiring_session=true
regardless of whetherSessionHandler
is registered whenauthToken
exists - Fixed typo in
markPushNotificationAsClicked
logs
- Added
message
property inFileMessageCreateParams
- Added
message
property inFileMessage
- Fixed a bug that local cache data is broken in a certain condition
- Fixed a bug where there was no mentionedUser when sending a message with mentionedUserId as CopyMessage
- Improvement stability
- Deprecated
customTypeFilters
inUnreadItemCountParams
- Added
customTypesFilter
inUnreadItemCountParams
Support pinned message
in OpenChannel
- Added
pinnedMessageIds
property inBaseChannel
- Added
createPinnedMessageListQuery
method inBaseChannel
- Added
pinMessage
method inBaseChannel
- Added
unpinMessage
method inBaseChannel
- Added
lastPinnedMessage
property inOpenChannel
- Added
onPinnedMessageUpdated
inOpenChannelHandler
- Added
customTypeFilters
inUnreadItemCountParams
- Fixed a build error related to Node.js package inclusion
- Added
hasBot
andhasAiBot
inGroupChannel
- Added
version
toMessageForm
- Fixed a bug where
MessageForm.isSubmitted
is evaluated as true for aMessageForm
of which everyMessageFormItem.required
is false and the message form is not yet submitted - Fixed bug where too many request API in
messageCollection
- Fixed an issue where the SDK instance was not being correctly type-inferred
- Improved Message delivery speed in MessageCollection Initialize
- Fixed a bug in
MessageForm
to support backward compatibility
SDK now supports MessageForm
! Form message can only be sent through AI Chatbot in Sendbird dashboard.
- Added
MessageForm
- Added
MessageFormItem
- Added
MessageFormItemStyle
, - Added
MessageFormItemLayout
, - Added
MessageFormItemResultCount
, - Added
submitMessageForm()
inBaseMessage
- Deprecated
submitMessageForm(data)
inBaseMessage
- Added
sb.authenticate()
- Added
sb.feedChannel.getTotalUnreadNotificationCount()
- Deprecated
sb.authenticateFeed()
- Deprecated
sb.feedChannel.getTotalUnreadMessageCount()
- Fixed timing issue with
BackGroundSync
completion confirmation - Fixed a bug that
userIdsFilter
andsearchFilter
don't work in MessageCollection - (internal) Added
ThrottleController
inMessageCollection
- Fixed a bug that
connect()
fails if a session key is expired
- Added
submitMessageForm()
toBaseMessage
- Lower the version of
react-native-mmkv
inpeerDependencies
from^2.12.2
to^2.0.0
.
- Added
includeMetaData
toGroupChannelFilter
- Fixed the Feedback feature to function correctly
- Fixed a bug where
groupChannel.cachedMetadata
was returned asundefined
in the result value ofChangeLogs
- Fixed a bug that always throws a
Connection is canceled
error whenconnect()
is failed - Fixed a bug where
SessionRefreshed()
was called twice - Fixed a bug where SessionHandler callback is called when
connect()
is failed - Fixed a bug inconsistent count of joined channels
- Improved stability
- Fixed a bug that pending
MultipleFilesMessage
has emptydata
- Fixed a bug that
loadMore()
inGroupChannelCollection
gives less channels in a certain condition - Improved stability
- Added
useMMKVStorageStore
toSendbirdChatParams
- Deprecated
useAsyncStorageStore
inSendbirdChatParams
- Fixed a bug that
connect()
call may crash in a certain condition - Fixed a bug that
MultipleFilesMessage
has wrongdata
value - Improved stability
- Fixed a bug when called
resetMyHistory()
, messages in the cache aren't deleted
- Added ErrorCode(
USER_DEACTIVATED
) in Message Resendable Condition
- Added additional parameters in
GroupChannelEventContext
- Fixed a bug that
lastMessage
not updating on reply - Fixed a bug that database upgrade fails in certain environment
- Improvement stability
- Added
markPushNotificationAsDelivered
- Added
markPushNotificationAsClicked
- Added token registration with device info
- Added
logViewed
/logClicked
in FeedChannel - Deprecated
markAsClicked
/logImpression
in FeedChannel - (internal)Refactoring statCollector
- Fixed a bug that
onMessagesUpdated
event not firing on ThreadInfo updated event - Exported
SendbirdErrorCode
- Improvement stability
- Added
keys
property toMessageTemplateListParams
- Fixed a bug that database migration fails in a certain condition
- Improvement stability
- Fixed a bug that
markAsRead()
with messages does not trigger any event inNotificationCollection
- Fixed a bug that
markAsRead()
with messages wrongly signals updating messages inNotificationCollection
- Improvement stability
Message templates created via platform API can be fetched with getMessageTemplatesByToken()
and getMessageTemplate()
- Added
MessageTemplate
- Added
MessageTemplateList
- Added
MessageTemplateListParams
- Added
MessageTemplateListResult
- Added
MessageTemplateInfo
- Added
messageTemplateInfo
inAppInfo
- Added
getMessageTemplatesByToken()
, andgetMessageTemplate()
inMessageModule
- Fixed a bug where channel list of
GroupChannelCollection
was not removed when leaving a public group - Added get message template feature
- Improvement stability
- Fixed a bug where
thumbnails
are not being set properly - Improvement stability
- Added
priority
inNotificationMessage
- Added
ThreadedParentMessageListQuery
- Added
createThreadedParentMessageListQuery()
inGroupChannel
- Added
markThreadAsRead()
inBaseMessage
- Added
setPushNotificationEnabled()
inBaseMessage
- Added
totalUnreadReplyCount
inBaseChannel
- Added
unreadReplyCount
,memberCount
,isPushNotificationEnabled
inThreadInfo
- Fixed a bug that
unreadMessageCount
does not match in a certain condition - Fixed a bug with markAsRead() error in a certain condition
- Improvement stability
- Fixed a bug where
onMentionReceived
event is called when a mention is deleted - Fixed a bug:
sendbird.min.js
does not set the SDK to global object - Fixed bug where
onMessagesUpdated()
event do not called if localCacheEnable is false - Fixed bug in LogLevel order
- Fixed issue where the parent message retrieved from the cache is a multiple files message and is not parsed correctly
- Added appState check when throwing network exception
- Added
extendedMessagePayload
toUserMessageCreateParams
- Improvement stability
- Fixed a bug that open channel messages are stored in cache
- Improvement stability
- Added uploadFile() in BaseChannel
- Fixed a bug that lastMessage updates in a condition that it shouldn't
- Added
prevResultLimit/nextResultLimit
inBaseMessageCollectionParams
/**
* @param limit Deprecated since v4.10.5. Use prevResultLimit/nextResultLimit instead.
*/
groupChannel.createMessagecollection( { limit: 10 } );
or
groupChannel.createMessageCollection({ prevResultLimit: 5, nextResultLimit: 5, });
- Added constructor in
MessageFilter/GroupChannelFilter
const filter: MessageFilter = new MessageFilter();
filter.senderUserIdsFilter = [ ... ];
or
const filter:MessageFilter = new MessageFilter({
senderUserIdsFilter: [ ... ],
...
});
groupChannel.createMessagecollection( { filter } );
const filter:GroupChannelFilter = new GroupChannelFilter();
filter.includeEmpty = true;
or
const filter:GroupChannelFilter = new GroupChannelFilter({
includeEmpty: true,
...
});
sb.groupChannel.createGroupChannelCollection({ filter });
- Added
markAsRead(messages: NotificationMessage[])
inFeedChannel
- (internal) Removed
markAsReadBy(messages: NotificationMessage[])
inFeedChannel
- Fixed bug where
is_reply_to_channel
parsing error inBaseMessage
- Fixed bug where
onMessagesUpdated()
event do not called iflocalCacheEnable
isfalse
- Improvement stability
- Fixed a bug of flooded cache in React Native
- Added
logCustom()
inFeedChannel
to log custom stat
- Fixed a bug where an exception wasn't thrown during
connection()
It simplifies the process by returning Record<{ [string]: any }>
, eliminating the need to stringify values like extended_message
. This improvement enhances the functionality of the AI chat bot, particularly in areas such as forms
, suggested_replies
, and custom_views
.
- Added
markAsClicked()
in FeedChannel - Updated interface of
markAsReadBy()
inFeedChannel
to takemessages
as a parameter - Updated interface of
logImpression()
inFeedChannel
to takemessages
as a parameter - Fixed a bug where
groupChannel.upsert
- Fixed a bug where
getMessageCommand
parsing error - Fixed a bug where an
unhandled exception
- (internal) Fixed a bug where
SessionRefreshAPIResponseCommand
parsing
- Added new read-only attribute
messageReviewInfo
on theUserMessage
export default class UserMessage {
...
// exist only if the message is in review or it has been approved
readonly messageReviewInfo: MessageReviewInfo?
...
}
export default class MessageReviewInfo {
readonly status: MessageReviewStatus;
readonly originalMessageInfo?: OriginalMessageInfo; // (exist only if the status is approved)
...
}
export enum MessageReviewStatus {
INREVIEW = 'InReview',
APPROVED = 'Approved',
}
export interface OriginalMessageInfo {
createdAt: number;
messageId: number;
}
- Added
getDeliveryStatus(includeAllMembers = true)
interface
- Fixed a bug where a session refresh error occurred repeatedly
- Fixed a bug where
uploadableFileInfo.fileUrl
does not include auth value when auth is required internally - (internal) Fixed a bug that channel refresh not triggering
onChannelUpdated
event- Please use changelog instead for improved stability
- Fixed a bug that
connect()
timed out in a certain case
- Added
messageStatus
inNotificationMessage
- Added
markAsReadBy(notificationIds)
inFeedChannel
- Added
logImpression(notificationIds)
inFeedChannel
- Fixed a bug that
MessageCollection
has wronghasPrevious
andhasNext
in a certain condition - Fixed a bug that
groupChannel.refresh()
does not triggeronChannelUpdated
inMessageCollection
- Fixed a bug that
metaArrays
parameter does not work inupdateUserMessage()
andupdateFileMessage()
- Improved stability
- Added
NotificationMessage
NotificationMessage
usesnotificationId
as key instead ofmessageId
FeedChannel
to haveNotificationMessage
aslastMessage
- Fixed a bug that
markAsRead()
fails withauthenticateFeed()
- Fixed a bug that
onSessionClosed()
is called unintentionally
- Fixed a bug that session refreshes even if the session is revoked or deactivated
- Improvement stability
- Added
isCategoryFilterEnabled
inFeedChannel
. - Added
isTemplateLabelEnabled
inFeedChannel
. - Added
notificationCategories
inFeedChannel
. - Added
tags
inNotificationData
- Added
enableAutoResend
inLocalCacheConfig
to control auto-resending feature when local cache is enabled - Fixed a bug that cache is cleared unintentionally
- Improvement stability
- Added
authenticateFeed()
inSendbirdChat
to log in without connection - Added
refreshNotificationCollections()
inSendbirdChat
to manually catch up the recent updates - Added
notificationData
inBaseMessage
- Fixed a bug that reconnection hangs for deactivated user
- Fixed bug not parsing for string array type thumbnails
- Fixed a bug where message parsing throws the wrong exception
- Added
BaseChannel.copyMessage()
that supports user, file, and multiple files message - Added
BaseChannel.resendMessage()
that supports user, file, and multiple files message
// Copy a succeeded multiple files message.
channelA.copyMessage(channelB, multipleFilesMessageToCopy)
.onPending((message: MultipleFilesMessage) => {
// ...
})
.onFailed((err: SendbirdError, message: MultipleFilesMessage) => {
// ...
})
.onSucceeded((message: MultipleFilesMessage) => {
// ...
});
// Resend a failed or canceled multiple files message.
channel.resendMessage(failedOrCanceledMultipleFilesMessage)
.onPending((message: MultipleFilesMessage) => {
// ...
})
.onFailed((err: SendbirdError, message: MultipleFilesMessage) => {
// ...
})
.onSucceeded((message: MultipleFilesMessage) => {
// ...
})
.onFileUploaded((
requestId: string,
index: number,
uploadableFileInfo: UploadableFileInfo,
err?: Error
) => {
// ...
});
- Deprecated
BaseChannel.copyUserMessage()
- Deprecated
BaseChannel.copyFileMessage()
- Deprecated
BaseChannel.resendUserMessage()
- Deprecated
BaseChannel.resendFileMessage()
- Changed
MessageHandler
,FailedMessageHandler
,MessageRequestHandler
, andMultipleFilesMessageRequestHandler
to have generic message type - Fixed the bug where reply messages were not being automatically resent
- Fixed the bug where initializing the message collection without result handler throws an error
- Fixed the bug where message collection updating the left group channel
- Added
createdAfter
andcreatedBefore
filters inGroupChannelListQuery
- Fixed a bug where
HugeGabCheck
inMessageCollection
has missed some filters
- Added
FeedChannelModule
FeedChannelModule
could be imported from@sendbird/chat/feedChannel
- Added
createMyFeedChannelListQuery()
to createFeedChannelListQuery
- Added
getChannel()
,getMyFeedChannelChangeLogsByTimestamp()
,getMyFeedChannelChangeLogsByToken()
to fetchFeedChannel
data - Added
getGlobalNotificationChannelSetting()
to get notification settings - Added
getNotificationTemplateListByToken()
,getNotificationTemplate()
to fetchNotificationTemplate
- Added
FeedChannelHandler
- Added
FeedChannel
- Added
FEED
channel type - Added
createNotificationCollection()
to createNotificationCollection
- Added
refresh()
to refresh the feed channel - Added
markAsRead()
- Added
- Added
FeedChannelListQuery
- Added
NotificationCollection
NotificationCollection
acts as same asMessageCollection
- Added
isChatNotification
inGroupChannel
- Added
includeChatNotification
inGroupChannelListQuery
,GroupChannelListParams
,GroupChannelChangeLogsParams
- Added
notificationInfo
inAppInfo
- Added
onTotalUnreadMessageCountChanged
inUserEventHandler
- Deprecated
onTotalUnreadMessageCountUpdated
inUserEventHandler
- Deprecated
- Added meta data and meta counter related event to pass to
GroupChannelCollection
- Fixed a bug in parsing parent message info
- Fixed a bug where a deactivated or deleted user hangs on reconnect
- Fixed a bug where the removed metadata would not be updated when receiving the channel's metadata from the server
- Improved stability
- Fixed bug when received
CHANNEL_INVITE
event inviter is null - Updated
MessageCollectionEventHandler
members to be optional
- Added
EVENT_CHANNEL_BANNED
toGroupchannelEventSource
- Changed
err
the argument ofFailedMessageHandler
to not nullable type - Changed return value type of
sb.connect()
to not nullable type - Fixed a bug where don't get channel Info in Cache in
GroupChannelCollection
- Fixed a bug where return empty result in
loadPrevious
inMessageCollection
- Fixed a bug where HugeGap check in
MessageCollection
- Fixed a bug where
Poll.applyPollVoteEvent()
not updatingPoll.voterCount
- Fixed a bug where the group channel changelogs did not update the group channel metadata
- Improved stability
- Fixed a bug where
sb.connect()
fails whenlocalCacheEnabled
set to false in browsers with disabled Cookies - Fixed a bug where
GroupChannelCollection
displays channels in wrong order forGroupChannelListOrder.LATEST_LAST_MESSAGE
- JS Chat SDK version `4.9.1` and `4.9.2` has a CRTICAL BUG where FileMessage is NOT received when sent from an Android device. Please SKIP version `4.9.0` and `4.9.1`, and update to version `4.9.2` or above instead.
- Fixed a bug where FileMessage is sent as a MultipleFilesMessage## v4.9.1 (Jun 05, 2023)
- Fixed a bug where the name, size, and type of FileMessage's PendingMessage were set to default values
You can send a MultipleFilesMessage
that contains multiple files in a single message via GroupChannel.sendMultipleFilesMessage()
- Added
MultipleFilesMessage
- Added
UploadedFileInfo
- Added
MultipleFilesMessageCreateParams
- Added
UploadableFileInfo
- Added
MultipleFilesMessageRequestHandler
- Added
FileUploadHandler
- Added
GroupChannel.sendMultipleFilesMessage()
- Updated return type of
MessageModule.buildMessageFromSerializedData()
- Added
AppInfo.multipleFilesMessageFileCountLimit
const params: MultipleFilesMessageCreateParams = {
fileInfoList: UPLOADABLE_FILE_INFO_LIST,
};
groupChannel.sendMultipleFilesMessage(params)
.onPending((message: MultipleFilesMessage) => {
// ...
})
.onFailed((err: SendbirdError, message: MultipleFilesMessage) => {
// ...
})
.onSucceeded((message: MultipleFilesMessage) => {
// ...
})
.onFileUploaded((
requestId: string,
index: number,
uploadableFileInfo: UploadableFileInfo,
err?: Error
) => {
// ...
});
- Fixed a bug that database is broken in some environment
- Added raw payload for UIKit configuration request
- Fixed a bug in the environment that does not allow local storage access
- Improved stability
- Fixed a bug where channel metadat disappears when receiving channel events
- Added handling of session revocation
- Fixed a bug that session refresh fails when session token is expired
- Improved stability
- Fixed a bug that
PublicGroupChannelListQuery
overwrites the cache with missing properties
- Improved stability
You can now retrieve all pinned messages in a GroupChannel by the PinnedMessageListQuery
.
- Added
PinnedMessage
- Added
PinnedMessageListQuery
,PinnedMessageListQueryParams
- Added
groupChannel.createPinnedMessageListQuery()
const query = groupChannel.createPinnedMessageListQuery(params);
const pinnedMessages = await query.next();
- Improvements stability
- Fixed a bug where
MessageCollection.initialize()
would throw an Error in some cases
- Fixed a bug on
AbortController
import
You can now automatically detect when a muted user is unmuted by leveraging MessageCollections
.
Clients will now receive MessageCollectionHandler.onChannelUpdated()
with GroupChannelContext.GroupChannelEventSource.EVENT_CHANNEL_UNMUTED
when an user is unmuted after their muted duration has expired, on top of explict unmute calls. This now means that you can easily transition user’s experience and allow them to chat even more seamlessly.
Note that this is a MessageCollections
only feature! We recommend all of our clients to give it a try if you haven’t
- Fixed a bug when broken
disconnect()
before cache initialization - Fixed a bug where
LOGI
error command processing - Added
collection.close()
whendisconnect()
is called - Added support for
AbortController
compatibility - Improved stability
- Fixed a bug where
GroupChannelCollection
could not handleEVENT_MESSAGE_SENT
- Added
fetch
polyfill withAbortController
support - Fixed a bug where messages in
MessageCollection
not carryingparentMessage
value when they should - Improved stability
You can now control the size of your local cache. Starting from 64mb, decide how much you want to store (Default: 256mb).
Once the size limit is reached, the SDK will automatically remove messages and channels with pre-specified logic (clearOrder
) so that you don't have to actively manage it.
- Added DB size related properties in
LocalCacheConfig
const localCacheConfig: LocalCacheConfig = new LocalCacheConfig({
maxSize: 256,
clearOrder: CachedDataClearOrder.MESSAGE_COLLECTION_ACCESSED_AT,
});
- Added
SendbirdErrorCode.DATABASE_ERROR
- Added
getCachedDataSize()
in SendBirdChat - Added
OpenChannelCreateParams.isEphemeral
- Fixed a bug where SDK reconnects internally in disconnected state after
disconnectWebsocket()
is called - Fixed a bug to use
MemoryStore
when SDK is running in a browser that does not supportindexedDB
- Improvement stability
Polls is now supported in both Open Channels and Group Channels!
- Added
Poll.serialize()
- Added
PollModule.buildPollFromSerializedData()
- Added
onPollUpdated
,onPollVoted
, andonPollDeleted
inOpenChannelHandlerParams
- Moved following methods from
GroupChannel
toBaseChannel
:updatePoll()
deletePoll()
closePoll()
addPollOption()
updatePollOption()
deletePollOption()
votePoll()
getPollChangeLogsSinceTimestamp()
getPollChangeLogsSinceToken()
createPollListQuery()
createPollVoterListQuery()
- Fixed a bug where
GroupChannelFilter
using nicknames (nicknameContainsFilter
,nicknameExactMatchFilter
, andnicknameExactMatchFilter
) includes current user's nickname when searching from locally cached group channels - Fixed a bug where
BaseMessage.applyThreadInfoUpdateEvent()
always returning false - Fixed a bug where
BaseChannel
’screateMessageMetaArrayKeys
,deleteMessageMetaArrayKeys
,addMessageMetaArrayValues
, andremoveMessageMetaArrayValues
returning unexpected result when file message is given
When you call sb.disconnect
, it disconnects the WebSocket and clears local cache. You can think of it as logging out.
In some cases, you need to only disconnect the WebSocket. You can now do it by calling sb.disconnectWebSocket
.
It only disconnects the WebSocket and preserves the local cache.
sb.disconnectWebSocket();
To connect again after disconnecting with disconnectWebSocket(), use sb.connect().
const user = await sb.connect(userId: userId);
Added SendbirdChatParams.appStateToggleEnabled
which can be used to optionally disable internal control of Websocket connection on document.visibilityState
change
- Fixed a bug where changed
groupChannel.members
was not updated while disconnected
- Fixed a bug where
poll.votedOptionIds
is not updated upon callingpoll.applyPollUpdateEvent(pollUpdateEvent)
- Fixed a bug where auto-resending file message fails occasionally
MessageCollectionEventHandler.onMessagesDeleted
- Added a new parameter
messages: BaseMessage[]
- Deprecated
messageIds: number[]
onMessagesDeleted
callback now returns either unsent or sent messages through a new parametermessages: BaseMessage[]
, which you can use to remove pending messages
- Added a new parameter
- Fixed a bug where
MessageRequestHandler.onPending
is called when pending message is marked for auto-resend - Fixed a bug where
MessageCollection.hasNext
remains true afterMessageCollection.initialize()
is called withstartingPoint
as now - Fixed a bug where SDK calls
MessageCollectionEventHandler
when handler has not been set - Fixed a bug where
MessageCollectionEventHandler.onMessagesUpdated
is called on update ofGroupChannel
sgetUnreadMemberCount
andgetUndeliveredMemberCount
- Deprecated
EVENT_MESSAGE_READ
andEVENT_MESSAGE_DELIVERED
inMessageEventSource
- Exported
BaseMessageCreateParams
andBaseMessageUpdateParams
- Improved stability
Participant is a new interface for User who joined Open Channel. It's optimized for scalability and contains much lighter information about the User than a Member in Group Channel. Now clients can implement Open Channels easier in SDK with more built-in capabilities. You can compare how Member, Participant, and User are different here
Participant
holds essential information about the participant like below. They contain their muted status (is_muted
) on top of basic User information
class Participant extends User {
readonly isMuted: boolean;
}
ParticipantListQuery.next()
now returnsPromise<Participant[]>
- For backward compatibility, the return type remains as
Promise<User[]>
, but the return value can be casted intoPromise<Participant[]>
- Added
SendbirdChatOptions.sessionTokenRefreshTimeout
. You can now set longer timeout value for session token expire. (Default: 60s, Maximum: 1800s). This means that Sendbird SDK will wait longer for your new session token, making it easier for you to reconnect to our service.
- Improved stability
- Fixed a bug where
groupChannelHandler.onChannelChanged()
is not called on pin or unpin message event - Parameter
params
ingetMessageChangeLogsSinceTimestamp()
, andgetMessageChangeLogsSinceToken()
is now made optional
- Fixed a bug where
MessageCollection.hasPrevious
is false when there exists old messages
- Fixed a bug of where
onChannelsAdded
event is not fired upon creating a first channel inGroupChannelCollection
whenlocalCacheEnabled
is set to false. - Improved stability
- Fixed a bug in
MessageCollection
onMessagesUpdated event triggered for old messages - Fixed a bug where calling
connect
while offline did notreconnect
even when the app came online - Improved stability
- Fixed a bug in
MessageCollection
where old messages are being added to the view when app reconnects - Added argument validation in
GroupChannel.pinMessage()
andGroupChannel.unpinMessage()
- Fixed a bug where
GroupChannelHandler.onChannelChanged()
andGroupChannelHandler.onPinnedMessageUpdated()
events are not called whenchannel.lastPinnedMessage
is updated - Improved stability
- Fixed a bug in
GroupChannelCollection.dispose()
not to clear the event handler - Fixed a bug in
MessageCollection.dispose()
not to clear the event handler - Fixed a bug in flooding semaphore keys in localStorage
- Unlimited store size support
- Fixed a bug in
MessageCollection.displose()
not to clear the event handler
- Fixed a bug where calling
sb.connect()
right aftersb.disconnect()
throws an error given the user had entered an open channel - Improved stability on
WebSocket
connection handling
Pinned Message is released. You can now maintain a special set of messages (up to 10 per channel) that you want everyone in the channel to share. It can be anything from announcements, surveys, upcoming events, and any many more. Pin your messages and never miss them! Stay tuned for updates as we are rolling out more exciting features and see below for exact specifications:point_down:
- Pin when sending a message
UserMessageCreateParams.isPinnedMessage: boolean = false
FileMessageCreateParams.isPinnedMessage: boolean = false
- Pin existing message
GroupChannel.pinMessage(messageId: number): Promise<void>
- Unpin a message
GroupChannel.unpinMessage(messageId: number): Promise<void>
- Pinned messages
GroupChannel.lastPinnedMessage: BaseMessage = null
GroupChannel.pinnedMessageIds: number[] = []
We strongly recommend using Collections (Message, Channel) to implement Pinned Messages as it would automatically take care of numerous events out of the box when messages are created, updated, and deleted.
- Improved stability
MessageCollection
now loads unsent messages from cache beforeonCacheResult()
is called
- Replaced
SendableMessage
toBaseMessage
in some message updating methods inBaseChannel
andGroupChannel
- Fixed a bug where poll changelog is being called when there is no poll message in a group channel
- Fixed a bug where
SessionHandler
triggersonSessionTokenRequired
event even whenauthToken
is still valid
- Improved stability
- Fixed a bug where Poll changelog being called when it's not enabled
- Fixed the wrong
MessageCollection
event being triggered - Removed
isAnonymous
in Poll, PollCreateParams, and PollUpdateParams - Improved
channel.messageOffsetTimestamp
logic - Corrected session related error code
- Improved stability
- Exported existing interfaces including
MessageSearchQueryParams
and others (22 in total)
Polls is released 🎉 Here’s where we think it will be really powerful.
- Collect feedback and customer satisfaction
- Drive engagement by receiving participants in preferences
- Run surveys and quiz shows
- And many more!
Scheduled messages is released 🎊 Here’s where we think it will be really useful.
- Let your users queue their messages for the future
- Set helpful reminders and notifications to nudge certain actions
- And many more!
- Fixed a cross domain issue in
OnlineDetector
- Fixed a bug where
MessageCollectionEventHandler.onMessagesUpdated
is wrongly called for a message already added on connect or reconnect
Please note that both Polls and Scheduled Messages are released as beta features. Thus specific parameters and properties may change to improve client’s overall experience.
Stay tuned for updates as we are rolling out more exciting features and see below for exact specifications 👇
- Create
PollModule.create()
PollCreateParams
UserMessageCreateParams.pollId
- Read
PollModule.get()
PollRetrievalParams
SendbirdChat.createPollListQuery()
PollListQueryParams
GroupChannel.createPollListQuery()
UserMessage.poll
- Update
GroupChannel.updatePoll()
PollUpdateParams
GroupChannel.closePoll()
- Delete
GroupChannel.deletePoll()
- Others:
Poll
GroupChannel.getPollChangeLogsSinceTimestamp()
GroupChannel.getPollChangeLogsSinceToken()
PollData
GroupChannelHandlerParams.onPollUpdated()
GroupChannelHandlerParams.onPollDeleted()
- Create
GroupChannel.addPollOption()
- Read
PollModule.getOption()
PollOptionRetrievalParams
SendbirdChat.createPollVoterListQuery()
PollVoterListQueryParams
GroupChannel.createPollVoterListQuery()
- Update
GroupChannel.updatePollOption()
GroupChannel.votePoll()
- Delete
GroupChannel.deletePollOption()
- Others:
PollOption
GroupChannelHandlerParams.onPollVoted()
PollStatus
PollVoteEvent
PollUpdateEvent
CollectionEventSource.EVENT_POLL_UPDATED
CollectionEventSource.EVENT_POLL_VOTED
CollectionEventSource.SYNC_POLL_CHANGELOGS
- Create
GroupChannel.createScheduledUserMessage()
GroupChannel.createScheduledFileMessage()
- Read
ScheduledMessageListQuery
BaseMessage.getScheduledMessage()
ScheduledMessageRetrievalParams
- Update
GroupChannel.updateScheduledUserMessage()
GroupChannel.updateScheduledFileMessage()
- Delete
GroupChannel.cancelScheduledMessage()
- Others
ScheduledInfo
SendingStatus.SCHEDULED
BaseMessage.scheduledInfo
GroupChannelModule.getTotalScheduledMessageCount()
TotalScheduledMessageCountParams
- Added
nicknameStartsWithFilter
andnicknameExactMatchFilter
inGroupChannelListQueryParams
- Implemented channel membership history where clients can retrieve whether users have joined or left the channel
- Added constructor support for
SessionHandler
,ConnectionHandler
, andUserEventHandler
BaseChannel.resendFileMessge()
now takes FileCompat instead of Blob in order to support React Native- Improved stability
- Fixed a bug in
GroupChannel.setMyPushTriggerOption()
to include channel url in request body - Fixed a bug where
resendUserMessage()
andresendFileMessage()
inBaseChannel
not using the givenfailedMessage.reqId
- Added missed export for enums:
ScheduledMessageListOrder
,ScheduledStatus
,UnreadItemKey
, andMutedMemberFilter
- Deprecated
BaseChannel.isPushEnabled
- Added getMessagesByMessageId() to BaseChannel
- Added MessageSearchQuery's totalCount and made it public
- Fixed reportUser() returning 404 Error
- Fixed a bug where after the user updates their profile and sends a message or is mentioned, their profile wasn't being updated in the received message
- Added parameter validation check in sb.connect()
- Improved stability
- Added sb.setOnlineListener() and sb.setOfflineListener() interfaces for non-browser environments
- Updated to stop all running sync jobs when GroupChannelCollection.dispose(), and MessageCollection.dispose() is called
- Added missing exports to sendbird.min.js
- Improved stability
- Fixed a bug where numeric zero values are being removed from request url
- Improved stability
- Fixed a bug where request url is malformed when it includes a stringified array as a parameter value
- Fixed a bug where
groupChannelCollection.onChannelsUpdated()
is not called whengroupChannel.lastMessage
is updated - Fixed a bug where file upload failed messages are not resendable
- Improved stability
- Fixed a bug where
groupChannelCollection.hasNext
is always true. - Fixed a bug where
messageCollection.initialize()
returning the result in reverse order. - Fixed a bug where
channelHandler.onMentionReceived()
returning a channel withmentionedCount
value not updated when expected to be updated. - Params parameter of
getUnreadItemCount()
,getTotalUnreadMessageCount()
,getTotalScheduledMessageCount()
,createDistinctChannelIfNotExist()
inGroupChannelModule
are now made optional. - Deprecated
sessionHandler.onSessionExpired()
. - Improved stability.
- Fixed a bug
messageRequestHandler.onFailed()
to always return a failed message. - Improved stability.
- Fixed a bug on AppStateChangeDetector in ReactNative.
- Changed
GroupChannel.createScheduledUserMessage()
andGroupChannel.createScheduledFileMessage()
to return aMessageRequestHandler
instance. - An optional property
scheduledMessageParams
has been added toScheduledInfo
. - Fixed a bug where
succeededMessage.replyToChannel
is false when a message is sent withmessageParams.isReplyToChannel
set to true. - Improved stability.
- Fixed bug: Crash on using
OpenChannelModule
alone.
- Added missing
GroupChannelListQueryParams
,GroupChannelCollectionParams
, andPublicGroupChannelListQueryParams
inGroupChannelModule
.
- Added
appInfo
getter inSendbirdChat
. - Improved stability.
To see detailed changes for below items, please refer to the migration guide
-
All apis are now made
async
and callbacks are removed -
The way to instantiate
SendBird
instance has changed fromnew SendBird
toSendbirdChat.init()
-
sendUserMessage()
,sendFileMessage()
no longer takes callback as argument but addedonPending()
,onFailed()
,onSucceeded
event handler instead -
All
XxxParams
classes (exceptXxxHandlerParams
classes) are now interfaces// old const params = new XxxParams(); // new const params = { ... };
-
All
XxxListQuery
classes are now immutable.// old const query = sb.GroupChannel.createMyGroupChannelListQuery(); query.customTypesFilter = ['a', 'b'] // new const query = sb.groupChannel.createMyGroupChannelListQuery({ customTypesFilter: [‘a’, ‘b’] });
-
Added
SendbirdChatParams.localCacheEncryption
-
Added
onConnected
, andonDisconnected
toConnectionHandler
-
Added
addOpenChannelHandler
,removeOpenChannelHandler
,removeAllOpenChannelHandlers
inOpenChannelModule
-
Added
addGroupChannelHandler
,removeGroupChannelHandler
,removeAllGroupChannelHandlers
inGroupChannelModule
-
Added
UserUpdateParams
-
Added
UnreadItemCountParams
-
Removed
sb.addChannelHandler()
,sb.removeChannelHandler()
, andsb.removeAllChannelHandlers()
-
Removed builder pattern for
GroupChannelCollection
andMessageCollection
-
Removed
sb.updateCurrentUserInfoWithProfileImage()
. Usesb.updateCurrentUserInfo()
instead -
Removed
MessageCollectionInitPolicy.CACHE_ONLY
-
Replaced
SendBirdParams
withSendbirdChatParams
-
Replaced
sb.GroupChannel
withGroupChannelModule
-
Replaced
sb.OpenChannel
withOpenChannelModule
-
Replaced
sb.BaseMessage
withMessageModule
-
Replaced
SendBird.setLogLevel()
withsb.logLevel
andSendbirdChatParams.logLevel
-
Replaced
sb.useAsyncStorageAsDatabase()
toSendbirdChatParams.useAsyncStorageStore
-
Replaced
channelHandler.onReadReceiptUpdated
togroupChannelHandler.onUnreadMemberStatusUpdated
-
Replaced
channelHandler.onDeliveryReceiptUpdated
togroupChannelHandler.onUndeliveredMemberStatusUpdated
-
Replaced
GroupChannelParams
withGroupChannelCreateParams
andGroupChannelUpdateParams
-
Replaced
OpenChannelParams
withOpenChannelCreateParams
andOpenChannelUpdateParams
-
Replaced
UserMessageParams
withUserMessageCreateParams
andUserMessageUpdateParams
-
Replaced
FileMessageParams
withFileMessageCreateParams
andFileMessageUpdateParams
-
Replaced
SendBird.getInstance()
withSendbirdChat.instance
-
Replaced
sb.getApplicationId()
withsb.appId
-
Replaced
sb.getConnectionState()
withsb.connectionState
-
Replaced
sb.getLastConnectedAt()
withsb.lastConnectedAt
-
Replaced
sb.Options.useMemberAsMessageSender
withsb.options.useMemberInfoInMessage
-
Replaced
channel.getCachedMetaData()
withchannel.cachedMetaData
-
Replaced
message.isResendable()
withmessage.isResendable
-
Replaced
sb.UserMessage.buildFromSerializedData()
,sb.FileMessage.buildFromSerializedData()
, andsb.AdminMessage.buildFromSerializedData()
withsb.message.buildMessageFromSerializedData()
-
Replaced
requestedMentionUserIds
withmentionedUserIds
inBaseMessage
-
Replaced
isUserMessage
,isFileMessage
,isAdminMessage
withisUserMessage()
,isFileMessage()
andisAdminMessage()
inBaseMessage
-
Replaced
isGroupChannel
,isOpenChannel
withisGroupChannel()
andisOpenChannel()
-
Moved
sb.appVersion
toSendbirdChatParams.appVersion
-
Moved
sb.getMyGroupChannelChangeLogsByToken()
tosb.groupChannel.getMyGroupChannelChangeLogsByToken()
-
Moved
sb.getMyGroupChannelChangeLogsByTimestamp()
tosb.groupChannel.getMyGroupChannelChangeLogsByTimestamp()
-
Moved
sb.getUnreadItemCount()
tosb.groupChannel.getUnreadItemCount()
-
Moved
sb.getTotalUnreadChannelCount()
tosb.groupChannel.getTotalUnreadChannelCount()
-
Moved
sb.getTotalUnreadMessageCount()
tosb.groupChannel.getTotalUnreadMessageCount()
-
Moved
sb.getTotalScheduledMessageCount()
tosb.groupChannel.getTotalScheduledMessageCount()
-
Moved
sb.getSubscribedTotalUnreadMessageCount()
tosb.groupChannel.getSubscribedTotalUnreadMessageCount()
-
Moved
sb.getSubscribedCustomTypeTotalUnreadMessageCount()
tosb.groupChannel.getSubscribedCustomTypeTotalUnreadMessageCount()
-
Moved
sb.getSubscribedCustomTypeUnreadMessageCount()
tosb.groupChannel.getSubscribedCustomTypeUnreadMessageCount()
-
Moved
sb.Sender.buildFromSerializedData()
tosb.message.buildSenderFromSerializedData()
-
Moved
sb.GroupChannel.buildFromSerializedData()
tosb.groupChannel.buildGroupChannelFromSerializedData()
-
Moved
sb.GroupChannelListQuery.buildFromSerializedData()
tosb.groupChannel.buildGroupChannelListQueryFromSerializedData()
-
Moved
sb.Member.buildFromSerializedData()
tosb.groupChannel.buildMemberFromSerializedData()
-
Moved
sb.OpenChannel.buildFromSerializedData()
tosb.openChannel.buildOpenChannelFromSerializedData()
-
Moved
sb.User.buildFromSerializedData()
tosb.buildUserFromSerializedData()
-
Divided
ChannelHandler
intoGroupChannelHandler
andOpenChannelHandler
-
Renamed
SendbirdException
toSendbirdError
-
Renamed
sb.initializeDatabase()
tosb.initializeCache()
-
Renamed
sb.clearDatabase()
tosb.clearCachedData()
-
Renamed
Options
toSendbirdChatOptions
-
Renamed
groupChannel.cachedReadReceiptStatus
togroupChannel.cachedUnreadMemberState
-
Renamed
groupChannel.cachedDeliveryReceiptStatus
togroupChannel.cachedUndeliveredMemberState
-
Renamed
GCMPushToken
toFCMPushToken
For the changelog between the beta release, please refer to this page
Please refer to this page