Added support for per-day weekly DND scheduling. You can now configure different DND time windows for each day of the week, replacing the previous single-time window DND setting.
New methods:
setWeeklyDoNotDisturb(weeklyDndSchedules, timezone?)— Sets a weekly DND schedulegetWeeklyDoNotDisturb()— Gets the current weekly DND scheduleclearWeeklyDoNotDisturb()— Clears the weekly DND schedule
New types:
DndSchedule— Model class for managing per-day DND time windowsDndSchedules—Partial<Record<DayOfWeek, DndTimeWindow[]>>DndTimeWindow—{ startHour, startMin, endHour, endMin }DndSchedulePreference—{ doNotDisturbOn, dndSchedules?, timezone? }DayOfWeek— Enum (sunday|monday| ... |saturday)
setDoNotDisturb()— UsesetWeeklyDoNotDisturb()instead.getDoNotDisturb()— UsegetWeeklyDoNotDisturb()instead.DoNotDisturbPreference— UseDndSchedulePreferenceinstead.
Set a weekly DND schedule
import { DndSchedule, DayOfWeek } from '@sendbird/chat';
const dndSchedule = new DndSchedule();
// Set weekdays to 22:00 ~ 23:59
dndSchedule.setWeekdays([
{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 },
]);
// Set weekends to full-day DND
dndSchedule.setFullDay([DayOfWeek.SATURDAY, DayOfWeek.SUNDAY]);
const preference = await sb.setWeeklyDoNotDisturb(dndSchedule, 'Asia/Seoul');Get current weekly DND schedule
const preference = await sb.getWeeklyDoNotDisturb();
console.log(preference.doNotDisturbOn); // true
console.log(preference.timezone); // 'Asia/Seoul'
console.log(preference.dndSchedules);
// DndSchedule {
// monday: [{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 }],
// tuesday: [{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 }],
// wednesday: [{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 }],
// thursday: [{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 }],
// friday: [{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 }],
// saturday: [{ startHour: 0, startMin: 0, endHour: 23, endMin: 59 }],
// sunday: [{ startHour: 0, startMin: 0, endHour: 23, endMin: 59 }],
// }Clear weekly DND schedule
await sb.clearWeeklyDoNotDisturb();Migration from deprecated DND
// Before (deprecated)
await sb.setDoNotDisturb(true, 22, 0, 8, 0, 'Asia/Seoul');
// After
const dndSchedule = new DndSchedule();
dndSchedule.setWeekdays([
{ starHour: 0, startMin: 0, endHour: 8, endMin: 0 },
{ startHour: 22, startMin: 0, endHour: 23, endMin: 59 },
]);
await sb.setWeeklyDoNotDisturb(dndSchedule, 'Asia/Seoul');Important: When you call
setWeeklyDoNotDisturb, any existing DND schedule configured via the deprecatedsetDoNotDisturbwill be reset and replaced by the new weekly schedule. The two settings are mutually exclusive — once the weekly DND schedule is set, the previous DND configuration will no longer be in effect.
- Added
joinedAttoMember - Fixed a bug where
MMKVdata was not trimmed after deletion - Fixed a bug where
loadMore()pagination missed channels when an empty channel exists in the channel list## v4.21.4 (Mar 12, 2026)
- Fixed a bug Where messages received during
MessageCollection.initialize()could be lost - Add
cancelStewardTaskAPI toAIAgentModulefor canceling steward tasks by message ID
CHANNEL_IS_FROZEN(900050)errors are no longer included in the AutoResend retry logic
- Fixed a bug where not all channels were fetched when GroupChannel ChangeLogSync failed
- Fixed an issue where event callbacks were not triggered correctly in certain environments
- Deprecated
BaseMessage.submitFeedback(),updateFeedback(), anddeleteFeedback()methods- These methods are no longer supported and will return a
SendbirdError(code: 800111)when called
- These methods are no longer supported and will return a
- Deprecated
BaseMessage.submitMessageForm()method- This method is no longer supported and will return a
SendbirdError(code: 800111)when called
- This method is no longer supported and will return a
- Fixed a bug where duplicate reconnect attempts could occur when the WebSocket closed during the
RECONNECTINGstate - Made
csatparameter optional insubmitCSATmethod - Added the
supportMultipleTabsoption toSendbirdChatParams- This helps ensure stable behavior in
multi-tabandmulti-windowenvironments.
This option defaults tofalseand is applied only whenLocalCacheEnabled is set to true.
const sb = SendbirdChat.init({ appId: APP_ID, localCacheEnabled: true, supportMultipleTabs: true, ... });
- This helps ensure stable behavior in
- Fixed a
payloadify error (hasBot of undefined)that occurred when loading locally cached channels.
- Added
onConnectionLostinConnectionHandler- The handler is called when the WebSocket connection is closed but the session persists.
- Fixed a bug where Reconnect after session refresh even it's in connecting state
- Fixed a bug where some messages were missing due to a DB integrity issue
- Added support for
MMKV v4in React Native
- LocalCache Improvement
- Added
onConnectionDelayedcallback toConnectionHandlerA new callback method that is invoked when the server is overloaded. This callback provides information about the delay time before automatic reconnection. After the delayed time period, the SDK automatically initiates reconnection and triggers the callback sequence:onReconnectStarted→onReconnectSucceeded
sb.addConnectionHandler('connection-handler-key', new ConnectionHandler({
onConnected: (userId: string) => {
/** A callback for when SendbirdChat is connected. */
},
onReconnectStarted: () => {
/** A callback for when SendbirdChat tries to reconnect. */
},
onReconnectSucceeded: () => {
/** A callback for when connection is reestablished. */
},
onReconnectFailed: () => {
/** A callback for when reconnection is failed. */
},
onDisconnected: () => {
/** A callback for when SendbirdChat is disconnected. */
},
onConnectionDelayed: (retryAfterTime: number /* second */) => {
/** A callback for when connection is delayed. */
// Example: Show user-friendly message
// showNotification(`Server is busy. Reconnecting in ${retryAfterTime} seconds...`);
}
}));- Added
SendbirdErrorCode.DELAYED_CONNECTINGerror code A new error code that is thrown when the server is overloaded and connection is delayed. Provides detailed information about the delay through theerror.detailproperty.
try {
await sb.connect(USER_ID, AUTH_TOKEN);
} catch(error) {
if (error.code === SendbirdErrorCode.DELAYED_CONNECTING) {
console.log('error message', error.message);
// detail info
const detailInfo = JSON.parse(error.detail);
console.log('retryAfterTime', detailInfo.retry_after); // Delay time in seconds
console.log('reasonCode', detailInfo.reason_code); // Server reason code
console.log('message', detailInfo.message); // Detailed error message
// Handle delayed connection appropriately
// The SDK will automatically retry after the specified delay time
}
}Error Detail Properties:
-
retry_after: The delay time in seconds before automatic reconnection -
reason_code: Server-provided reason code for the delay -
message: Detailed error message explaining the delay -
Fixed typing indicator persistence bug after
channel.refresh() -
Fixed a bug where messages below the channel's
messageOffsetTimestampwere not properly filtered
- Add
copilot_conversation_onlyboolean parameter to filter copilot conversation channels - Add
copilot_support_channel_urlstring parameter for copilot support channel identification - Update
AIAgentGroupChannelListParamsinterface and default values - Update
LoadAIAgentMyGroupChannelListRequestCommandto handle new parameters
- Fixed ping interval being incorrectly converted during session refresh, causing ping frequency to change from 15 seconds to ~4 hours
- Improved stability
- Fixed a bug in parsing
dataandcustomTypeproperties inFileMessage
- Fixed a bug that prevented fetching all information stored in the memory cache for
parent messages
- Fixed a bug that
loadMore()may have unfiltered channels
- Added
createMyGroupChannelListQuery,getMyGroupChannelChangeLogsByToken,getMyGroupChannelChangeLogsByTimestampandgetUnreadMessageCountmethods to AI Agent module - Added
getContextObject,updateContextandpatchContextmethods toGroupChannel
- Added summary field to Conversation class
- Fixed a bug where
sb.connect()would not correctly throw the error received from the server
- Added
knownActiveChannelUrltoMessengerSettingsParamsto support N-active conversations - Added
onUserMarkedReadandonUserMarkedUnreadtoGroupChannelHandler - Added
EVENT_CHANNEL_UNREADtoCollectionEventSource - Deprecated
onUnreadMemberStatusUpdatedinGroupChannelHandler
- Added
userIdsFilterandsearchFilterinGroupChannelFilterParams
You can now enhance your chat with smart AI-driven interactions without separate integration. Includes conversation list, message templates, CSAT, agent handoff, and more — fully embedded in the SDK.
-
AIAgentModule
- Added
requestMessengerSettings(params: MessengerSettingsParams): Fetch settings such as startup options and UI preferences for the AI agent. - Added
createConversationListQuery(params: ConversationListQueryParams): Create a query to retrieve the user's AI agent conversation list. - Added
getMessageTemplates(params: AIAgentMessageTemplateListParams): Fetch a list of available AI message templates for UI rendering.
- Added
-
GroupChannel
- Added
submitCSAT(params: CSATSubmitParams): Submit a CSAT (Customer Satisfaction) rating for a conversation. - Added
markConversationAsHandoff(): Mark a conversation as handed off to a human agent.
- Added
-
Etc
- Added
AI_AGENTenum value inSendbirdProductfor analytics.
- Added
- Added
metadataKey,metadataValues,metadataValueStartsWithinGroupChannelFilter- Metadata-related filters work with
includeMetaDatato be set totrue
- Metadata-related filters work with
A new feature has been added that allows you to mark messages in the channel as unread from a specific message.
- Added
markAsUnread()toGroupChannel
await groupChannel.markAsUnread(message);
sb.groupChannel.addGroupChannelHandler('EVENT_HANDLER_UNIQUE_KEY', {
onChannelChanged: (channel: GroupChannel) => {
// broadcast when the channel's read status and unread message count changes
},
...
});
sb.addUserEventHandler('EVENT_HANDLER_UNIQUE_KEY', {
onTotalUnreadMessageCountChanged: (unreadMessageCount) => {
// broadcast when the channel's total unread message count changes
},
...
);- Fixed MMKV dependency conflict in React Native
- Fixed a bug that caused a stack overflow error when receiving large compressed data over websocket
- Fixed a bug that caused an
Command received no ack.error whenmarkAsReadwas called multiple times - Fixed a bug where the
API pathfor thenotification statLogwas incorrect
- Fixed a bug that can't resend a failed
MultipleFilesMessage
- Fixed a bug where closed WebSockets were not cleaned up when reconnecting
- Fixed a bug that the default value of
channelCustomTypeworks unexpectedly withMessageSearchQuery - Improved sender profile update in super group channel
- Added new read-only property
messageDeletionTimestampon theGroupChannel
export default class GroupChannel extend BaseChannel {
...
// messageDeletionTimestamp is the message deletion timestamp from the message archive.
// At this point, groupChannel.messageDeletionTimestamp also has the updated value.
messageDeletionTimestamp: number = 0;
...
};- Fixed a bug Where don't get hidden channels in
BackgroundSync
- Fixed a bug where the last message in the channel would not be updated
- Fixed a bug that cached channel remains after channel deletion
- Added
AuthTokenTypeto Enum Type
export enum AuthTokenType {
SESSION_TOKEN = 'session_token',
ACCESS_TOKEN = 'access_token',
}- Added
authTokenTypeparameter toauthenticate()(Default Value: AuthTokenType.SESSION_TOKEN)
// using AccessToken
sb.authenticate('userId', 'access token', AuthTokenType.ACCESS_TOKEN);
// using SessionToken
sb.authenticate('userId', 'session token');
or
sb.authenticate('userId', 'session token', AuthTokenType.SESSION_TOKEN);- Supports for
Pollfeature is added for all message types.- Added
pollandapplyPoll(poll: Poll)method inBaseMessage. - Added
pollIdinFileMessageCreateParamsandMultipleFilesMessageCreateParams.
- Added
- Fixed a bug that the API fails while refreshing session
- Fixed a bug where excessive API calls in
MessageCollection
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
sampledUserInfoListinReaction - 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
userIdsinReaction
- 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=trueregardless of whetherSessionHandleris registered whenauthTokenexists - Fixed typo in
markPushNotificationAsClickedlogs
- Added
messageproperty inFileMessageCreateParams - Added
messageproperty 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
customTypeFiltersinUnreadItemCountParams - Added
customTypesFilterinUnreadItemCountParams
Support pinned message in OpenChannel
- Added
pinnedMessageIdsproperty inBaseChannel - Added
createPinnedMessageListQuerymethod inBaseChannel - Added
pinMessagemethod inBaseChannel - Added
unpinMessagemethod inBaseChannel - Added
lastPinnedMessageproperty inOpenChannel - Added
onPinnedMessageUpdatedinOpenChannelHandler
- Added
customTypeFiltersinUnreadItemCountParams
- Fixed a build error related to Node.js package inclusion
- Added
hasBotandhasAiBotinGroupChannel - Added
versiontoMessageForm - Fixed a bug where
MessageForm.isSubmittedis evaluated as true for aMessageFormof which everyMessageFormItem.requiredis 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
MessageFormto 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
BackGroundSynccompletion confirmation - Fixed a bug that
userIdsFilterandsearchFilterdon't work in MessageCollection - (internal) Added
ThrottleControllerinMessageCollection
- Fixed a bug that
connect()fails if a session key is expired
- Added
submitMessageForm()toBaseMessage
- Lower the version of
react-native-mmkvinpeerDependenciesfrom^2.12.2to^2.0.0.
- Added
includeMetaDatatoGroupChannelFilter
- Fixed the Feedback feature to function correctly
- Fixed a bug where
groupChannel.cachedMetadatawas returned asundefinedin the result value ofChangeLogs
- Fixed a bug that always throws a
Connection is cancelederror 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
MultipleFilesMessagehas emptydata - Fixed a bug that
loadMore()inGroupChannelCollectiongives less channels in a certain condition - Improved stability
- Added
useMMKVStorageStoretoSendbirdChatParams - Deprecated
useAsyncStorageStoreinSendbirdChatParams - Fixed a bug that
connect()call may crash in a certain condition - Fixed a bug that
MultipleFilesMessagehas wrongdatavalue - 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
lastMessagenot 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/logClickedin FeedChannel - Deprecated
markAsClicked/logImpressionin FeedChannel - (internal)Refactoring statCollector
- Fixed a bug that
onMessagesUpdatedevent not firing on ThreadInfo updated event - Exported
SendbirdErrorCode - Improvement stability
- Added
keysproperty 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
messageTemplateInfoinAppInfo - Added
getMessageTemplatesByToken(), andgetMessageTemplate()inMessageModule
- Fixed a bug where channel list of
GroupChannelCollectionwas not removed when leaving a public group - Added get message template feature
- Fixed a bug where
thumbnailsare not being set properly - Improvement stability
- Added
priorityinNotificationMessage
- Added
ThreadedParentMessageListQuery - Added
createThreadedParentMessageListQuery()inGroupChannel - Added
markThreadAsRead()inBaseMessage - Added
setPushNotificationEnabled()inBaseMessage - Added
totalUnreadReplyCountinBaseChannel - Added
unreadReplyCount,memberCount,isPushNotificationEnabledinThreadInfo
- Fixed a bug that
unreadMessageCountdoes not match in a certain condition - Fixed a bug with markAsRead() error in a certain condition
- Improvement stability
- Fixed a bug where
onMentionReceivedevent is called when a mention is deleted - Fixed a bug:
sendbird.min.jsdoes 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
extendedMessagePayloadtoUserMessageCreateParams - 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/nextResultLimitinBaseMessageCollectionParams
/**
* @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_channelparsing error inBaseMessage - Fixed bug where
onMessagesUpdated()event do not called iflocalCacheEnableisfalse - Improvement stability
- Fixed a bug of flooded cache in React Native
- Added
logCustom()inFeedChannelto 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()inFeedChannelto takemessagesas a parameter - Updated interface of
logImpression()inFeedChannelto takemessagesas a parameter - Fixed a bug where
groupChannel.upsert - Fixed a bug where
getMessageCommandparsing error - Fixed a bug where an
unhandled exception - (internal) Fixed a bug where
SessionRefreshAPIResponseCommandparsing
- Added new read-only attribute
messageReviewInfoon 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.fileUrldoes not include auth value when auth is required internally - (internal) Fixed a bug that channel refresh not triggering
onChannelUpdatedevent- Please use changelog instead for improved stability
- Fixed a bug that
connect()timed out in a certain case
- Added
messageStatusinNotificationMessage - Added
markAsReadBy(notificationIds)inFeedChannel - Added
logImpression(notificationIds)inFeedChannel
- Fixed a bug that
MessageCollectionhas wronghasPreviousandhasNextin a certain condition - Fixed a bug that
groupChannel.refresh()does not triggeronChannelUpdatedinMessageCollection - Fixed a bug that
metaArraysparameter does not work inupdateUserMessage()andupdateFileMessage()
- Improved stability
- Added
NotificationMessageNotificationMessageusesnotificationIdas key instead ofmessageIdFeedChannelto haveNotificationMessageaslastMessage
- 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
isCategoryFilterEnabledinFeedChannel. - Added
isTemplateLabelEnabledinFeedChannel. - Added
notificationCategoriesinFeedChannel. - Added
tagsinNotificationData
- Added
enableAutoResendinLocalCacheConfigto control auto-resending feature when local cache is enabled - Fixed a bug that cache is cleared unintentionally
- Improvement stability
- Added
authenticateFeed()inSendbirdChatto log in without connection - Added
refreshNotificationCollections()inSendbirdChatto manually catch up the recent updates - Added
notificationDatainBaseMessage
- 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, andMultipleFilesMessageRequestHandlerto 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
createdAfterandcreatedBeforefilters inGroupChannelListQuery
- Fixed a bug where
HugeGabCheckinMessageCollectionhas missed some filters
- Added
FeedChannelModuleFeedChannelModulecould be imported from@sendbird/chat/feedChannel- Added
createMyFeedChannelListQuery()to createFeedChannelListQuery - Added
getChannel(),getMyFeedChannelChangeLogsByTimestamp(),getMyFeedChannelChangeLogsByToken()to fetchFeedChanneldata - Added
getGlobalNotificationChannelSetting()to get notification settings - Added
getNotificationTemplateListByToken(),getNotificationTemplate()to fetchNotificationTemplate
- Added
FeedChannelHandler - Added
FeedChannel- Added
FEEDchannel type - Added
createNotificationCollection()to createNotificationCollection - Added
refresh()to refresh the feed channel - Added
markAsRead()
- Added
- Added
FeedChannelListQuery - Added
NotificationCollectionNotificationCollectionacts as same asMessageCollection
- Added
isChatNotificationinGroupChannel - Added
includeChatNotificationinGroupChannelListQuery,GroupChannelListParams,GroupChannelChangeLogsParams - Added
notificationInfoinAppInfo - Added
onTotalUnreadMessageCountChangedinUserEventHandler- Deprecated
onTotalUnreadMessageCountUpdatedinUserEventHandler
- 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_INVITEevent inviter is null - Updated
MessageCollectionEventHandlermembers to be optional
- Added
EVENT_CHANNEL_BANNEDtoGroupchannelEventSource - Changed
errthe argument ofFailedMessageHandlerto 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
loadPreviousinMessageCollection - 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 whenlocalCacheEnabledset to false in browsers with disabled Cookies - Fixed a bug where
GroupChannelCollectiondisplays 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
PublicGroupChannelListQueryoverwrites 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
AbortControllerimport
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
LOGIerror command processing - Added
collection.close()whendisconnect()is called - Added support for
AbortControllercompatibility - Improved stability
- Fixed a bug where
GroupChannelCollectioncould not handleEVENT_MESSAGE_SENT
- Added
fetchpolyfill withAbortControllersupport - Fixed a bug where messages in
MessageCollectionnot carryingparentMessagevalue 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
MemoryStorewhen 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, andonPollDeletedinOpenChannelHandlerParams - Moved following methods from
GroupChanneltoBaseChannel:updatePoll()deletePoll()closePoll()addPollOption()updatePollOption()deletePollOption()votePoll()getPollChangeLogsSinceTimestamp()getPollChangeLogsSinceToken()createPollListQuery()createPollVoterListQuery()
- Fixed a bug where
GroupChannelFilterusing 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, andremoveMessageMetaArrayValuesreturning 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.memberswas not updated while disconnected
- Fixed a bug where
poll.votedOptionIdsis 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[] onMessagesDeletedcallback 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.onPendingis called when pending message is marked for auto-resend - Fixed a bug where
MessageCollection.hasNextremains true afterMessageCollection.initialize()is called withstartingPointas now - Fixed a bug where SDK calls
MessageCollectionEventHandlerwhen handler has not been set - Fixed a bug where
MessageCollectionEventHandler.onMessagesUpdatedis called on update ofGroupChannelsgetUnreadMemberCountandgetUndeliveredMemberCount - Deprecated
EVENT_MESSAGE_READandEVENT_MESSAGE_DELIVEREDinMessageEventSource - Exported
BaseMessageCreateParamsandBaseMessageUpdateParams - 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
Participantholds 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
paramsingetMessageChangeLogsSinceTimestamp(), andgetMessageChangeLogsSinceToken()is now made optional
- Fixed a bug where
MessageCollection.hasPreviousis false when there exists old messages
- Fixed a bug of where
onChannelsAddedevent is not fired upon creating a first channel inGroupChannelCollectionwhenlocalCacheEnabledis set to false. - Improved stability
- Fixed a bug in
MessageCollectiononMessagesUpdated event triggered for old messages - Fixed a bug where calling
connectwhile offline did notreconnecteven when the app came online - Improved stability
- Fixed a bug in
MessageCollectionwhere 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.lastPinnedMessageis 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
WebSocketconnection 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 = falseFileMessageCreateParams.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 = nullGroupChannel.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
MessageCollectionnow loads unsent messages from cache beforeonCacheResult()is called
- Replaced
SendableMessagetoBaseMessagein some message updating methods inBaseChannelandGroupChannel - Fixed a bug where poll changelog is being called when there is no poll message in a group channel
- Fixed a bug where
SessionHandlertriggersonSessionTokenRequiredevent even whenauthTokenis still valid
- Improved stability
- Fixed a bug where Poll changelog being called when it's not enabled
- Fixed the wrong
MessageCollectionevent being triggered - Removed
isAnonymousin Poll, PollCreateParams, and PollUpdateParams - Improved
channel.messageOffsetTimestamplogic - Corrected session related error code
- Improved stability
- Exported existing interfaces including
MessageSearchQueryParamsand 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.onMessagesUpdatedis 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()PollCreateParamsUserMessageCreateParams.pollId
- Read
PollModule.get()PollRetrievalParams
SendbirdChat.createPollListQuery()PollListQueryParams
GroupChannel.createPollListQuery()UserMessage.poll
- Update
GroupChannel.updatePoll()PollUpdateParams
GroupChannel.closePoll()
- Delete
GroupChannel.deletePoll()
- Others:
PollGroupChannel.getPollChangeLogsSinceTimestamp()GroupChannel.getPollChangeLogsSinceToken()PollDataGroupChannelHandlerParams.onPollUpdated()GroupChannelHandlerParams.onPollDeleted()
- Create
GroupChannel.addPollOption()
- Read
PollModule.getOption()PollOptionRetrievalParams
SendbirdChat.createPollVoterListQuery()PollVoterListQueryParams
GroupChannel.createPollVoterListQuery()
- Update
GroupChannel.updatePollOption()GroupChannel.votePoll()
- Delete
GroupChannel.deletePollOption()
- Others:
PollOptionGroupChannelHandlerParams.onPollVoted()PollStatusPollVoteEventPollUpdateEventCollectionEventSource.EVENT_POLL_UPDATEDCollectionEventSource.EVENT_POLL_VOTEDCollectionEventSource.SYNC_POLL_CHANGELOGS
- Create
GroupChannel.createScheduledUserMessage()GroupChannel.createScheduledFileMessage()
- Read
ScheduledMessageListQueryBaseMessage.getScheduledMessage()ScheduledMessageRetrievalParams
- Update
GroupChannel.updateScheduledUserMessage()GroupChannel.updateScheduledFileMessage()
- Delete
GroupChannel.cancelScheduledMessage()
- Others
ScheduledInfoSendingStatus.SCHEDULEDBaseMessage.scheduledInfoGroupChannelModule.getTotalScheduledMessageCount()TotalScheduledMessageCountParams
- Added
nicknameStartsWithFilterandnicknameExactMatchFilterinGroupChannelListQueryParams - 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()inBaseChannelnot 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.lastMessageis updated - Fixed a bug where file upload failed messages are not resendable
- Improved stability
- Fixed a bug where
groupChannelCollection.hasNextis always true. - Fixed a bug where
messageCollection.initialize()returning the result in reverse order. - Fixed a bug where
channelHandler.onMentionReceived()returning a channel withmentionedCountvalue not updated when expected to be updated. - Params parameter of
getUnreadItemCount(),getTotalUnreadMessageCount(),getTotalScheduledMessageCount(),createDistinctChannelIfNotExist()inGroupChannelModuleare 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 aMessageRequestHandlerinstance. - An optional property
scheduledMessageParamshas been added toScheduledInfo. - Fixed a bug where
succeededMessage.replyToChannelis false when a message is sent withmessageParams.isReplyToChannelset to true. - Improved stability.
- Fixed bug: Crash on using
OpenChannelModulealone.
- Added missing
GroupChannelListQueryParams,GroupChannelCollectionParams, andPublicGroupChannelListQueryParamsinGroupChannelModule.
- Added
appInfogetter inSendbirdChat. - Improved stability.
To see detailed changes for below items, please refer to the migration guide
-
All apis are now made
asyncand callbacks are removed -
The way to instantiate
SendBirdinstance has changed fromnew SendBirdtoSendbirdChat.init() -
sendUserMessage(),sendFileMessage()no longer takes callback as argument but addedonPending(),onFailed(),onSucceededevent handler instead -
All
XxxParamsclasses (exceptXxxHandlerParamsclasses) are now interfaces// old const params = new XxxParams(); // new const params = { ... };
-
All
XxxListQueryclasses 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, andonDisconnectedtoConnectionHandler -
Added
addOpenChannelHandler,removeOpenChannelHandler,removeAllOpenChannelHandlersinOpenChannelModule -
Added
addGroupChannelHandler,removeGroupChannelHandler,removeAllGroupChannelHandlersinGroupChannelModule -
Added
UserUpdateParams -
Added
UnreadItemCountParams -
Removed
sb.addChannelHandler(),sb.removeChannelHandler(), andsb.removeAllChannelHandlers() -
Removed builder pattern for
GroupChannelCollectionandMessageCollection -
Removed
sb.updateCurrentUserInfoWithProfileImage(). Usesb.updateCurrentUserInfo()instead -
Removed
MessageCollectionInitPolicy.CACHE_ONLY -
Replaced
SendBirdParamswithSendbirdChatParams -
Replaced
sb.GroupChannelwithGroupChannelModule -
Replaced
sb.OpenChannelwithOpenChannelModule -
Replaced
sb.BaseMessagewithMessageModule -
Replaced
SendBird.setLogLevel()withsb.logLevelandSendbirdChatParams.logLevel -
Replaced
sb.useAsyncStorageAsDatabase()toSendbirdChatParams.useAsyncStorageStore -
Replaced
channelHandler.onReadReceiptUpdatedtogroupChannelHandler.onUnreadMemberStatusUpdated -
Replaced
channelHandler.onDeliveryReceiptUpdatedtogroupChannelHandler.onUndeliveredMemberStatusUpdated -
Replaced
GroupChannelParamswithGroupChannelCreateParamsandGroupChannelUpdateParams -
Replaced
OpenChannelParamswithOpenChannelCreateParamsandOpenChannelUpdateParams -
Replaced
UserMessageParamswithUserMessageCreateParamsandUserMessageUpdateParams -
Replaced
FileMessageParamswithFileMessageCreateParamsandFileMessageUpdateParams -
Replaced
SendBird.getInstance()withSendbirdChat.instance -
Replaced
sb.getApplicationId()withsb.appId -
Replaced
sb.getConnectionState()withsb.connectionState -
Replaced
sb.getLastConnectedAt()withsb.lastConnectedAt -
Replaced
sb.Options.useMemberAsMessageSenderwithsb.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
requestedMentionUserIdswithmentionedUserIdsinBaseMessage -
Replaced
isUserMessage,isFileMessage,isAdminMessagewithisUserMessage(),isFileMessage()andisAdminMessage()inBaseMessage -
Replaced
isGroupChannel,isOpenChannelwithisGroupChannel()andisOpenChannel() -
Moved
sb.appVersiontoSendbirdChatParams.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
ChannelHandlerintoGroupChannelHandlerandOpenChannelHandler -
Renamed
SendbirdExceptiontoSendbirdError -
Renamed
sb.initializeDatabase()tosb.initializeCache() -
Renamed
sb.clearDatabase()tosb.clearCachedData() -
Renamed
OptionstoSendbirdChatOptions -
Renamed
groupChannel.cachedReadReceiptStatustogroupChannel.cachedUnreadMemberState -
Renamed
groupChannel.cachedDeliveryReceiptStatustogroupChannel.cachedUndeliveredMemberState -
Renamed
GCMPushTokentoFCMPushToken
For the changelog between the beta release, please refer to this page
Please refer to this page