NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3121 most downloaded on pub.dev
Flutter plugin for Zendesk Messaging SDK. Provides in-app customer support messaging with multi-conversation support, real-time events, and JWT authentication.
Last release 8 days ago
30 Sep 2026
Release timing varies
gaps range from 1 weeks to 1.1 years
Nearly every release is documented
notes for 26 of 26 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
26 releases · first in 2021
iOS : invalidate() now clears the SDK's local storage (user data, conversations and cache), matching Android ( #107 , #108 ). Before, the previous use
invalidate() now clears the SDK's local storage (user data, conversations and cache), matching Android (#107, #108). Before, the previous user's data could stay on the device after logoutUser() + invalidate() and show up for the next user.
invalidate() will now start with a new anonymous user.setLocale() docs now say the new locale applies from the next app launch. iOS reads AppleLanguages only at launch, so the previously documented invalidate() + initialize() flow did not switch the language at runtime (#105, #109).Native SDK versions are unchanged (Android 2.40.0, iOS 2.39.0).
Verified with dart format, flutter analyze and the full test suite. The iOS invalidate() change was tested by @toniess on a real device (iPhone 15 / iOS 26) and a simulator (iPhone 17 / iOS 27) for both the next-user and anonymous flows.
Thanks @toniess for the report and the fix!
One column per quarter.
invalidate() now clears the SDK's local storage (user data,
conversations and cache), matching Android. Previously the iOS SDK was
invalidated with clearStorage: false, so the previous user's data and
conversation history stayed on the device after logoutUser() +
invalidate() and could show up for the next user. Android's
Zendesk.invalidate() has no option to keep data, so behavior is now the
same on both platforms. Apps that relied on iOS keeping anonymous
conversations across invalidate() will now start with a new anonymous
user (#107, #108).setLocale() docs now say the new locale applies from the next app
launch. iOS reads AppleLanguages only at launch, so the previously
documented invalidate() + initialize() flow did not switch the language
at runtime (#105, #109).iOS : Update ZendeskSDKMessaging from 2.36.0 to 2.39.0 (CocoaPods and Swift Package Manager). Picks up the SDK fixes for the JWT-expiration check that
ZendeskSDKMessaging from 2.36.0 to 2.39.0 (CocoaPods and Swift Package Manager). Picks up the SDK fixes for the JWT-expiration check that could leave the app loading forever (2.36.1) and for client data being cleared unexpectedly (2.37.0).
messaging-android from 2.36.1 to 2.40.0. The SDK is now built with Kotlin 2.2.21, so apps need Kotlin 2.1 or later.Verified with flutter analyze, the full test suite, an Android debug build of the example app, and an iOS build of the plugin against ZendeskSDKMessaging 2.39.0.
iOS : Add Swift Package Manager (SPM) support ( #100 ). The plugin now ships a Package.swift alongside the existing podspec, so apps that have migrate
Package.swift alongside the existing podspec, so apps that have migrated to SPM can depend on it.
ZendeskSDKMessaging 2.36.0 native SDK. Existing CocoaPods users are unaffected and need no changes.SwiftPM does not allow mixing Objective-C and Swift in a single target, so the thin Objective-C plugin registrant was removed and the Swift class is now the registrant directly (exposed via @objc(ZendeskMessagingPlugin)). The public class name and the generated registrant are unchanged.
Verified by building the example app with both CocoaPods and Swift Package Manager, plus flutter analyze and the full test suite.
Package.swift alongside the existing podspec, so apps that have migrated
to SPM can depend on it. CocoaPods remains fully supported — both dependency
managers resolve the same ZendeskSDKMessaging 2.36.0 native SDK, so existing
CocoaPods users are unaffected and no app changes are required.The Kotlin Gradle Plugin is now applied only on AGP < 9, and the deprecated kotlinOptions block is replaced by the kotlin.compilerOptions DSL. Apps on…
setLocale(locale) to override the Zendesk messaging UI language at runtime (#97).
Locale.setDefault() + application/activity resource configuration; runtime switch supported.AppleLanguages user default; set it before initialize(), and re-initialize to change it afterward.kotlinOptions block is replaced by the kotlin.compilerOptions DSL. Apps on AGP < 9 are unaffected.setLocale(locale) to override the Zendesk messaging UI
language at runtime (#97).
Locale.setDefault() and updates the application/activity
resource configuration. Can switch at runtime before launching the UI.AppleLanguages user default for SDK localization. Set it
before initialize(); to change after, call invalidate() then
initialize() again.kotlinOptions block is replaced by the
kotlin.compilerOptions DSL. Apps on AGP < 9 are unaffected.iOS: Parse the APNs device token as hex before forwarding to PushNotifications.updatePushNotificationToken. The previous code used token.data(using: .
PushNotifications.updatePushNotificationToken. The previous code used
token.data(using: .utf8), which produced the UTF-8 bytes of the hex
string instead of the 32-byte device token, so Zendesk registered a
malformed token and never delivered iOS push.onAttachedToEngine)
for handleNotification instead of the Activity. The Activity is null in a
background isolate / terminated state, so the previous code bailed with
no_context and background pushes never displayed.
PushNotifications.displayNotification only needs a Context.initialize against a null Activity to return a clean
error instead of a NullPointerException. Push display does not require
initialize; it uses shouldBeDisplayed / handleNotification.updatePushNotificationToken API doc. On iOS, pass the APNs device token
from getAPNSToken(), not the FCM token from getToken() — using the FCM
token on iOS silently fails to deliver push. Token retrieval is now split per
platform, and onTokenRefresh is guarded to Android (iOS APNs tokens are
re-fetched on launch).showConversation should be called once per navigation. Rapid
duplicate calls can make the underlying SDK open the default conversation
instead of the requested one, so callers that may fire more than once for a
single user action (e.g. a notification tap reaching multiple handlers) should
de-duplicate.iOS: Resolve root view controller from active scene for UISceneDelegate apps
Add multi-language README support
Flutter SDK: >=3.24.0 -> >=3.27.0
updatePushNotificationToken(token) - Register FCM/APNs token with Zendesk
updatePushNotificationToken(token) - Register FCM/APNs token with ZendeskshouldBeDisplayed(data) - Check if notification is from Zendesk messaginghandleNotification(data) - Display Zendesk push notificationhandleNotificationTap(data) - Handle notification tap and navigate to conversationZendeskPushResponsibility enum - Notification classification (messagingShouldDisplay, messagingShouldNotDisplay, notFromMessaging)PushNotifications class from Zendesk SDKPushNotifications class with handleTap completion handleriOS minimum version: 12.0 -> 14.0
Full Event System: 24 event types via sealed class pattern
UnreadMessageCountChanged - unread count changes with conversation detailsAuthenticationFailed - auth errors with JWT expiration detectionConnectionStatusChanged - network state monitoringConversationAdded, ConversationStarted, ConversationOpened - conversation lifecycleMessagesShown - messages rendered with message dataSendMessageFailed - message send failuresFieldValidationFailed - conversation field validation errorsMessagingOpened, MessagingClosed - UI lifecycleProactiveMessageDisplayed, ProactiveMessageClicked - proactive messagingConversationWithAgentRequested, ConversationWithAgentAssigned, ConversationServedByAgent - agent eventsNewConversationButtonClicked, PostbackButtonClicked - UI interactionsArticleClicked, ArticleBrowserClicked - article eventsConversationExtensionOpened, ConversationExtensionDisplayed - extension eventsNotificationDisplayed, NotificationOpened - push notification events (Android)Multi-Conversation Navigation
showConversation(conversationId) - navigate to specific conversationshowConversationList() - display conversation liststartNewConversation() - start new conversation directlygetUnreadMessageCountForConversation(conversationId) - per-conversation countUser Management
getCurrentUser() - get current user with auth typeZendeskUser model with id, externalId, authenticationTypeZendeskAuthenticationType enum (anonymous, jwt)Connection Status
getConnectionStatus() - get SDK connection stateZendeskConnectionStatus enum (connected, connecting, disconnected, unknown)New Models
ZendeskUser - user informationZendeskMessage - message data with id, conversationId, authorId, content, timestampZendeskLoginResponse - login response dataZendeskEvent sealed class hierarchyunreadMessagesCountStream for legacy codeSee README.md for detailed migration instructions from 2.x.
Update Dart SDK minimum version to 3.0.0 .
Fix multi conversation navigation
recover namespace setting for android
fix issue for logoutUser in iOS
Upgrade zendesk-messaging sdk version to 2.16.0
Add `invalidate()` to invalidate the current instance of ZendeskMessaging
invalidate() to invalidate the current instance of ZendeskMessaging* Add conversation tag
Upgrade zendesk-messaging sdk version to 2.11.0
Upgrade ZendeskSDKMessaging of iOS to v2.9.0 to be compatible with Xcode 14.3
Fix parameter type issue of handler function
* Upgrade Dart sdk version
* Upgrade to 2.6.0
* Update versions of environment
* Upgrade to 2.5.0
* Authentication * Global observer
* Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →