大约 3 分钟
releasenotes
v1.4.0
v1.4.0 was released on XXXX, 2026.
New Features
- Supported sending and receiving GIF image messages. The GIF image message is a subtype of the image message and will not be compressed.
- Supported setting, updating, and retrieving group avatars.
- Supported custom group avatars during group creation: Added the
createGroupExmethod and deprecated the originalcreateGroupmethod. - Enabled users to receive the following information upon joining a chat room:
- Current chat room member count: Retrieved via the
ChatRoom#getMemberCountmethod. This count updates when users join or leave the chat room. - Chat room-wide mute status: Retrieved via the
ChatRoom#isAllMemberMutedmethod. This status updates upon receiving mute/unmute status change events. - Chat room creation timestamp: Retrieved via the newly added
ChatRoom#getCreateTimestampmethod. - Whether the current user is on the chat room allowlist: Retrieved via the newly added
ChatRoom#isInWhitelistmethod to check if the user is on the chat room allowlist. - Mute expiration timestamp of the current user: Retrieved via the
ChatRoom#getMuteExpireTimestampmethod.
- Current chat room member count: Retrieved via the
- Added the new chat room mute event
ChatRoomEventListener#onMuteListAddedV2to provide muted user IDs and their mute expiration timestamps via themuteInfoparameter, deprecating the old eventChatRoomEventListener#onMuteListAdded. - Supported retrieving roaming messages sent by specific group members.
- Supported retrieving messages sent by specific members within a local group conversation: Added the
sendersparameter to replace the deprecated thesenderparameter ingetConvMsgsWithKeyword. - Supported searching for messages across all local conversations by keyword, returning the list of conversation IDs and their matching message IDs.
- Supported retrieving one or more local messages by message ID.
- Supported batch notifications via group member join/leave events. Previously, the SDK triggered a separate event for each individual member. The new events
ChatGroupEventListener#onMembersJoinedandChatGroupEventListener#onMembersExitedare introduced to replace the deprecatedChatGroupEventListener#onMemberJoinedandChatGroupEventListener#onMemberExitedevents. - Supported monitoring the start and end of offline message synchronization from the server: Added the
onOfflineMessageSyncStartandonOfflineMessageSyncFinishevents to the server connection status listenerlistenerChatConnectEventListener. - Added the
ChatManager#getMessageCountmethod to retrieve the total number of messages in the local database.
Improvements
- Changed the unique app identifier from the app key to app ID.
- Supported modifying various message types by adding
ChatManager#modifyMsgBodyto replace the deprecatedChatManager#modifyMessageBody:- Text and custom messages: Modifying both the message body and extensions (
ext). - File, video, voice, image, location, and combined messages: Modifying extensions (
ext) only. - Command messages: Not supported.
- Text and custom messages: Modifying both the message body and extensions (
- Allowed group owners, chat room owners, and administrators to recall messages sent by other users.
- Enhanced security by adding access checks for message attachments. For example, if you receive an image message in a group and forward it to others outside the group, they cannot download the image.
- Adjusted the trigger threshold for the
ChatConnectEventListener#onTokenWillExpireevent; the notification is now triggered when 80% of the token's validity period has elapsed (previously 50%). - Supported retrieving a group member list that includes each member's role and join time.
- Changed the cursor value in
ChatManager#fetchHistoryMessagesByOptionsfromundefinedto an empty string ("") when the final page of roaming messages is returned. - Removed APIs that were deprecated prior to native SDK version 1.1.0.
- Optimized specific database operations.
- Added exception clearing mechanisms and null pointer protection to the JNI layer on Android.
- Optimized the reconnection logic to automatically switch reconnection addresses by default.
- Improved the
applicationWillEnterForegroundhandling logic by sending a ping message to trigger reconnection on iOS. - Disabled default constructors for message, conversation, and message body objects to prevent null pointer crashes on iOS.
- Added the device timezone offset to log files to facilitate troubleshooting.
- Removed the reflection-based approach for obtaining absolute file paths from
FileProvideron Android. - Upgraded BoringSSL and SQLCipher dependencies to their latest versions to mitigate potential security risks.
- Improved the loading performance of the local conversation list when the latest message is an attachment by eliminating redundant file length checks.
- Added static constructors
ChatOptions#withAppIdandChatOptions#withAppKeyto initialize the SDK with an app ID or app key, replacing the deprecatedChatOptionsconstructor. - Added
ChatGroupManager#fetchGroupInfoWithoutMembersFromServerto retrieve group information without member information, replacing the deprecatedChatGroupManager#fetchGroupInfoFromServer. To retrieve member information, callChatGroupManager#fetchMemberInfoListFromServer. - Removed the deprecated
ChatMessageEventListener#onMessagesRecalledevent. UseChatMessageEventListener#onMessagesRecalledInfoinstead. - Added
modifyMsgBodyto replace the deprecatedmodifyMessageBody. - Updated
getConvMsgsWithKeywordby adding thesendersparameter to replace the deprecated thesenderparameter. - Added 16KB page alignment support for Android 15+ compatibility.
Issues Fixed
- Messages in memory were not deleted when their corresponding local conversation was removed.
- The
TYPEfield was empty in theChatMessageEventListener#onChatMessageThreadUserRemovedevent. - A crash occurred on certain device models when retrieving the start and end times of conversation Do-Not-Disturb (DND) settings.
ChatMessageEventListener#onMessageContentChangedfailed to return modification details when editing messages other than text and custom messages.- Group or chat room members incorrectly requested details from the server after a disbandment event was triggered.
- The database was mistakenly rebuilt upon encountering a
SQLITE_BUSYerror. - The latest message in a conversation retrieved from the server via
ChatManager#fetchConversationsFromServerWithCursordid not contain translations or message Reactions. - An exception during logout caused by nesting SDK API calls within SDK events on Android.
- On iOS, completion callbacks for some APIs were not invoked on the main thread, including APIs in
ChatUserInfoManagerandChatPresenceManager, as well asChatManager#fetchHistoryMessagesByOptions,ChatManager#fetchSupportedLanguages,ChatManager#translateMessage, andChatManager#getMessageCount. - A crash caused by extreme network conditions.
- Applications using React Native 0.77, 0.78, 0.79, or 0.80 failed to compile when integrating the chat SDK.
- Session types were converted incorrectly on iOS.
EMFetchMessageOptionwas converted incorrectly on Android.- No API was available to check whether the current user was in a chat room's mute list.
- Circular dependencies between files.
