Releases: Salesforce-Async-Messaging/messaging-in-app-android
1.10.2
Patch Release: Messaging for In-App (Android)
This release implements comprehensive accessibility improvements for keyboard navigation across the Android SDK UI components. The changes introduce proper focus traversal handling, accessible focus indicators, and keyboard navigation enhancements for various UI elements including buttons, input fields, search panels, and pre-chat forms.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
API Changes
- Added a new branding token
smi_keyboard_focusfor customizing the focus indicator color for keyboard navigation.
Bug Fixes
- Accessibility - Fixed an accessibility bug where non-interactive elements had a Double Tap to Activate screen reader announcement.
- Accessibility - Improved keyboard focus traversal and navigation in search, conversation options page, and pre-chat forms.
- Accessibility - Focus indicator ripple now appears when using keyboard navigation.
- Accessibility - Fixed focus handling in ActionButton components.
- Accessibility - Added an accessible focus indicator to the search panel.
- Accessibility - Logical grouping for search results.
- Accessibility - Fixed an issue where the End Chat button in the conversation options page was inaccessible through keyboard navigation.
Known Issues
Notes
1.10.1
Patch Release: Messaging for In-App (Android)
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
- Added the ability to send context events to AgentForce Agents.
API Changes
- Added an API to the ConversationClient for sending Context Events to an AgentForce Agent when sending a message. See:
fun setSessionContext(sessionContext: EntryPayload.SessionContextPayload?)
Bug Fixes
Known Issues
Notes
Release 1.10.0 (#48)
Major Release: Messaging for In-App (Android)
This release delivers major updates to attachment tracking, user verification, session management, and interactive conversation features. These changes provide developers with more control, better real-time feedback, and enhanced flexibility for custom experiences.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
-
Added support for attachment upload status updates through MessageUpdated events, allowing real-time tracking of attachment uploads with states: Pending, Completed, and Error.
-
Added detailed error handling for attachment uploads with specific error types: StorageLimitExceeded, AttachmentTooLarge, AttachmentNotFound, AttachmentUploadNotEnabled, AttachmentUploadNotAllowed, and InternalServerError.
-
Added a new User Verification type UserVerificationType.Passthrough, which can be used with Salesforce OAuth authentication to provide a token to the Core SDK.
-
Added support for displaying the end user's queue position.
-
Added support for SessionStatusChanged events to track conversation session states (Active, Ended, Waiting, New, Consent, Inactive, Error, and Paused).
-
Added the ability to close conversations programmatically through the Core SDK.
-
Added ExperimentalConfiguration class to switch capabilities based on feature flags.
API Changes
-
Added EntryPayload.MessageUpdatedPayload to support asynchronous updates to messages, particularly for attachment upload status tracking.
-
Added AttachmentUploadResult sealed interface with three implementations: Completed, Pending, and Error to represent different states of attachment uploads.
-
Added UserVerificationType.Passthrough for providing a passthrough UserVerificationToken.
-
Added coreClient.salesforceAuthenticationRequestPath: String helper for assisting with making the request to core via the Salesforce Mobile SDK.
-
Added EntryPayload.SessionStatusChangedPayload to track session status changes.
-
Added allowedFileTypes property to the AttachmentConfiguration object to allow customizing file attachment handling and errors.
-
Added AllowedFileTypes object for customizing image, video, audio, text, and "other" file attachment types by file extension. (An empty list is considered disabled; customization affects displayed error messages and attachment menu items).
-
Added an API for manually closing the conversation.
suspend fun closeConversation(conversationId: UUID): Result<Unit> -
Added the conversation closed overrideable
ViewComponent, which is displayed when the conversation has ended/closed@Composable fun ConversationClosed(content: @Composable () -> Unit): Unit
Bug Fixes
-
Fixes an issue where the last entry in the chat feed can miss sending a read acknowledgement. Affects the "read" status on the agent's chat feed as well as Conversation.unreadMessageCount.
-
Fixes a case where navigating from the options page to the chat feed could result in a permanent loading state.
-
Fixed a branding token bug by adding proper border styling to end chat confirmation dialog buttons.
-
Fixed the PDF rendering showing a transparent background, which mostly caused issues with some PDFs in dark mode.
-
Fixed a crash when rendering markdown formatted text:
java.lang.IndexOutOfBoundsException: setSpan (x ... y) ends beyond length y
Known Issues
Notes
Dependency Updates:
-
OkHttp to version 5.2.1
-
Android Compose BOM to version 2025.10.00
-
Android Room to version 2.8.2
-
sqlCipher to version 4.11.0
1.9.2
Patch Release: Messaging for In-App (Android)
This release focuses on bug fixes and improving the overall stability of the Messaging for In-App (Android) SDK.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
Bug Fixes
- Fixes an issue where unknown sender role types may not be rendered in the UI.
Known Issues
- When navigating between the conversation options screen then back to the chat feed the loading screen is shown indefinitely when using navigation-compose 2.9.0. The SDK ships with navigation-compose 2.8.9, which does not have this issue. This issue has been resolved in navigation-compose 2.9.1.
Fixed an issue that caused NavEntries that were instantiated using single top to never go beyond CREATED in their Lifecycle.State. (I043ba, b/421095236)
1.9.1
Patch Release: Messaging for In-App (Android)
This release focuses on introducing new ASA features, refining the developer API for enhanced functionality, and improving the overall accessibility and stability of the Messaging for In-App (Android) SDK.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
- Improved the animations when a streaming token invalidation occurs
- Added labels to indicate when a streaming token invalidation occurs and when the resulting message has been "revised"
- Made message bubbles take up the full width of the chat feed to better use the available real estate.
API Changes
- Added the following branding tokens:
smi_message_search_highlight_border_agent- Highlighted border color for agentsmi_message_search_highlight_border_user- Highlighted border color for usersmi_message_search_input_bar- Search input bar colorsmi_message_search_input_background- Search input bar background colorsmi_message_search_input_placeholder- Search input bar placeholder colorsmi_message_search_history_header- Message search history header colorsmi_message_search_history_text- Message search history text colorsmi_message_search_history_dismiss- Message search history dismiss colorsmi_message_search_result_text- Message search result text colorsmi_message_search_result_timestamp- Message search result timestamp colorsmi_message_search_empty_header- Message search header when the empty state is shownsmi_message_search_empty_text- Message search text when the empty state is shownsmi_message_search_empty_icon- Message search icon when the empty state is shownsmi_message_search_avatar_icon_background- Message search avatar icon backgroundsmi_message_search_avatar_icon_foreground- Message search avatar icon foregroundsmi_message_search_url_text- Hyperlink text color in message search screen
Bug Fixes
- Fixed an issue with displaying a SecureForm when an image is set
- Fixed a proguard rule when using a configFile in minified builds
- Fixed a crash that can occur when reconnecting to the SSE stream many times on the same coreClient instance
Known Issues
Notes
1.8.1
Patch Release: Messaging for In-App (Android)
Enhance the Messaging for In-App experience with the new Messaging for In-App features. Improve the user experience by auto-populating the pre-chat form fields, selecting the preferred browser type for opening rich links, and much more.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
API Changes
Bug Fixes
- Fixed a crash that can occur when reconnecting to the SSE stream many times on the same coreClient instance
Known Issues
- URI links are not automatically parsed from a block of plain text. This is a platform difference between iOS and Android. There are two main workarounds for this:
- Use an explicit link message type (richlink or webview messaging component)
- Use the new markdown support to provide the link
[link](mydeeplink://path)
Notes
1.8.0
Major Release: Messaging for In-App (Android)
Enhance the Messaging for In-App experience with the new Messaging for In-App features. Improve the user experience by auto-populating the pre-chat form fields, selecting the preferred browser type for opening rich links, and much more.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
- Added the ability to end the current session on a conversation.
- Added displaying a configured fallback message when entering the conversation.
- Added markdown support to inbound text messages.
- Added a new UI experience for typing indicators.
- Added an optional opt out flag for the agent experience of the new typing indicator UI to distinguish between humans and bots.
- Added support for AgentForce bot progress updates to manage end user's expectation for loading response time.
- Added support for sending and receiving several new file types including CSV, XML, TXT, WORD files and Excel spreadsheets.
- Added support for streaming AgentForce text messages. Allows the end user to receive messages as they are being generated in real-time.
API Changes
- Added
conversationClient.endSession(). This call will end the session on the conversation. - Added the
FallbackMessageconfiguration to the RemoteConfiguration object. - Added the
Participant.roleTypefield of typeParticipantRoleType(Enum) to replace theParticipant.roleString?. Possible enum values are:Agent, Chatbot, EndUser, System, Unknown, Supervisor, Router; - Deprecated
Participant.role. Use theroleTypeEnum instead. - Added a new configuration object
UIConfiguration.agentConfigurationwith an option to opt out of the new progress indicator experience for agents.
Bug Fixes
- Fixed an issue where calling
CoreClient.clearStorage()could lead to unexpected results ifCoreClient.Factory.destroy()was not also called. - Fixed an issue where providing a limit of
0on any conversation/conversation entry list API would return 0 results from the database. Providing a limit of 0 will query the database with a limit of -1 instead. - Fixed a crash when using deep links (custom scheme) in a enhanced link messaging component.
- Fixed an issue where deep links were not rendering for some message types.
- Fixed an issue where PDF pager background in dark mode was making the content hard to read.
- Fixed an issue where re-registering for push notifications would have no affect until the app was restarted.
Known Issues
- URI links are not automatically parsed from a block of plain text. This is a platform difference between iOS and Android. There are two main workarounds for this:
- Use an explicit link message type (richlink or webview messaging component)
- Use the new markdown support to provide the link
[link](mydeeplink://path)
Notes
- Updated Android Compose BOM to 2025.01.01 / 1.7.7 (strictly >= 1.7.0 < 1.8.0)
1.9.0
Major Release: Messaging for In-App (Android)
This release focuses on introducing new ASA features, refining the developer API for enhanced functionality, and improving the overall accessibility and stability of the Messaging for In-App (Android) SDK.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
New Features
- Added edge-to-edge support for Android API 35+.
- Added citation support for AgentForce text messages.
- Added support for multi-agent conferencing.
- Added language support for messaging components.
- Added unread message counter to notification badge UI.
- Added 423 error code handling for JWT renewal during org migration scenario.
API Changes
- Deprecated
conversationClient.sendPdf(pdf: File) - Deprecated
conversationClient.sendImage(pdf: File) - Added
conversationClient.sendFile(file: File, message: String?). This replaces the deprecated APIs and provides the ability to send
a message along with an attachment. - Deprecated
suspend fun CoreClient.delete(context: Context,conversationId: UUID,): Int - Added
suspend fun coreClient.deleteConversation(conversationId: UUID): Intto replace the static method - Added
conversation.unreadMessageCountto expose the number of messages that have not yet been read by the local participant. - Added
CoreClient.createConversation( conversationId: UUID, remoteConfiguration: RemoteConfiguration? = null ): Result<Conversation> - Added
CoreClient.registerDevice(context: Context, deviceToken: String): Result<Unit>
Bug Fixes
- Accessibility - Missing programmatic heading: "Chat" heading text in the "Pre-Chat" screen.
- Accessibility - Improperly announced label: "First Name" required input element in the "Pre-Chat" screen.
- Accessibility - Imprecise error message: "Pre-Chat" screen.
- Accessibility - Keyboard inaccessible: "terms and conditions" link in the "Pre-Chat" screen.
- Accessibility - Error message not announced by AT: "First Name" and "Accept" required form control(s) in the "Pre-Chat" screen.
- Accessibility - Form control not identified as required: label text for the "Accept" required checkbox in the "Pre-Chat" screen.
- Accessibility - Missing label association: "Accept" checkbox in the "Pre-Chat" screen.
- Accessibility - Added accessibility announcement for error on submit in the "Secure Form" screen.
- Accessibility - Added clarification on required section label in the "Secure Form" screen.
- Accessibility - Added clarification on input text label in the "Secure Form" screen.
- Accessibility - Removed content description on submission receipt entry icon to avoid repeating text twice.
- Accessibility - Missing programmatic heading on several screens.
- Accessibility - Terms and conditions checkbox status not read out.
- Accessibility - Carousel dot indicator missing accessibility label.
- Accessibility - Incorrect focus order for secure forms submission.
- Accessibility - Updated outbound message accessibility read out
- Accessibility - Retain accessibility focus when navigating from the chat feed to the conversation options screen.
- Accessibility - Announce search results as you type.
- Accessibility - After selecting a recent search the focus should move to the search input.
- Accessibility - Inaccessible scroll to bottom of chat feed button within the “Chat” screen.
- Accessibility - Fixed an issue where the list picker buttons were focused out of order on the last message.
- Accessibility - Sets the focus to the selected search result when returning to the chat feed.
- Removed space next to input when
UIConfiguration.attachmentConfiguration.endUserToAgentis set tofalse. - Fixed phone numbers and emails not rendering as clickable links in the chat feed.
- Changes to attachment payload to support sending text with the entry.
Known Issues
If configuring the SDK using a configFile.json file, minified builds will throw an exception due to a missing proguard rule. You can add the following to you app's progaurd file to resolve the issue.
-keep class com.salesforce.android.smi.core.CoreConfiguration { *; }
Notes
- Upgraded Kotlin language version to 2.0.21
- Updated Android Compose BOM to 2025.04.01 / 1.8.0 (removed strict compose version requirement)
- Upgraded compileSdk version to API 35 (required by Compose 1.8.0 dependency)
1.7.0
Patch Release: Messaging for In-App (Android)
Enhance the Messaging for In-App experience with the new Messaging for In-App features. Improve the user experience by auto-populating the pre-chat form fields, selecting the preferred browser type for opening rich links, and much more.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
API Changes
-
UIClient.viewComponentsAdded a container for all of the customizable components in the UI. -
ViewComponentsAdded an interface which provides a container for customizable UI components. -
ViewComponents.ChatFeedEntryto allow the developer to define customizable views for each entry
type.fun ChatFeedEntry( entry: ChatFeedEntry, content: @Composable () -> Unit ) { content() } -
CoreClient.realtimeConnectionStateAdded aFlow<ServerSentEvent.Connection>
for monitoring the realtime connection state. -
UIConfiguration.attachmentConfigurationAdded an option to hide the attachment button in the UI. -
UIConfiguration.transcriptConfigurationAdded an option to hide the transcript download button
in the UI. -
CoreClientAdded more options for querying conversations.limit: Int, olderThanConversation: Conversation? = null, conversationId: UUID? = null, forceRefresh: Boolean = false ): Result<List<Conversation>>fun conversationsFlow( limit: Int, olderThanConversation: Conversation? = null, conversationId: UUID? = null, forceRefresh: Boolean = false ): Flow<Result<List<Conversation>>>suspend fun conversations( limit: Int, sortedByActivityDescending: Boolean = true, olderThanConversation: Conversation? = null ): Result<List<Conversation>>fun conversationsFlow( limit: Int, sortedByActivityDescending: Boolean = true, olderThanConversation: Conversation? = null ): Flow<Result<List<Conversation>>> -
Deprecated older APIs with limited query options:
fun conversations(limit: Int): Flow<Result<List<Conversation>>> = conversations(limit, true)
fun conversations(limit: Int, sortedByActivityDescending: Boolean = true): Flow<Result<List<Conversation>>> -
ConversationClientAdded more options for querying conversation entries.suspend fun conversationEntries( limit: Int = 100, timestamp: Long? = null, direction: QueryDirection = QueryDirection.Descending, forceRefresh: Boolean = false ): Result<List<ConversationEntry>>fun conversationEntriesFlow( limit: Int = 100, timestamp: Long? = null, direction: QueryDirection = QueryDirection.Descending, forceRefresh: Boolean = false ): Flow<Result<List<ConversationEntry>>>
Bug Fixes
- Fixed an issue where attempting to send very large attachments could cause a crash if logging
was set toLevel.ALL. - Fixed an issue where estimated wait time was not being displayed on transfers.
- Fixed an issue where chat messages could be missing when returning to the chat feed a long time
after they were sent. - Accessibility - Fixed color contrast failure: "Search text" in the Conversation Options screen.
- Accessibility - Fixed missing programmatic heading: “Chat” heading text in the “Pre-Chat” screen.
- Accessibility - Fixed missing programmatic heading: “Conversation Options” text in the
“Conversation Options” screen. - Accessibility - Fixed incorrectly provided keyboard focus order: Next button within "Secure Forms"
screens. - Accessibility - Fixed newly received messages from the Agent in the "Chat" screen not being
announced. - Accessibility - Fixes an issue where search input field is cut off for larger screen sizes.
- Accessibility - Fixed missing content label description: User and Bot avatar images in the "
Message Search" screen. - Accessibility - Fixed "Agent started typing" indicator message in the "Chat" screen not being
announced. - Accessibility - Fixed incorrectly provided keyboard focus order: Hidden element in the “Chat”
screen screen. - Accessibility - Fixed missing content label description: User and Bot avatar images in the "
Message Search" screen. - Fixed an issue where the
Configuration.remoteLocaleMapkey lookup was case sensitive. - Fixed a crash on API 33 when loading the chat feed due to these google bugs:
- https://issuetracker.google.com/issues/274185314
- https://issuetracker.google.com/issues/242048899
- Fixed an issue where the lastActivity ConversationEntry on the Conversation was not updating with
the "Read" status. - Constrained Android Compose versions to prevent runtime exceptions. Currently requires Android
Compose >= 1.7.0 - Fixed an issue where the CoreClient.Factory was not recognizing configuration changes in minified
builds. - Fixed an issue where the choice selection key was shown in the submission receipt instead of the
selection for a choice list field. - Fixed an issue where failed messages could sometimes be stuck in a "Sending" state after
re-opening the chat feed. - Templated Web URLs were not behaving properly when the templated parameters were passed directly in the URL. All templated parameters in a URL should now be replaced by the templated name rather than by the query param key. Also added the ability to template parts of the host in addition to the path and query params.
Known Issues
- If targeting API 35+ you will need to add the following resource file to your app
underres/values-v35/styles.xml:
<style name="smi_theme" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style
- This code was not included in the SDK because it would force all customers to upgrade to their
targetSDK version to API 35.
Notes
- Updated Android Compose BOM to 2024.09.00 / 1.7.0 (strictly >= 1.7.0 < 1.8.0)
1.6.2
Patch Release: Messaging for In-App (Android)
Enhance the Messaging for In-App experience with the new Messaging for In-App features. Improve the user experience by auto-populating the pre-chat form fields, selecting the preferred browser type for opening rich links, and much more.
To learn more, see the Messaging for In-App Developer Guide.
This page covers the Android release notes. For iOS, see the iOS release notes.
Bug Fixes
API Changes
- Added
Configuration.remoteLocaleMapfor resolving the custom label's language when requesting a
[RemoteConfiguration].
- Used to provide mapping from device locale to a specific language when retrieving localized copy for the current deployment. This
- currently impacts only localized strings as part of the RemoteConfiguration response.
- sample
- If you want to avoid having to define region specific variants of custom labels, you can define a dictionary which maps locales to a language.
- {
- "en-CA": "en",
- "fr-Fr": "fr",
- "fr-CH": "fr",
- "default:" "en"
- }
- The map above will resolve standard English for the Canadian region, and standard French for France and Switzerland.
- Both the keys and values are case insensitive.
- The
defaultkey can be used as a fallback in case any of the mapped languages are not properly resolved in the deployment setup. - see
https://help.salesforce.com/s/articleView?id=sf.faq_getstart_what_languages_does.htm&type=5
See: Supported Salesforce Language Codes
Android Compose Support <= 1.6.x