Android
4.3.1
Release date: 12-26-2026
Summary
Fixes cases of missed messages after background or network interruptions, and conversation ordering in the Kustomer Chat SDK.
New & Fixed
- Improved Message Reliability
- Fixed an issue where apps could send messages but fail to receive them after being backgrounded or experiencing network interruptions.
- The SDK now automatically detects and restores broken PubNub subscriptions when the app returns to the foreground or network connectivity is restored.
- Added proactive health checks to prevent message delivery issues before they impact users.
- Message Recovery Notifications
- Fixed an issue where messages recovered after reconnection were not triggering listener callbacks.
- All recovered messages now trigger the same onChatMessageReceived callbacks as real-time messages.
- This ensures consistent behavior whether messages arrive live or are recovered after reconnection.
- Conversation Sorting Restored
- Fixed a regression introduced in v4.1.1 where conversations appeared in an incorrect or random order.
- Conversations are now consistently sorted by:
- Unread messages first
- Most recent activity next
- Sorting remains correct during pagination, refreshes, and real-time updates.
Behavioral Improvements
- Messages recovered after reconnection now behave the same as real-time messages and trigger all registered listeners.
- The SDK proactively reconnects before authentication tokens expire to avoid dropped subscriptions.
- Recovered messages may be delivered in short bursts to ensure notifications are not suppressed by the OS.
No breaking API changes were introduced.
Reliability Enhancements
- Automatic reconnection when:
- The app returns to the foreground.
- Network connectivity is restored.
- Authentication tokens are nearing expiration.
- Adaptive retry logic ensures fast recovery from temporary issues while minimizing unnecessary network usage during extended outages.
- Duplicate in-app notifications are prevented when push notifications were already shown.
Benefits for Your App
- Users no longer miss messages after backgrounding or network changes.
- Custom UIs built on the Core SDK receive consistent message callbacks
- Conversations always appear in the correct order.
- Improved stability in real-world network conditions.
Testing & Quality
- Comprehensive new unit and integration tests added.
- Existing test suite fully validated (300+ tests passing).
- Scenarios tested include:
- Network loss and recovery.
- Background → foreground transitions.
- Message recovery and listener notifications.
- Conversation sorting across pagination and real-time updates.
Recommended Action
We recommend upgrading to v4.3.1 if your app:
- Experiences missed messages after backgrounding.
- Uses custom message listeners.
- Relies on conversation ordering.
- Operates in environments with unreliable network connectivity.
Technical Details
PubNub Foreground and Network Reconnection (EUX-921)
Problem Statement:
When a user's app using the KustomerChat Android SDK remained in the background for an extended period, the PubNub connection for subscriptions became broken when the app returned to the foreground. Users could send messages but could not receive them due to inactive subscriptions, creating a poor user experience.
Solution Approach:
Implemented a simplified reconnection strategy that uses a single verifySubscriptionsActive() test (via listChannels API call) that covers all cases:
- Not initialized: Returns failure immediately
- No connection: Fails with network error
- Subscriptions inactive: Returns false
- Healthy: Returns true
This approach provides ~75% reduction in code complexity compared to complex branching logic while maintaining the same functionality.
Before Implementation:
The following diagram illustrates the previous state of PubNub recovery mechanisms:
flowchart TD
Start([SDK Initialized]) --> Triggers{Recovery Triggers}
%% Triggers
Triggers -->|App Foreground<br/>UI SDK Only| T1[Presence Activity<br/>Subscribe if needed]
Triggers -->|App Foreground<br/>Core SDK| T2[No Handler]
Triggers -->|Network Restored| T3[No Handler]
Triggers -->|Customer ID / History| T4[checkOrSubscribe<br/>Checks isInitialised only]
Triggers -->|PubNub Status| T5[Status Listener<br/>Relies on SDK]
Triggers -->|Auth Expires| T6[Re-auth Job<br/>initAndSubscribe]
%% Outcomes
T1 --> Gap1[No Health Check]
T2 --> Gap1
T3 --> Gap1
T4 --> Gap2[No Subscription Verification]
T5 --> Gap2
T6 --> Gap2
Gap1 --> Problem[PubNub May Show Connected<br/>But Subscriptions Broken]
Gap2 --> Problem
%% Styling - Dark mode safe grayscale palette
%% Light backgrounds (#F8F9FA to #CED4DA) use dark text, dark backgrounds (#6C757D to #212529) use light text
classDef trigger fill:#F8F9FA,stroke:#495057,stroke-width:2px,color:#000
classDef gap fill:#CED4DA,stroke:#343A40,stroke-width:2px,color:#000
classDef problem fill:#6C757D,stroke:#212529,stroke-width:3px,color:#fff
class Triggers,T1,T2,T3,T4,T5,T6 trigger
class Gap1,Gap2 gap
class Problem problem
After Implementation:
The following diagram illustrates the improved PubNub recovery mechanisms using the simplified approach:
flowchart TD
Start([SDK Initialized]) --> Triggers{Recovery Triggers}
%% Triggers
Triggers -->|App Foreground| T1[ProcessLifecycleOwner<br/>onStart]
Triggers -->|Network Restored| T2[NetworkCallback<br/>onAvailable]
Triggers -->|Scheduled Check| T3[Periodic Timer<br/>55 min success / 5 min error]
Triggers -->|Auth Token Fetched| T4[Schedule Check<br/>TTL - 5 min]
%% All triggers lead to same check
T1 --> Check[checkAndReconnectIfNeeded]
T2 --> Check
T3 --> Check
T4 --> Check
%% Check flow - Recovery runs FIRST before reconnection
Check --> Recovery[markNewAgentMessagesDelivered<br/>isFromRecovery: true<br/>BEFORE reconnection]
Recovery --> Fetch[Fetch messages from<br/>PubNub history]
Fetch --> MarkDelivered[Mark as delivered<br/>in repository]
MarkDelivered --> Collect[Collect recovered<br/>messages]
%% Notify listeners for recovered messages (happens in provider, before reconnection check)
Collect --> HasMessages{Has recovered<br/>messages?}
HasMessages -->|Yes| Transform[Transform messages]
Transform --> NotifyListeners[Notify ALL listeners<br/>onChatMessageReceived<br/>Set isFromRecovery = true<br/>100ms delay between]
HasMessages -->|No| ReconnectCheck
%% After listener notification, check connection status
NotifyListeners --> ReconnectCheck[checkAndReconnectIfNeeded<br/>Check connection status]
ReconnectCheck --> Serial[Serial Execution<br/>Mutex + Flag]
Serial --> Flag{Already<br/>Checking?}
Flag -->|Yes| Early1[Return Early<br/>Success]
Flag -->|No| CheckFlags{Has disconnect<br/>flags?}
CheckFlags -->|Yes| ForceReconnect[Skip listChannels<br/>Force reconnect]
CheckFlags -->|No| Verify[Verify Subscriptions<br/>verifySubscriptionsActive<br/>Single Test]
%% Simplified verification - single test covers all cases
Verify --> Result{Verification<br/>Result?}
Result -->|Success + True<br/>Subscriptions Active| Success[Return Success]
Result -->|Failure or False<br/>Not Initialized<br/>No Connection<br/>Inactive Subscriptions| Init[initAndSubscribe<br/>Reconnect]
Result -->|Exception<br/>except CancellationException| Init
Result -->|CancellationException| Cancel[Rethrow<br/>Allow Cancellation]
ForceReconnect --> Init
Init --> ReconnectResult{Reconnection<br/>Result?}
ReconnectResult -->|Success| ClearFlags[Clear disconnect flags]
ReconnectResult -->|Failure| UpdateRetry[Update retry delay<br/>Exponential backoff]
ClearFlags --> Schedule1[Schedule Next Check<br/>55 minutes]
UpdateRetry --> Schedule2[Schedule Next Check<br/>Exponential Backoff<br/>1min → 2min → 4min → 5min]
Schedule1 --> Complete1[Complete]
Schedule2 --> Complete2[Complete]
Success --> Schedule1
Early1 --> Complete1
Cancel --> CancelEnd([Coroutine Cancelled])
Complete1 --> End([Subscriptions Active<br/>Messages Recovered<br/>Listeners Notified])
Complete2 --> End
%% Styling - Dark mode safe grayscale palette
%% Light backgrounds (#F8F9FA to #CED4DA) use dark text, dark backgrounds (#6C757D to #212529) use light text
classDef trigger fill:#F8F9FA,stroke:#495057,stroke-width:2px,color:#000
classDef check fill:#E9ECEF,stroke:#6C757D,stroke-width:2px,color:#000
classDef action fill:#DEE2E6,stroke:#495057,stroke-width:2px,color:#000
classDef success fill:#6C757D,stroke:#343A40,stroke-width:3px,color:#fff
classDef cancel fill:#495057,stroke:#212529,stroke-width:2px,color:#fff
class Triggers,T1,T2,T3,T4 trigger
class Check,Recovery,Fetch,MarkDelivered,Collect,HasMessages,Transform,ReconnectCheck,Serial,Flag,CheckFlags,Verify,Result check
class Init,ForceReconnect,ReconnectResult,ClearFlags,NotifyListeners,UpdateRetry action
class Success,Schedule1,Schedule2,Complete1,Complete2,Early1,End success
class Cancel,CancelEnd cancel
Implementation Details:
-
New Utility Function (
PubNubUtilities.kt):- Created
checkAndReconnectIfNeeded()pure utility function that acceptsKusPubnubApiinterface for easy testing - Uses thread-safe serial execution via
Mutexand coroutine scope to prevent overlapping calls - Always calls
verifySubscriptionsActive()first, then reconnects viainitAndSubscribe()if verification fails
- Created
-
Foreground Detection (
KustomerCore.kt):- Added
ProcessLifecycleOwnerobserver to detect when app returns to foreground - Automatically triggers reconnection check when
onStart()is called
- Added
-
Network Connectivity Monitoring (
KustomerCore.kt):- Registered
NetworkCallbackto detect when network connectivity is restored - Handles first network notification: Skips reconnection check if SDK is already running (avoids redundant initialization), but still runs check if SDK is stopped (needed for offline → online scenario)
- Subsequent notifications schedule reconnection check after 5-second delay to avoid rapid network changes
- Registered
-
Scheduled Periodic Checks (
KusPubnubService.kt):- Automatically schedules reconnection checks when auth tokens are fetched (TTL - 5 minutes)
- On success: Schedules next check after 55 minutes (before token expiration at 1 hour)
- On error: Uses exponential backoff retry logic (1min → 2min → 4min → 5min cap) for adaptive retry timing
- Retry delay automatically resets to 1 minute on successful recovery
- Creates continuous cycle of proactive health checks with adaptive retry timing
-
Subscription Verification (
KusPubnubService.kt):- Added
verifySubscriptionsActive()method usinglistChannelsAPI call as lightweight proxy test - Verifies channel group subscriptions (which includes all channels for the customer)
- Single source of truth for all health check cases
- Added
Logging:
- Permanent production logging added throughout with appropriate log levels (debug, error)
- Logs include method entry, state checks, decision logic, completion results, and error details
- Network connectivity changes are logged for troubleshooting
Message Recovery and Listener Notifications (EUX-921)
Problem Statement:
When the app reconnected to PubNub after being disconnected (e.g., app was backgrounded, network issues), the SDK recovered undelivered messages by fetching message history and marking them as delivered. However, no listener events were being executed during this recovery process, leaving Core SDK users unaware that messages had been recovered. Additionally, messages were being marked as delivered by the PubNub listener before recovery could find them, causing recovery to find 0 messages.
Solution Approach:
- Recovery Timing Fix: Run recovery BEFORE reconnection to catch messages before they're marked as delivered by the listener
- Listener Notifications: Notify all registered listeners (Core SDK users and UI SDK components) when messages are recovered
- Disconnect Status Tracking: Use in-memory boolean flags to track disconnect events and force recovery when needed
- Exponential Backoff: Implement adaptive retry logic for recovery failures
Implementation Details:
-
Recovery Timing (
KusChatProviderImpl.kt):- Recovery runs FIRST before reconnection check in
checkPubNubConnectionAndReconnectIfNeeded() - Uses PubNub REST API (
fetchMessagesWithoutDeliveryAction) which works even when subscriptions are inactive - Prevents race condition where listener marks messages as delivered before recovery can find them
- Recovery runs FIRST before reconnection check in
-
Message Recovery (
KusChatMessageRepository.kt):markNewAgentMessagesDelivered()now acceptsisFromRecoveryparameter- When
isFromRecovery: true, collects recovered messages and returns them for listener notification - Messages are marked as delivered in batches of 10 for efficiency
-
Listener Notifications (
KusChatProviderImpl.kt):- All registered listeners receive
onChatMessageReceivedcallbacks for each recovered message - Messages are transformed before notification to ensure all fields are populated
isFromRecoveryfield is set on message object (no breaking changes to listener interface)- 100ms delay between recovery notifications to prevent Android from suppressing heads-up notifications
- All registered listeners receive
-
Disconnect Status Tracking (
PersistedDisconnectStatusManager.kt):- Uses in-memory
AtomicBooleanflags instead of SharedPreferences Sets - Tracks PubNub and network disconnect events separately
- Flags are set to
truewhen disconnect events occur, cleared tofalseafter successful recovery checkAndReconnectIfNeeded()checks flags first - if set, skipslistChannelsverification and forces reconnect immediately
- Uses in-memory
-
Exponential Backoff Retry Logic (
KusPubnubService.kt):- Retry sequence: 1 minute → 2 minutes → 4 minutes → 5 minutes (capped)
- Subsequent failures after reaching 5 minutes continue at 5-minute intervals
- Retry delay resets to 1 minute on successful recovery
- Retry delay resets when PubNub is reset (e.g., during reinitialization)
- Faster recovery for transient issues, reduced resource usage for persistent failures
-
Push Notification Tracking (
KusInAppNotificationManager.kt):- Tracks which messages had push notifications displayed to prevent duplicate in-app notifications
- Uses atomic
checkAndRecordNotification()method to prevent race conditions - Prevents duplicate notifications when recovery and chat history refresh process same message simultaneously
Testing:
- Added comprehensive unit tests for
PersistedDisconnectStatusManager(23 test cases, all passing) - Added comprehensive unit tests for
PubNubStatusUtils(30 test cases, all passing) - Fixed and verified all existing unit tests (300+ tests passing)
- Test coverage includes: flag setting, flag checking, flag clearing, exponential backoff, listener notifications
Conversation Sorting Fix (EUX-961)
Problem Statement:
In SDK v4.1.1, the Conversations screen displayed conversations in a seemingly random order instead of by date. The expected behavior is that conversations are ordered by date (most recent first) with unread messages at the top.
Root Cause:
A regression was introduced in commit 5b394631 (March 22, 2024) that changed conversation merging logic from distinctBy to a Map-based approach. While this fixed duplicate conversation issues, it introduced a new problem: conversationsMap.values.toList() does not preserve any meaningful order, causing conversations to appear in random order.
Additionally, sorting only occurred in the ViewModel when both conversations and settings were available, but updates via addOrReplace() didn't trigger re-sorting, causing the list order to become stale when conversations were updated via PubNub events.
Solution Approach:
Implemented sorting at the repository level to ensure conversations are always sorted correctly, regardless of how they're added or updated.
Implementation Details:
-
New Sorting Utility (
KusConversationSortUtil.kt):- Created centralized sorting function that sorts by:
- Unread message count (descending) - conversations with unread messages appear first
- Last message timestamp (descending) - most recent conversations appear first
- Handles null/zero values by treating them as 0 (oldest)
- Extracted comparator for reusability
- Created centralized sorting function that sorts by:
-
Repository-Level Sorting (
KusUiConversationRepository.kt):- Updated
fetchConversations()to sort conversations after merging via Map - Ensures correct order even when fetching multiple pages during pagination
- Updated
-
Real-time Update Sorting (
KusLiveDataExtensions.kt):- Updated
addOrReplace()to re-sort after adding/replacing conversations - Critical for maintaining order when conversations are updated via PubNub events
- Fixed data loss bug where Error/Loading states would cause silent data loss
- Updated
Testing:
- Added comprehensive unit tests for sorting utility (6/6 tests passing)
- Added integration tests to verify bug detection and fix verification
- Tests verify both merge/pagination bug and real-time update bug scenarios
4.3.0
Release date: 12-05-2025
Added
-
Added
markSessionAsRead(conversationId: String)— marks all existing messages and CSATs in a conversation asreadat the time of invocation.- The call is idempotent and safe to invoke multiple times.
- Future messages are not affected.
- Requires an active chat session and a valid
conversationId.
Best practices:
- Call
markSessionAsReadonce your app has successfully synchronized any locally cached messages, or immediately when the user views the conversation. - After marking read, consider refreshing any UI elements that show unread counts (conversation list badges, notification counts).
Deprecated
- Deprecated
markRead(conversationId, messageIds, satisfactionId)
Migration note:
- Replace calls to
markRead(conversationId, messageIds, satisfactionId)withmarkSessionAsRead(conversationId). - Message and CSAT IDs are no longer required.
This API remains available in this release but will be removed in a future major version.
Deprecated
- Deprecated
markRead(conversationId, messageIds, satisfactionId)- old function for marking messages asread
4.2.2
Release date: 11-24-2025
Fixed
- Long loading after login and fetching all conversations for customers who have a lot of conversations in chat history
v4.2.1
Release date: 10-17-2025
Fixed
- Crash occurred sometimes when navigating to or from a KB article.
v4.2.0
Release date: 10-06-2025
Fixed
- Knowledge base articles are not using the custom domain when set.
Updated
- Updated Android NDK version 27 -> 28.
v4.1.1
Release date: 10-02-2025
Fixed
- Slow loading of the Chat History screen occurs when the user has a large number of conversations.
- Slow loading of the Chat Conversation screen occurs when the conversation contains a large number of messages.
v4.1.0
Release date: 09-25-2025
Added
- Added support for mobile AI Agent team support.
- Added
firstReadsupport toKusChatMessage, which enables unread count to considerfirstReadstatus in calculations.
Fixed
- Updated German translation for “Chat”.
Updated
- Updated Retrofit version to 2.11.0.
- Updated OkHttp version to 4.12.0.
v4.0.0
Release date: 07-11-2025
Added
- Added support for Android SDK 35, including full edge-to-edge content rendering for a more immersive, modern UI experience.
Fixed
- Resolved an issue where the article WebView did not extend fully to the top of the bottom navigation, ensuring proper layout and visual continuity.
Updated
- Min Android SDK: 24 (Nougat)
- Kotlin: 1.9.24
- Min JVM: 17
- kotlin-coroutines: 1.7.3
v3.4.4
Release date: 04-28-2025
Updated
- Removed unnecessary
android.permission.CAMERApermission. The SDK only launches external camera apps usingMediaStore.ACTION_IMAGE_CAPTUREand does not directly access camera APIs.
v3.4.3
Release date: 02-27-2025
Fixed
- Fixed a
ClassCastExceptionthat occurred when applying the dark theme to the article WebView based on device settings. - Fixed an issue where the article WebView failed to apply the dark theme on Android SDK versions 33 and higher.
- Fixed the team name alignment in the chat history screen, ensuring it is centered on all devices.
- Fixed an issue where the hide chat history option in chat settings was not being honored.
v3.4.2
Release date: 01-31-2025
Updated
- The "New Conversation" button is now disabled when there is no internet connection.
- The empty conversation view now properly reflects offline hours based on the business schedule.
Improved
- Conversations in the conversation history are now ordered to always display those with unread messages at the top, making it easier to access recent messages and CSAT surveys.
v3.4.1
Release date: 01-24-2025
Fixed
- Fixed an issue where chat history failed to load when a conversation was opened via a push notification while the app was not running.
Improved
- Enhanced
KustomerCoreinitialization logic to minimize the risk of race conditions and unintended side effects.
v3.4.0
Release date: 01-14-2025
Added
- Updated branding in the SDK to use Kustomer's new colors and logo. A new secondary color attribute has been added to control the appearance of selected bottom navigation elements and other secondary components. More details are available in Customize colors.
- The SDK now includes consumer ProGuard files for release builds, ensuring the required ProGuard rules are automatically applied. This removes the need for adopters to create or maintain these rules in the future manually.
Updated
- Updated ProGuard rules to support R8 full mode, enabled by default in Android Gradle Plugin version 8.0+. Refer to the Requirements page for the latest rules.
v3.3.1
Release date: 11-14-2024
Added
- Added new customer attributes
sharedPhones,sharedEmail, andsharedSocials, deprecating emails, phones, and socials, respectively. This provides clearer visibility on updated customer attributes.
Fixed
- Fixed an issue where the navigation would reset after attachment selection in Android OS 33+ devices.
- Fixed a SecurityException thrown when monitoring network status via system service callback.
- Fixed an IndexOutOfBoundsException occurring when converting chat responses to chat messages for the UI.
v3.3.0
Release date: 11-01-2024
Added
- Added
openChatAssistant()method as a distinct option to initiate a new conversation with a specified assistant ID. UnlikeoverrideAssistant(), this method preserves the current active assistant settings in the SDK, allowing new conversations to default to the SDK's active assistant set. This addition also brings feature parity with the iOS SDK.
Fixed
- Fixed an issue where a customer's initial messages were ignored when starting a new conversation with an assistant. This flow now functions correctly with or without an assistant configured.
v3.2.3
Release date: 10-22-2024
Fixed
- Fixed an issue related to the usage of the OkHttp BOM that caused build failures when using Android Gradle Plugin versions 8.2 or higher.
Updated
- The in-app notification logic has been updated to display notifications while the app is in the foreground across all screens, including Kustomer’s views. In prior versions, notifications were only shown when Kustomer views were visible. This update brings the Android behavior in line with the iOS SDK.
- The SDK initialization logic has been updated to ensure that chat assistant rules are always processed, even if an assistant override is present. This update brings the Android behavior in line with the iOS and chat-web SDKs.
v3.2.2
Release date: 10-18-2024
Fixed
- Fixed an issue where the unread count indicator was not set when a conversation received a satisfaction survey while the app was killed. The unread count is now correctly updated when the chat history is reopened.
- Fixed a NullPointerException in
KusChatFragment.getBindingthat occurred when the pull-to-refresh action was still running while the chat screen was closed.
Updated
- Updated Pubnub version to 9.0.0
- Updated Moshi version to 1.15.0
- Updated OkHttp version to 4.11.0 and added explicit dependency.
v3.2.1
Release date: 09-26-2024
Fixed
- Fixed an issue where the unread count indicator failed to update correctly upon receiving an initial outbound message while the app was terminated.
v3.2.0
Release date: 09-13-2024
Added
- Added
Kustomer.isVisible()to the SDK, matching iOS support.Kustomer.isBackground()has been deprecated. - Introduced
KusLogLevelwith type-safe log levels in the SDK. You can now set log levels usingoptions..setLogLevel(KusLogLevel). The previous method,options.setLogLevel(Int), is now deprecated.
Fixed
- Resolved an IllegalArgumentException on Android OS version 28 and earlier, triggered by overriding the SDK locale with
KustomerOptions.setUserLocale()and setting it to the system default, which caused duplicate entries in LocaleList that were not properly supported on older Android versions - Fixed an issue with log levels where setting the level to "info" only logged info messages, whereas setting it to "error" logged both info and error messages. The hierarchy has been fixed with the introduction of
KusLogLevelwhich enforces proper log level hierarchy.
Improved
- Corrected various lint errors in the UI and core packages for better code quality.
v3.1.3
Release date: 08-20-2024 // Docs (latest)
Added
- Added
Kustomer.close()functionality to the SDK, which closes the single Activity used by Kustomer.
Fixed
- Fixed an issue where chat assistant rules were not evaluated in some instances.
- Fixed a localization issue in which certain locales set via
KustomerOptions.setUserLocale()were not parsed correctly. - Fixed a navigation issue caused by a missing default value.
- Fixed a minor NullPointerException that occurred when parsing the
verifiedAtfield for an identified customer.
v3.1.2
Release date: 08-07-2024
Added
- Added pull-to-refresh functionality for the chat conversation view.
Fixed
- Fixed an issue where the unread message count included messages from different brands.
- Fixed a UI glitch that occurred with blank avatars whenever a conversation was opened.
v3.1.1
Release date: 06-28-2024
Fixed
- Fixed an issue where featured articles failed to load when opened for non-default brands.
- Fixed a minor UI bug in which the "no search results" view text was incorrectly aligned on smaller devices.
Updated
- Upgraded knowledge base APIs to v4, enhancing the reliability of handling article locales and translations.
v3.1.0
Release date: 06-04-2024
Added
- Added support for
per app languagesfor devices with Android 13 and higher. To fully support this feature in the SDK, useKustomerOptions.useAppLocalesduring SDK initialization, which will honor the app language set by the user. For more information, seelocalization in Kustomer Android Chat SDK.
Fixed
- Fixed a minor NPE happening during fragment transitions.
Firebase Cloud Message Server API Keys are being discontinued
To ensure uninterrupted service to Android push notifications, you must upload your new FCM Private Key file to Kustomer by June 20, 2024. Legacy keys will no longer be supported after this date.
Please note that this update does not require an SDK upgrade.
For information on creating your new FCM Private Key file, see Configure push notifications in Kustomer.
v3.0.0
Release date: 04-23-2024
Improved
- Improved the reliability of incoming message delivery when actively viewing a conversation.
v2.13.6
Release date: 04-16-2024
Improved
- Improved and optimized how we fetch messages for a given conversation in our UI.
- Improved the ‘No internet connection’ banner displayed in the chat UI.
v2.13.5
Release date: 04-02-2024
Fixed
- Fixed an intermittent issue where the unread message count didn't properly reset after a user visited a conversation.
v2.13.4
Release date: 03-13-2024
Removed
- Removed UI header for KnowledgeBase category results to mirror other SDKs.
Improved
- Improved the German translations in the knowledge base UI.
v2.13.3
Release date: 02-22-2024
Fixed
- Fixed an issue where the initial agent message disappeared after the user replied to conversations initiated with a default message.
- Fixed an issue where the agent avatar was missing for conversations initiated with a default message.
Updated
- Update Kotlin Coroutines version to 1.6.4.
v2.13.2
Release date: 02-09-2024
Added
- Ignore conversation messages sent from other brands.
Fixed
- Fixed an issue where satisfaction (CSAT) surveys did not appear in a conversation if the customer was still viewing it. Now, once an agent marks the conversation done, the CSAT will be shown to the customer.
Updated
- Update PubNub version to 7.8.0.
- Update Moshi version to 1.14.0.
- Update Kotlin version to 1.8.21.
v2.13.1
Release date: 01-25-2024
Fixed
- Handle multiple concurrency issues in the UI package.
- Fixed an issue that caused initialization errors due to keyset brand mismatch.
v2.13.0
Release date: 12-01-2023
Added
- Support for displaying AI chat assistant messages.
- Support for AI assistant typing indicator.
Fixed
- Initial messages from the chat assistant were missing intermittently.
- User avatar is missing for attachment messages from the agent.
- Tapping on deflection articles after dismissing quick reply actions resulted in a crash.
- Intermittent unresponsive UI when answer button feedback actions are taken.
Improved
- Moved all quick reply actions into the message thread.
v2.12.1
Release date: 10-16-2023 // Docs
Improved
- Catching bugs that caused chat to crash following:
- An
IndexOutofBoundsExceptionerror. - A request to okhttp3.
- An
Added
- EventBus publishing within Kustomer's logging which allows users to subscribe to events with their error logger.
v2.12.0
Release date: 09-14-2023
Fixed
- Fixed an issue where articles failed to open due to an incorrect URL.
- Fixed an issue that could cause chat sessions to appear across multiple brands in the same integration.
- Fixed an issue where messages sent by an agent would periodically disappear.
v2.10.9
Release date: 05-16-2023
Fixed
- Fixed an issue with displaying branded knowledge base articles.
v2.10.8
Release date: 05-08-2023
Fixed
- Fixed bugs that caused chat to crash following an
ConcurrentModificationExceptionerror.
v2.10.7
Release date: 03-22-2023
Fixed
- Fixed bugs that caused chat to crash following:
- An
IndexOutofBoundsExceptionerror. - A request to okhttp3.
- An
- Fixed a bug that might cause the app to crash if the internet connection is lost.
v2.10.6
Release date: 02-21-2023
Fixed
- Fixed bugs that caused chat to crash following:
- An
IndexOutofBoundsExceptionerror - An
ArrayIndexOutofBoundsExceptionerror
- An
- Fixed a bug that caused inbound message bubbles to overlap.
v2.10.5
Release date: 11-28-2022
Summary: Hotfix release
Fixed
- Fixed knowledge base article URLs for articles not hosted on custom domains where the top-level domain is
.support.
v2.10.4
Release date: 11-16-2022
Fixed
- Fixed a bug where articles that were not in a default brand category failed to open when viewing them in the chat UI. Now, all articles in all brands are displayed properly.
- Fixed a bug where viewing images with a wide aspect ratio caused the app to crash.
- Fixed a bug where the No Connection banner covered the first message in the conversation list.
- Fixed an issue with the unavailable greeting message being off-center.
- Fixed a bug where end-user default messages were ignored when a chat assistant was present.
Improved
- Improved the accuracy of Turkish translations.
- The Deflection report now immediately shows all articles that are clicked in chat, even if the chat is abandoned after the article is clicked.
Added
- Initial messages sent to a customer now appear on the agent timeline when creating a new session.
v2.10.3
Release date: 10-06-2022
Added
- Added a new
openKbCategorymethod that can be used to open a Knowledge base category by its ID. - Added support to display knowledge base articles marked as “Featured Articles” on the Answers tab in the chat UI.
Improved
- Increased the display height for multi-level lists in the chat UI.
- Improved scroll jank that appeared when multiple assistant template messages are received in a row.
v2.10.2
Release date: 08-22-2022 /
Added
- Added filtering for insecure file types.
Improved
- Improved the user experience when starting a conversation if you have a default assistant set. Now, you can also choose to override the default so that an assistant isn't used at all.
- Improved the conversation list UI. Now, a New Messages divider visually indicates where new, unread messages begin.
- Changes to Chat settings now reflect immediately within the SDK.
v2.10.1
Release date: 08-04-2022
Summary: Hotfix release
Removed
- Removed unused launcher icon files from the SDK.
v2.10.0
Release date: 07-27-2022
Added
- Added a button that allows you to quickly scroll down to the bottom of the message thread.
Improved
- Improved how customer deletion is handled. Now, end-users are logged out of chat when the delete event is received.
- Improved how conversation deletion is handled. Now, deleting an open conversation ends the chat, and the customer is prompted to start a new conversation.
- Improved the exception shown if an app tries to access Kustomer before it’s initialized.
- Improved how articles render in the SDK.
Updated
- Updated jetpack navigation libraries from 2.3.4 to 2.4.2.
Removed
- Removed unused launcher icon files from the SDK.
v2.9.11
Release date: 06-22-2022 // Docs
Added
- Added support for setting a lock-out period with satisfaction (CSAT) surveys. To edit the time period, go to the Settings > Satisfaction > General tab in your Kustomer organization.
- Added two new parameters that can be used on conversation creation:
describeAttributesparameter can be used to pass conversation attributestitleparameter that can be used to set the conversation name
For more information, see Start new conversation.
Improved
- Improved the loading of customer profiles with a large conversation history.
- Improved the color of file names sent in messages so that they match the color scheme set by the developer.
v2.9.10
Release date: 05-25-2022
Fixed
- Fixed a bug that caused
isLoggedInto incorrectly return as false when an anonymous customer profile was merged after login. - Fixed a bug where devices are showing a ‘No Internet Connection’ banner warning despite being connected to wifi.
- Fixed a bug that displayed the ‘Power by Kustomer’ logo when the setting was turned off.
Added
- Added the ability to pinch-to-zoom an image.
-
Improved
- Improved unread counts for conversations with messages going back more than 30 days.
- Improved pagination performance.
- Improved the accuracy of Turkish translations.
Updated
- Updated the Pubnub Jackson library to the latest version.
v2.9.9
Release date: 04-18-2022
Summary: Hotfix release
Improved
- Improved PubNub connection handling for implementations that do not have chat push notifications configured.
- Improved error logging for connection issues. Now, the log displays a red “Error” message if you’re unable to establish a connection with our backend systems.
v2.9.8
Release date: 04-06-2022
Fixed
- Fixed a bug that periodically caused
observeActiveConversationIdsto return a previously closed conversation. - Fixed a bug where read receipts weren’t updating for messages sent with attachments.
Added
- Added the
preferredViewoption which allows you to customize what view customers see when they first open the chat widget. This was previously calledKusWidgetType.
Improved
- Improved push notifications. Now, we display your org’s app icon in the notification instead of the user avatar.
- Improved error logging around describing a conversation. Now, you will see exact error codes, along with a description of the issue.
v2.9.7
Release date: 03-09-2022
Fixed
- Fixed a bug where the greeting image and message aren’t shown to customers who have chat history turned off.
Added
- Added a title to push notifications to provide additional context to the existing push notification message preview.
- Added a new ‘startNewConversation` method which introduces the functionality to start a new conversation with an end-user message by specifying the initial message direction.
Improved
- Improved the accuracy of Turkish translations.
- Improved the keyboard’s performance while searching the knowledge base.
- Improved how we send CSAT responses to our backend to support CSAT reporting in a variety of languages.
Deprecated
openNewConversationhas been deprecated. Please seestartNewConversation.
v2.9.6
Release date: 02-23-2022
Fixed
- Fixed a rare bug that caused the app to crash when calling
setChatSettings. -
Added
- Added a footer to the Knowledge Base search results page that indicates if more than 100 articles were found.
- Added support for disabling attachments. To edit, go to Apps > Chat > Settings on the Kustomer website.
Improved
- Improved the UI when viewing CSAT surveys that contain many questions.
- Improved the Knowledge Base UI by adding a loading indicator.
- Improved our authentication to fix an issue where a chat conversation would occasionally not have an assistant.
Updated
- Updated the Firebase Messaging Library to the latest version.
- Updated sorting on the conversation list. Now, the list is sorted by the timestamp of the most recent message within a conversation.
v2.9.5
Release date: 01-19-2022 //
Summary: Hotfix release
Fixed
Fixed an issue where assistant conversations may show in chat history with an incorrect team name and avatar.
v2.9.4
Release date: 01-13-2022
Fixed
- Fixed a bug that was causing knowledge base articles to render incorrectly when viewing them on an Android device.
- Fixed a race condition that could lead to a rare app crash.
- Fixed a bug where a CSAT message preview wasn’t being shown in the history view if it was the last message in the thread.
- Fixed a bug that prevented a confirmation message from displaying when a user selected a negative article rating if Article Feedback is turned off. Now, users will receive confirmation that their feedback has been submitted.
- Fixed a bug that was giving users the ability to start more than one chat conversation when an existing conversation was loading and ‘restrict to single open chat’ was enabled.
Added
- Added the ability to disable in-app notifications using the
showInAppNotificationsconfiguration option. For more information, see KustomerOptons class reference.
Updated
- Updated the conversation list to no longer display draft conversations.