Changelog
Positive User Mobile SDK is available for multiple platforms, with each platform-specific SDK maintained independently. This allows us to optimize performance and features for each platform while ensuring regular updates and improvements across all versions.
Below you'll find the latest versions of each SDK followed by detailed changelogs for Android, iOS, and Flutter implementations. Each changelog documents the enhancements, fixes, and changes specific to that platform's SDK.
Current Versions
| Platform | Latest Version | Release Date |
|---|---|---|
| Android | 1.2.14 | May 14, 2026 |
| iOS | 1.3.0 | October 21, 2026 |
| Flutter | 1.0.2 | July 8, 2025 |
Android
1.2.14 (May 14, 2026)
- Added in-app click handler method
- Updated dependencies
1.2.13 (October 27, 2025)
- Bumped compiler version
- Refactored debug logs
1.2.12 (September 5, 2025)
- Resolve shadowed dependencies issue
1.2.11 (August 7, 2025)
- Add
sendEventmethod as a native way of sending Events - Deprecate previous
sendEventmethod, implementingUserComEvent
1.2.10 (April 28, 2025)
- Updated Push Priority to HIGH
- Updated Push handler to display Push Notification when app in foreground
- Resolved issues with Rich Push not rendered
- Updated library dependencies(API 35 required)
1.2.8 (February 26, 2024)
- Fixed Font Resolver not being public
- Updated library dependencies
1.2.7 (October 19, 2024)
- Added deprecation annotation on unused code
- Removed unused methods
1.2.6 (May 19, 2023)
- Add
track screenmethod for custom navigation tracking
1.2.5 (March 20, 2023)
- Added
onSDKInitializedcallback method to SDK Builder
1.2.4 (March 19, 2024)
- Added support for refactored In-App Messages
iOS
Upgrading from an earlier version? See the iOS Migration Guide.
1.3.0 (October 21, 2026)
Changed in 1.3.0
Existing code compiles, but check these behavior changes before upgrading. Details and what to do: MIGRATION.md.
- Completions always run on the main thread, and never before the call returns.
- After
logoutthe anonymous contact keeps the push token, so the device keeps receiving pushes. A push sent to the logged-out contact does not reach the device. Remove asetFcmToken(_:)call after logout if you added it only for this. - Received notifications and taps are passed separately:
handleNotification(_:)handles a received notification and never counts a click,handleNotificationClick(_:)counts the click. The oldhandleNotification(userInfo:)still counts a click for every call until you switch. - The SDK no longer keeps a copy of contact data.
updateContactsends the data once and later pings do not repeat it. The phone number is sent asphone_numberinstead ofphone. The backend accepts both. - If the SDK is your notification delegate, notifications received in the foreground are shown as banners. Before, they only played their sound.
New
handleEmailLinkcounts clicks on links from Positive User emails that open the app and returns the target of the link. See Opening App ScreensupdateContactwith aContactupdates the contact in one call and replacessetUserDataandsetCustomUserData. See Contacts- Every failure is a
UserSDKError.UserSDK.errorHandlerreceives all of them in one place, also from calls without a completion - New names:
sendEvent(name:attributes:),trackScreen(name:),sendProductEvent(_:eventType:attributes:),ProductEventType,userKey,inAppMessageClickHandler. The old names keep working and are deprecated until 2.0
Fixed
- Values JSON cannot hold (for example
Date,URL, NaN) in attributes end with an error instead of crashing the app - An app woken in the background on a locked phone no longer creates a duplicate contact
- No duplicate contacts from two pings sent in a row on a fresh install, or from a ping restored after a restart
- A queue restored after a restart is not sent twice when the SDK is initialized again
- 429 (rate limit) is retried after the time the server asks for. Before, the request was dropped
- The SDK version is sent with the device data
- The SDK no longer collects the advertising identifier or carrier data, and no longer links AdSupport and CoreTelephony
- A ping answered with
{"success": false}(the app does not collect data) reports an error instead of success - An empty, too long or HTML event name, a screen name over 128 characters and an empty product id end with an error without a request. See Events
1.2.0 (October 7, 2026)
- In-app messages are shown in a window of their own, so your screen hierarchy (splash screens, full screen presentations, sheets, a replaced root view controller) no longer blocks them. Screens you present while a message is visible are no longer blocked: they appear under the message and are available after it closes
- In-app messages received while the app is in the background are shown the next time the app becomes active, if they arrived less than 6 hours earlier (only the newest one is kept,
logoutdiscards it) - In-app "displayed" is reported only once the message is actually on screen, so displayed numbers in the panel may drop and become accurate
- Behavior change: product event
paramsare sent as separate product attributes instead of a singlecustom_dataJSON attribute. Rebuild segments or automations based oncustom_data, and use a fixed set of param keys, because every new key creates a new product attribute. See Migration Guide - Behavior change:
logoutrecords alogoutevent for the contact who is leaving setFcmToken(_:)always sends a ping, also when the token has not changed- Added optional
fcmTokenparameter tosetUserDataandsetCustomUserData, so identity and token reach the backend in one request - Notification handling always moves to the main thread, which fixes in-app messages lost or a crash in CoreAutoLayout when
handleNotificationis called from aTask, an actor or a background queue - Notification payloads with numeric
idandtypeare accepted - Events sent after
logoutcompletes no longer fail with "No user exists yet" - The device iOS version is now stored on the contact
- The framework reports its real version in
Info.plist - Replaced a cellular radio API deprecated since iOS 12
1.1.1 (August 6, 2026)
- Fixed in-app click tracking: clicks reach the backend in the expected format and are counted again
1.1.0 (August 6, 2026)
- Behavior change:
sendEvent,trackScreen,sendProductEvent,setUserDataandsetCustomUserDatacallcompletion(false, error)when the backend rejects a request (for example 400 or 401). Earlier versions reported success regardless, so review any logic that treatstrueas proof of delivery. See Migration Guide - Failed requests retry with a growing backoff and no longer block other queued events
- In-app messages are presented through the active foreground scene instead of the deprecated
keyWindow - In-app button clicks are always reported, including custom scheme links handled by
InAppNotificationClickDelegate - Deprecated
shouldTrackActivities, which never enabled automatic screen tracking. CalltrackScreen(with:)or use theTrackableview controllers
1.0.0 (June 2, 2026)
- Breaking change: removed all external dependencies. Firebase and Gifu are no longer bundled or required. See Migration Guide
- Bring your own token: pass the FCM token with
setFcmToken(_:),ping(fcmToken:)or thefcmTokenparameter of the initializer logouttakes the token to remove from the contact:logout(fcmToken:)- The SDK no longer calls
FirebaseApp.configure()and is no longer the FirebaseMessagingdelegate. Your app configures Firebase and sets its ownMessagingDelegate
0.7.12 (April 2, 2026)
- Added SPM support
- Started phasing out CocoaPods integration method
- Removed bundled Firebase and Gifu dependencies from the SPM package: add
firebase-ios-sdk(11.0.0) andGifu(3.3.1) manually to your project - Added
InAppNotificationClickDelegatefor custom URL handling on in-app message button taps - Added
inAppAlertCloseButtonTextstatic property to customize the in-app close button label (has no effect) - Added automatic keychain reset on fresh install
0.7.3 (August 4, 2025)
- Bump compiler version
0.7.2 (February 19, 2025)
- Fixed issue with Gifu dependency
0.7.1 (August 12, 2024)
- Added image support to Mobile Push Messages
0.7.0 (April 8, 2024)
- Updated compiler compatibility to support latest language features
0.6.9 (February 28, 2024)
- Added support for refactored In-App Messages
- Added
fontResolverfor custom font support in in-app messages - Removed deprecated
Preload Contentfunctionality - Increased minimum supported iOS version from iOS 11 to iOS 13
0.6.8 (May 31, 2023)
- Fixed automatic Firebase Token synchronization
0.6.7 (January 26, 2023)
- Refactored Firebase Token refresh handling in
registermethod
0.6.6 (September 12, 2022)
- Fixed sound issues for Mobile Push Messages
0.6.5 (June 3, 2022)
- Added support for Apple Swift version 5.6.1 compiler
0.6.4 (February 2, 2022)
- Fixed multiple Contacts created when using
logoutmethod
Flutter
1.0.2 (July 5, 2025)
- Bump package versions
- Enhance standard attribute handling in Customer
- Add new Example Project
- Remove unused Push Displayed endpoint
1.0.1 (November 5, 2024)
- Bump package versions
- Update connection controller to match new API
1.0.0 (April 11, 2024)
- Added support for refactored In-App Messages
- Added callback to
buildNotificationOnMessageReceivedin order to define own behaviour on interact
0.1.2 (March 14, 2024)
- Upgraded all packages versions
0.1.1 (October 17, 2023)
- update
connectivity_plusdependency, which caused IOS build errors
0.1.0 (September 19, 2023)
- Fixed problems with a missing userKey
- Added new contact session creation after logout
0.0.8 (August 31, 2023)
- Fixed serialization for cached requests
- Added request removal from cache if resending falied
0.0.7 (August 31, 2023)
- Upgraded package dependencies
- Removed flutter custom tabs
- Added
url_launcherpacakge to handle links
0.0.6 (June 22, 2023)
- Converted local DateTime to utc in events
0.0.5 (April 12, 2023)
- Removed Local Notifications
- Fixed device info lib version
- Updated example to show how to use package
0.0.4 (February 6, 2023)
- Removed Awesome Notifications
- Added Flutter Local Notifications
0.0.3-beta.1 (September 14, 2022)
- Changed dependency of Awesome Notifcations
- Added query for FirebaseMessaging permissions
0.0.2 (June 26, 2022)
- Added package support flutter >=3.0.0
- Added missing serialization methods to models
- Update min version of flushbar package
0.0.1 (May 26, 2022)
- Initial release
- Added support for sending CustomEvents, ProductEvents, ScreenEvents, NotificationEvents
- Added ping on app launch, registering and unregistering contact
- Added request caching on Internet exceptions
- Added resending requests
- Added receiving notifications from FCM, ability to customize
- Added launching urls in Custom Tabs.