Android
v0.17.3
Improvements
InteractKit exposes connection state InteractKit now exposes the underlying WebSocket connection state through its
connectfield. In earlier 0.17 releases, this state was internal and not available through the public API. You can now observe reconnect cycles, show connectivity indicators, and gate logic on connection readiness by attaching aConnectKitListeneror collecting updates fromconnect.stateFlow.Fullscreen orientation is now handled by the consumer The SDK no longer manages screen orientation when an Experience enters fullscreen. This behaviour previously added integration and cleanup overhead and prevented custom behaviour. Orientation changes are now delegated to the consumer, which gives you full control over this state.
v0.17.2
Fixes
IndexOutOfBoundsException in Event under concurrent element mutations The fix introduced in 0.16.21 affecting Event concurrent element mutations which could result in IndexOutOfBoundsExceptions is now included in the 0.17.x release line.
RejectedExecutionException in DelayMessageQueue when
add()/start()races withstop()The fix introduced in 0.16.21 affectingDelayMessageQueueadd()andstart()function calls which could result in RejectedExecutionExceptions is now included in the 0.17.x release line.
v0.17.1
Improvements
Implicit IdentifyKit Cleanup IdentifyKit internally cleans up allocated resources when
purgeCore()is invoked on a Core instance with an attached IdentifyKit.
Fixes
Session Signature Update Message The fix introduced in 0.16.20 affecting the session signature message format is now included in the 0.17.x release line.
v0.17.0
New Features
InteractKit
logout()must now be called explicitly. A newlogout()method has been added to the InteractKitAPI interface; if your implementation of the interface doesn't already provide one you must add it.
Improvements
Session ID Persistence Across Reconnections ConnectKit now persists and reuses the session ID across WebSocket reconnections. This gives the backend continuity of context for a user session and avoids redundant session setup on transient disconnects.
View Providers are Parcelable Supported.
ExperienceConfigurationnow supportsloadingViewProvideranderrorViewProvideras properly-parcelled lambdas, so they survive process restoration viaExperienceFragment.Replaced Gson Dependency with Kotlin Serialization
Gsonhas been removed. All serialisation throughout the SDK now useskotlinx.serialization. This reduces the SDK's dependency footprint and aligns with Kotlin-idiomatic tooling.Replaced Netty Dependency with Ktor WebSocket
Nettyhas been removed. The WebSocket transport layer inConnectKitnow uses Ktor (backed by OkHttp) instead of Netty. This significantly reduces the binary size of the SDK and eliminates a large, server-oriented dependency from an Android library.Bumped SDK versions
targetSdkandcompileSdkupdated to 36.SDK requires gradle
8.11.1+and agp8.9.1+
Breaking Change
These changes require updates to your integration code. Read the Migration Guide for step-by-step instructions.
Removal of Deprecated Launcher API Overloads
The following deprecated API overloads have been removed:
getExperience(),getExperienceFragment(),getExperienceIntent(), andreload().Removal of
ExperienceActivityfeature. The Activity-based experience host has been removed. UseExperienceViewdirectly inside your own Activity or useExperienceFragment.Package rename for IdentifyKit. Classes previously under
co.monterosa.identifykitnow live underco.monterosa.sdk.identifykit(consistent with the rest of the SDK).InteractKit Callback Functions Are Now Suspend
The callback functions in InteractKit have been converted to suspend functions, as recommended for asynchronous operations. They can now be called within a coroutine scope.
Migration Guide
ProGuard / R8
No new consumer rules are required. The Ktor/OkHttp and kotlinx.serialization libraries include their own consumer rules. If you were previously adding manual rules for Gson or Netty, those can be removed.
Remove Gson from your dependencies (if pulled in transitively)
If your project depended on Gson only because the SDK pulled it in, you can now remove it:
Update IdentifyKit import paths and usages.
Imports
Get
defaultInstance
getSessionSignatureandgetUserDatacalls.
Update InteractKit construction and callback calls.
getProjectcall.
loginandlogoutcalls.
v0.16.21
Fixes
IndexOutOfBoundsException in Event under concurrent element mutations Element lists were backed by plain
ArrayListwith no thread-safety guarantees. Under concurrent access this could produce anIndexOutOfBoundsException. Both lists are now backed byCopyOnWriteArrayList, and mutation paths take asnapshot for reads while writing directly to the live list.RejectedExecutionException in DelayMessageQueue when
add()/start()races withstop()The scheduled executor service field was not declared@Volatilewith guard checks, so ashutdownNow()on one thread was not guaranteed to be visible toadd()orstart()on another. Fixed by marking the field@Volatile, capturing the reference once per call to avoid double-reads, and wrapping submission calls in a try/catch RejectedExecutionException to handle the residual race window safely.
v0.16.20
Fixes
Incorrect Message Format on Session Signature Update When a session signature was refreshed, the message sent to the Experience contained a malformed payload. This caused any Experience functionality that depended on a valid signature to fail silently after the first signature refresh. The message format has been corrected. Signature update messages are now delivered in the format the Experience expects, restoring reliable behaviour across the full authenticated session lifecycle.
Improvements
Explicit
destroy()for IdentifyKit Cleanup IdentifyKit now exposes adestroy()method that consumers must call to release allocated resources.Response Caching for
getSessionSignature()andgetUserData()IdentifygetSessionSignature()andgetUserData()made extra network requests, even when the response was unlikely to changed. Both methods now cache these responses and reduces unnecessary round-trips to the Identify API.
v0.16.19
New Features
Native share sheet support When an Experience triggers a share action, the SDK now automatically presents a native share sheet with the shared content. This behaviour is controlled by the
showsDefaultShareSheetproperty inExperienceConfiguration(defaults totrue). When set tofalsethe SDK skips the native share sheet, allowing you to handle sharing in your own way.onSharelistener callback A newonShare(ExperienceView, ShareContent)method has been added toExperienceViewListener. This callback fires every time the Experience requests a share action, regardless of theshowsDefaultShareSheetsetting, giving you full visibility into share events.
Fixes
Concurrent modification crash for getElements in Events We've implemented a fix for the ConcurrentModificationException that occurs when different parts of our SDK attempt to read and modify the same Event's element list simultaneously. This fix includes the following key improvements:
Thread-Safe Collection: Upgraded the collection for the Elements to a thread-safe variant. This change is specifically designed to handle simultaneous reads and writes without conflicts.
Snapshot Iteration Strategy: Implemented a snapshot iteration method for elements, ensuring stability during concurrent operations.
v0.16.18
New Features
Allows Popup Behaviour in Experience The SDK now facilitates popup windows within your Experience. Ideal for scenarios requiring secondary windows, these are triggered using the JavaScript
window.open()function or similar variant. It's crucial for these windows to ensure proper closure and, if applicable, data transfer back to the main Experience. Configuration is available throughExperienceConfiguration.
v0.16.17
Fixes
Concurrent modification crash for SDK listeners We've implemented a fix for the ConcurrentModificationException that occurs when different parts of our SDK attempt to read and modify the same list of listeners simultaneously. This fix includes the following key improvements:
Thread-Safe Collection: Upgraded the collection used by the MulticastListener class to a thread-safe variant. This change is specifically designed to handle simultaneous reads and writes without conflicts.
Snapshot Iteration Strategy: Implemented a snapshot iteration method for notifying listeners, ensuring stability during concurrent operations.
Error Handling Improvement in onFailloading Listener The
onFailloadinglistener previously propagated all errors from the experience to the parent, aiding in debugging the client app. However, this verbosity was problematic. We have now refined this by restricting error propagation to only include issues related to experience loading failures. All other errors are logged to the console for debugging purposes, ensuring clearer communication with the parent app.
v0.16.16
Fixes
Session persistance We’ve updated the default behaviour of storage persistence to be enabled by default. This change ensures consistent session maintenance, preventing disruptions caused by the operating system clearing webview data over time.
To ensure optimal performance and compatibility, please upgrade to JavaScript SDK version 0.18.4 and this corresponding Android SDK version to prevent any disruptions in user experience.
v0.16.15
Fixes
Experience Cleanup We’ve improved how Experiences are cleaned up to ensure smoother transitions and prevent issues during re-initialisation.
v0.16.14
Fixes
Opening links externally not handled for embedded iframes The opening links in an external app using the
launchesURLsWithBlankTargetToChromeoverride now handles links from webpages or iframes embedded in an Experience.
New features
Background customisation The SDK now enables you to customise the background of an Experience to match overall app look. This can be configured via
ExperienceConfiguration
v0.16.13
Fixes
Crash on opening a URL when no browser installed Users whose device didn’t have a browser installed would crash when attempting to open a URL.We now avoid the crash, and notify about this occurrence with a listener so you can notify your user about the error if you chose to
New Features
Loading view timeout configuration SDK can optionally display a loading view while the Experience is loading. This view is removed when either of the two happens:
The Experience notifies the SDK that it has completed loading it’s UI.
A loading timeout has been reached.
This version of the SDK adds a way to customise this timeout:
Last updated

