diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a2d3b..ca23ec1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.3.2] - 2026-09-04 + +### Added +- Optional prefilled message support when creating support conversations. +- SDK version filter for session replay from the dashboard. +- Added support for UI-based rate limiting. + +### Changed +- Improved session recording stability and reduced startup jank. + +### Fixed +- Fixed crashes and ANRs related to session recording and WebView masking. +- [iOS] Fixed support chat clearing on transient modal dismiss and landscape replay issues. + +## [2.3.1] - 2026-06-03 + +### Fixed +- Fixed session recordings associating events with the wrong DevRev workspace. +- [iOS] Fixed crashes from thread-unsafe access. +- [Android] Fixed masking issues on rapid scrolls. +- [Android] Fixed an issue with missing crash types. + ## [2.3.0] - 2026-04-28 ### Changed diff --git a/README.md b/README.md index cfd2d70..5ff33d5 100644 --- a/README.md +++ b/README.md @@ -367,6 +367,12 @@ You can initiate a new support conversation directly from your app. This method DevRev.createSupportConversation(successCallback, errorCallback) ``` +You can optionally pass a plain-text message to pre-fill the conversation input field: + +```javascript +DevRev.createSupportConversation('I need help with billing for order #12345', successCallback, errorCallback) +``` + ### In-app link handling The DevRev SDK provides a mechanism to handle links opened from within any screen that is part of the DevRev SDK. @@ -627,10 +633,25 @@ DevRev.processPushNotification(messageJson, function() { ##### iOS -On iOS devices, you must pass the received push notification payload to the DevRev SDK for processing. The SDK handles the notification and executes the necessary actions. +On iOS devices, you must update the `AppDelegate` to intercept notification clicks and forward the payload to the SDK. -```javascript -DevRev.processPushNotification(payload, successCallback, errorCallback) +In `didFinishLaunchingWithOptions`, set the `UNUserNotificationCenter` delegate: + +```swift +UNUserNotificationCenter.current().delegate = self +``` + +Implement `userNotificationCenter(_:didReceive:)` to pass the notification payload to the SDK: + +```swift +func userNotificationCenter( + _ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse +) async { + await DevRev.processPushNotification( + response.notification.request.content.userInfo + ) +} ``` For example: diff --git a/devrev-sdk-cordova-2.3.2.tgz b/devrev-sdk-cordova-2.3.2.tgz new file mode 100644 index 0000000..53f328e Binary files /dev/null and b/devrev-sdk-cordova-2.3.2.tgz differ diff --git a/sample/package.json b/sample/package.json index dde73f5..08840da 100644 --- a/sample/package.json +++ b/sample/package.json @@ -1,7 +1,7 @@ { "name": "ai.devrev.sdk.bridge.cordova.sample", "displayName": "DevRevSDK (Cordova)", - "version": "2.3.0", + "version": "2.3.2", "description": "DevRev SDK for Cordova sample app.", "main": "index.js", "scripts": { @@ -27,7 +27,7 @@ "platforms": [] }, "devDependencies": { - "@devrev/sdk-cordova": "2.3.0", + "@devrev/sdk-cordova": "2.3.2", "cordova-plugin-device": "^3.0.0", "cordova-plugin-firebase-messaging": "^8.0.1", "cordova-support-android-plugin": "~2.0.4" diff --git a/sample/www/js/feature.js b/sample/www/js/feature.js index 3860342..0660ede 100644 --- a/sample/www/js/feature.js +++ b/sample/www/js/feature.js @@ -178,6 +178,7 @@ const featureData = { { title: 'Support', list: [ { text: 'Support Chat', action: () => DevRev.createSupportConversation() }, + { text: 'Support Chat with Prefill', action: () => DevRev.createSupportConversation('Hi, I need help with my account') }, { text: 'Support View', action: () => DevRev.showSupport() } ] } @@ -289,6 +290,60 @@ const featureData = { } ] }, + { + title: 'Feature Configuration', + list: [ + { + text: 'Enable Frame Capture', + action: () => { + DevRev.updateFeatureConfiguration( + { + enableFrameCapture: true, + autoStartRecording: true, + prefersDialogMode: false, + alwaysUseRemoteConfig: true, + supportWidgetTheme: { prefersSystemTheme: true } + }, + () => alert('Frame capture enabled'), + (error) => alert('Failed to update feature configuration: ' + error) + ); + } + }, + { + text: 'Disable Frame Capture', + action: () => { + DevRev.updateFeatureConfiguration( + { + enableFrameCapture: false, + autoStartRecording: true, + prefersDialogMode: false, + alwaysUseRemoteConfig: true, + supportWidgetTheme: { prefersSystemTheme: true } + }, + () => alert('Frame capture disabled'), + (error) => alert('Failed to update feature configuration: ' + error) + ); + } + } + ] + }, + { + title: 'Error Capture', + list: [ + { + text: 'Capture Error', + action: () => { + const error = new Error('Simulated handled error for testing'); + DevRev.captureError( + error, + 'test-error', + () => alert('Error captured successfully'), + (err) => alert('Failed to capture error: ' + err) + ); + } + } + ] + }, { title: 'On-Demand Session', list: [