Release notes
This page provides release notes for Chat SDK for Android.
Client API
v1.3.1
v1.3.1 was released on December 20, 2024.
Improvements
- Added support for pinning messages in one-to-one conversations. Users can call
ChatManager#asyncPinMessage
orChatManager#asyncUnPinMessage
to pin or unpin a one-to-one chat message. - Adapted to the 16 KB page size of Android 15.
Issues fixed
- A crash occurs when
to
is empty during message sending. - An incorrect
nextkey
is returned when pulling roaming messages. - A crash occurs when
CustomMessageBody#setParams
is called repeatedly in multi-thread use-cases. - The number of unread messages is inconsistent among multiple devices in certain use-cases.
- The specified image thumbnail size does not take effect during message sending.
v1.3.0
v1.3.0 was released on December 11, 2024.
New features
- Added the
ChatManager#asyncDeleteAllMsgsAndConversations
method to uni-directionally clear all conversations and messages in them. You can also choose whether to clear the chat history on the server. - Added the function of searching for messages by search scope in
Conversation.ChatMessageSearchScope
during keyword-based search.Conversation.ChatMessageSearchScope
: Includes three message search scopes: the message content, message extension information, and both.ChatManager#searchMsgFromDB(String, long, int, String, Conversation.SearchDirection, Conversation.EMMessageSearchScope)
: Searches for messages in all conversations by search scope.Conversation#searchMsgFromDB(String, long, int, String, Conversation.SearchDirection, Conversation.EMMessageSearchScope)
: Searches for messages in a conversation by search scope.
- Added the function of tagging a conversation:
ChatManager#asyncAddConversationMark
: Tags a conversation.ChatManager#asyncRemoveConversationMark
: Untags a conversation.ChatManager#asyncGetConversationsFromServerWithCursor
: Gets conversations from the server by conversation tag.Conversation#marks
: Gets all tags of a local conversation.MultiDeviceListener#CONVERSATION_MARK_UPDATE
: Conversation tag update event in a multi-device login use-case. If a user adds or removes a conversation tag on one device, this event is received on other devices of the user.
- Added the
ChatMessage#isBroadcast
property to indicate whether the message is a broadcast message sent via a RESTful API to all chat rooms under an app. - Added
ChatMessage#deliverOnlineOnly
andChatMessage#isDeliverOnlineOnly
methods to set whether the message is delivered only when the recipient(s) is/are online. If this field is set totrue
, the message is discarded when the recipient is offline. - Added the
GroupManager#asyncGetJoinedGroupsCountFromServer
method to allow the current user to retrieve the total number of joined groups. - Added the error code 706
CHATROOM_OWNER_NOT_ALLOW_LEAVE
that occurs when chat room owner leaves the chat room. IfChatOptions#allowChatroomOwnerLeave
is set tofalse
during SDK initialization, the chat room owner is not allowed to leave the chat room. In this case, error 706 is reported if the chat room owner calls theleaveChatRoom
method. - Added the support for retrieval of historical messages of chat rooms from the server.
- Added the
ChatOptions#setUseReplacedMessageContents
method to determine whether the server returns the adjusted text message to the sender if the message content is replaced during text moderation. - Added the function of pinning a message:
ChatManager#asyncPinMessage
: Pins a message.ChatManager#asyncUnPinMessage
: Unpins a message.ChatManager#asyncGetPinnedMessagesFromServer
: Gets the list of pinned messages in a conversation from the server.Conversation#pinnedMessages
: Gets the list of pinned messages in a local conversation.MessagePinInfo
: Includes the operator that pins or unpins the message and the operation time.ChatMessage#pinnedInfo
: Includes the message pinning information.MessageListener#onMessagePinChanged
: Occurs when the message pinning status changes. When a message is pinned or unpinned in a group or chat room, all members in the group or chat room receive this event.
- Added the
ChatOptions#setLoadEmptyConversations
method to set whether to include empty conversations in the retrieved list of local conversations. This method is called during SDK initialization. - Added the
applicant
anddecliner
parameters to theGroupChangeListener#onRequestToJoinDeclined
event to respectively indicate the user that applies to join the group and the user that declines the join request. - Added the
ChatOptions#setIncludeSendMessageInMessageListener
method to set whether to return the successfully sent message in theMessageListener#onMessageReceived
event. - Added the support for returning the modified custom message via the
MessageListener#onMessageContentChanged
event if the message is modified via the RESTful API. - Added the support for the dynamic loading of
.so
library files.
Improvements
- Added support for forwarding of single attachment messages by passing in the message body, without re-uploading the attachment.
- Reduced the number of times group specifications are retrieved when a large number of group member events are received during certain use-cases.
- Delivered a more accurate chat room member count by optimizing the way to update the member count when members join or leave the chat room.
- Shortened the time used to call the
ChatManager#markAllConversationsAsRead
method by marking all conversations read more efficiently. - Optimized the way the SDK randomly gets server addresses to increase the success rate of requests.
- Adjusted the timeout period for joining or leaving chat rooms.
- Optimized the way the connection is re-established upon a connection failure in certain use-cases.
- Added support for uploading the attachment in fragments when sending an attachment message.
- Adapted to Android 14 Beta: Adapted to the rule that
RECEIVER_EXPORTED
orRECEIVER_NOT_EXPORTED
must be set totrue
when a broadcast receiver is dynamically registered in an app that targets Android 14. - Marked the
ChatClient#loginWithAgoraToken
method deprecated. Use theChatClient#loginWithToken
method instead. - Fine tuned the error message for token-based login for accuracy.
- Optimized the way messages are resent.
- Removed the internal
NetworkOnMainThreadException
exception catching during a network request. - Optimized the database upgrade logic.
- Removed the FPA function and recompiled the boringssl, cipherdb, and libevent libraries to diminish the size of the SDK.
- Increased the maximum allowed size of a log file from 2 MB to 5 MB.
- Allowed users to get the general mute status of groups (the value of
isAllMemberMuted
) locally upon login by storing the status in the local database.
Issues fixed
- For a modified message, the
from
property is missing from the body of the message pulled from the server by an offline user that gets online. - In special use-cases, chat room events are missing when users exit the SDK before login to it.
- The SDK reconnects to the server twice after the network is back to normal.
- An incorrect error message is returned for a logged-out user that calls the
leaveChatRoom
method. - The members in a group are double counted in certain use-cases.
- The data reporting module crashes occasionally.
- The SDK is instantiated repeatedly when the
ChatClient#init
method is called frequently for SDK initialization in multi-thread use-cases.
v1.2.1
v1.2.1 was released on December 8, 2023.
Improvements
- Added support for dynamic registration broadcasts in Android 14, which requires setting the
RECEIVER_EXPORTED
orRECEIVER_NOT_EXPORTED
flag.
Issues fixed
- Fixed the problem of losing chat room listener in some use-cases after logging out and logging in again.
- Fixed the problem of occasionally failing to save the token when logging in manually.
v1.2.0
v1.2.0 was released on December 6, 2023.
New features
- Added the function of forwarding multiple messages:
ChatMessage#createCombinedSendMessage
: Creates a combined message.ChatManager#downloadAndParseCombineMessage
: Downloads and parses a combined message.
- Added the function of modifying sent messages:
ChatManager#asyncModifyMessage
: Modifies a sent text message.MessageListener#onMessageContentChanged
: Occurs when a sent message is modified. The message recipient receives this callback.
- Added the
ChatRoomManager#leaveChatRoom(String, CallBack)
method to leave a chat room and allow the user to know whether they successfully left the chat room. - Added the function of pinning a conversation:
ChatManager#asyncPinConversation
: Pins a conversation.ChatManager#asyncFetchPinnedConversationsFromServer
: Retrieves the list of pinned conversations from the server with pagination.
- Added the
ChatManager#asyncFetchConversationsFromServer
method to retrieve the conversation list from the server. Marked theChatManager#asyncFetchConversationsFromServer(int, int, EMValueCallBack)
method and theChatManager#asyncFetchConversationsFromServer(EMValueCallBack)
method deprecated. - Added the
ChatManager#getAllConversationsBySort
method to retrieve local conversations in the reverse chronological order of when conversations are active. - Added multi-device operations:
MultiDeviceListener#CONVERSATION_PINNED
: A conversation is pinned on one device. This event is received by other devices.MultiDeviceListener#CONVERSATION_UNPINNED
: A conversation is unpinned on one device. This event is received by other devices.MultiDeviceListener#CONVERSATION_DELETED
: A conversation is deleted from one device. This event is received by other devices.
- Added the
ChatManager#asyncFetchHistoryMessages
method to retrieve historical messages of a conversation from the server according toFetchMessageOption
, the parameter configuration class for retrieving historical messages. - Added
FetchMessageOption
as the parameter configuration class for retrieving historical messages from the server. - Added the
Conversation#removeMessages
method to delete messages sent or received in a certain period from the local database. - Added the
List<MessageReactionOperation>
attribute inMessageReactionChange
:MessageReactionOperation#getUserId
: The user ID of the operator.MessageReactionOperation#getReaction
: The changed Reaction.MessageReactionOperation#getOperation
: The operation.
- Added the function of managing custom attributes of group members:
GroupManager#asyncSetGroupMemberAttributes
: Sets custom attributes of a group member.GroupManager#asyncFetchGroupMemberAllAttributes
: Retrieves all custom attributes of a group member.GroupManager#asyncFetchGroupMembersAttributes
: Retrieves custom attributes of multiple group members by attribute key.GroupChangeListener#onGroupMemberAttributeChanged
: Occurs when a custom attribute is changed for a group member.MultiDeviceListener#GROUP_METADATA_CHANGED
: Custom attributes are set for a group member on one device. This event is received by other devices.
- Added error codes:
Error#APP_ACTIVE_NUMBER_REACH_LIMITATION
: The number of daily active users (DAU) or monthly active users (MAU) for the app has reached the upper limit.Error#MESSAGE_SIZE_LIMIT
: You have exceeded the maximum allowed size of a message body.Error#GROUP_MEMBER_ATTRIBUTES_REACH_LIMIT
: The total length of custom attributes of the group member has exceeded the upper limit (4 KB).Error#GROUP_MEMBER_ATTRIBUTES_UPDATE_FAILED
: Fails to set the custom attribute(s) of the group member.Error#GROUP_MEMBER_ATTRIBUTES_KEY_REACH_LIMIT
: The key of a custom attribute(s) of the group member has exceeded the maximum allowed length of 16 bytes.Error#GROUP_MEMBER_ATTRIBUTES_VALUE_REACH_LIMIT
: The value of a custom attribute(s) of the group member has exceeded the maximum allowed length of 512 bytes.
Improvements
- Optimized the callback logic of
ChatClient#addConnectionListener
. After a connection listener is added,ConnectionListener#onDisconnected
is triggered only after login. - Optimized the
searchMsgFromDB
method to include custom messages in the search scope. - Optimized the logic of binding and unbinding a push token.
Issues fixed
- The message read status is not updated in certain use-cases.
- In some use-cases, when the user calls
ChatManager#downloadAttachment
to download message attachments, the attachments are not downloaded to the private directory. - When
ChatManager#deleteMessagesBeforeTimestamp
is called, messages in the local database are deleted, but those in the cache remain. - The app crashes when you send a video message and set the first frame to be empty.
v1.1.0
v1.1.0 was released on April 28, 2023.
New features
- Adds the function of managing custom chat room attributes to implement functions like seat control and synchronization in voice chat rooms. See Manage chat room attributes.
- Adds the
ChatMessage#setPriority(ChatRoomMessagePriority)
method to implement the chat room message priority function to ensure that high-priority messages are dealt with first. See Set message priority. - Adds the pagination parameters
pageNum
andpageSize
to theChatManager#asyncFetchConversationsFromServer
method to allow users to get the conversation list from the server with pagination. See Retrieve a list of conversations from the server. - Adds the support for push notifications on the server side to allow you to send push notifications to all users, individual users specified by IDs, or groups of users by labels. For how to configure and send push notifications, see Push notification management.
- Adds an additional option to delete messages on the server side. See Delete conversations and historical messages.
Improvements
Improved code security.
v1.0.9
v1.0.9 was released on December 19, 2022.
Issues fixed
- Some alerts on Android 12.
- The inconsistency of messages in the memory and the database due to a call to the
updateMessage
method in rare use-cases. - Crashes in rare use-cases.
v1.0.8
v1.0.8 was released on November 22, 2022.
Issues fixed
- Failures in getting a large number of messages from the server in a few use-cases.
- An issue with incorrect data statistics.
- Crashes caused by log printing in rare use-cases.
v1.0.7
v1.0.7 was released on September 7, 2022.
New features
- Adds the
isDisabled()
attribute toGroup
to indicate whether a group is disabled. This attribute needs to be set by developers at the server side. This attribute is returned when you call thegetGroupFromServer()
method inGroupManager
to get group details. - Adds custom error information to the error information returned to the message sender when the pre-sending callback service declines to send the message.
- Adds the error code 1101 (
PRESENCE_CANNOT_SUBSCRIBE_YOURSELF
) inError
to indicate users cannot subscribe to their own presence. - Adds
ChatLogListener
to implement SDK running log callbacks.
Improvements
- Optimized the login process for quicker login.
- Optimized the access point update policy that is used in the case of a connection failure, in order to improve the availability.
- Upgraded the message encryption algorithm from CBC to GCM.
- Supported TLS 1.3 for SDK-related HTTP requests.
- Upgraded OpenSSL, a dependency of libcipherdb, to 1.1.1q.
- Optimized the display of parameters in the methods in the SDK.
Issues fixed
- Data deduplication was not implemented for the
getAllMessage
method inConversation
. - Occasional crashes during login with user IDs and passwords.
- Once the
fetchHistoryMessages()
method inChatManager
was called, the method was repeatedly called to get messages from the server.
v1.0.6
v1.0.6 was released on Jul 22, 2022.
New features
- Supports marking whether a message is an online message by using the
isOnlineState
member inChatMessage
. - Adds an error code 509
MESSAGE_CURRENT_LIMITING
inError
, which means that the chat group message has exceeded the concurrent limit. - Adds an
onSpecificationChanged
callback inGroupChangeListener
, which occurs when the state specification updates. - Adds a
bindDeviceToken
method inPushManager
, which binds the device token.
Improvements
- Improved thread-related methods and classes. Compared with 1.0.4, this release used
ChatThread
to replaceChatThreadInfo
. - Assigned a value to
groupName
in theonInvitationReceived
callback. - Removed the CBC and EBC encryption algorithm in the Android layer.
- Upgraded the network link library.
- Supported sending messages with a remote address as the attachment.
Issues fixed
- The retrieved reaction object was empty.
- Devices running earlier Android versions failed to load the database.
v1.0.4
v1.0.4 was released on May 17, 2022.
New features
- Supports reaction, which enables users to add reaction emojis to the specified message.
- Supports content moderation with the reportMessage method.
- Supports message push configuration, which enables users to configure various push settings.
Improvements
- Enhanced DNS configuration for retrieving the server access point.
- Improved data reports.
- Changed the file name of libsqlcipher to avoid conflict when using the official AAR.
- Added support for double and float data types for the ext attribute in ChatMessage.
- Changed openssl to boringssl.
- Changed the minimum API level to 21 (Android 5.0).
Issues fixed
- Issues reported when uploading the app to Google Play caused by encryption algorithm.
- The translation API did not take effect.
v1.0.3.1
v1.0.3.1 was released on April 27, 2022. This release fixed the occasional issue of not being to display the retrieved historical messages.
v1.0.3
v1.0.3 was released on April 19, 2022.
New features
Supports the presence feature, which indicates the online status of the user.
Improvements
- Shortened the time out for sending messages.
- Enhanced the request success rate.
- Supported the upgraded OPPO push (from 2.1.0 to 3.0.0) and VIVO push (from 2.3.1 to 3.is 0.0.4_484).
Issues fixed
Fixed PendingIntent, which caused warnings when uploading apps to Google Play.
v1.0.2
v1.0.2 was released on Feb 22, 2022.
New features
- Supports deleting conversations on the server by calling deleteConversationFromServer.
- Supports customizing messages using extension fields, badges, CMD messages for message push.
- Adds an error code 221
USER_NOT_ON_ROSTER
which is reported when the user sends a message to another user that is not a contact. - Supports recalling messages using the RESTful API.
Improvements
Reduced the time for preparing to send messages under poor network conditions.
Issues fixed
- The message re-sending was interrupted by the connection success event.
- Memory leak.
- Crashes caused by incorrect time calculation.
v1.0.1.1
v1.0.1.1 was released on December 30, 2021.
This release fixed an issue where the database failed to load under extreme conditions.
v1.0.1
v1.0.1 was released on December 27, 2021.
New features
v1.0.1 adds the following features:
- Supports setting the building name when creating a location message.
- Supports deleting local messages before a specific time.
- Supports getting the count of messages in one conversation.
Fixed issues
This release fixed the following issues:
- Some crash issues occurred.
- An issue occurred in the database encryption.
API changes
v1.0.1 adds the following APIs:
createLocationSendMessage
[1/2]deleteMessagesBeforeTimestamp
getAllMsgCount
v1.0.0
v1.0.0 was released on December 6, 2021.
New features
This release supports getting the users' login status through the isLoggedIn
and isLoggedInBefore
methods.
Improvements
This release makes the following improvements:
- Optimizes the logic of renewing push tokens, reducing server request times.
- Improves the login speed.
- Uses only HTTPS for REST operations by default.
- Optimizes the logic of token expiration.
Fixed issues
This release fixed the following issues:
- The fetched history messages were incomplete.
- Crashes occurred in certain use-cases.
- An issue occurred in displaying the unread status of messages.
RESTful API
v1.3.0
Added the following RESTful APIs:
- Modifying a text or custom message
- Sending a broadcast message to all chat rooms under an app
- Retrieving the contact list with pagination
- Binding or unbinding push information
- Retrieving the push information bound to devices of a user
- Querying the callback data stored on the Chat server
- Resending the callback data stored on the Chat server
v1.2.0
-
Added new REST APIs for management of custom attributes of group members:
- Setting custom attributes of a group member
- Retrieving all custom attributes of a group member
- Retrieving custom attributes of multiple group members by attribute key
-
Removed the
nickname
parameter from the RESTful APIs for adding one user or multiple users