diff --git a/CHANGELOG.md b/CHANGELOG.md index a698121..b3bf885 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,35 @@ 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.13] - 2026-11-11 + +### Added +- Added an abort recording API to discard the current session recording without uploading it. + +### Fixed +- [Android] Fixed ANRs on Android 10 and 11 caused by gesture detection during session recording. +- [Android] Fixed an issue with screenshot capture that could cause instability in session replays. +- [Android] Improved handling of low-memory conditions when saving screenshots during session recording. +- [iOS] Fixed an issue where session videos failed to upload when the app was killed rapidly. +- [iOS] Fixed an issue where auto-masking settings were not properly applied when toggled on or off through remote settings. + +## [2.3.12] - 2026-10-22 + +### Fixed +- [Android] Fixed an issue where dialogs were not captured correctly in session replays. +- [iOS] Fixed lag during session recording when screens are within navigation flows. +- [iOS] Fixed an intermittent "session not found" error when uploading a killed or terminated session. + +## [2.3.11] - 2026-10-07 + +### Added +- [Android] - Added support for session recording on Android 17 +- [iOS] - Session Replay now masks the on-screen keyboard area to avoid capturing sensitive input. + +### Fixed +- [Android] A user whose account was deleted on the backend is now re-identified automatically instead of failing subsequent requests. +- [iOS] Fixed a crash related to flushing of log entries. + ## [2.3.10] - 2026-09-03 ### Added diff --git a/README.md b/README.md index 5bacb7b..952de39 100644 --- a/README.md +++ b/README.md @@ -433,6 +433,9 @@ The DevRev SDK allows you to send custom analytic events by using a properties m DevRev.trackEvent(name: string, properties?: { [key: string]: string }) ``` +> [!NOTE] +> Event names must match the regular expression `^[a-zA-Z0-9_-]+$` — use only letters, digits, underscores, and hyphens. Names containing other characters are rejected. Keep event names and properties small: large payloads bloat the device's local memory and can lead to missed recordings. + ### Session analytics The DevRev SDK offers session analytics features to help you understand how users interact with your app. @@ -464,6 +467,7 @@ The session recording feature includes the following methods to control the reco |--------------------------------------------------------------------|-----------------------------------------------------------| |`DevRev.startRecording()` | Starts the session recording. | |`DevRev.stopRecording()` | Stops the session recording and uploads it to the portal. | +|`DevRev.abortRecording(autoStartOnNextLaunch = false)` | Ends the session recording and discards it without uploading. With `autoStartOnNextLaunch = true`, the next hot launch starts recording again. | |`DevRev.pauseRecording()` | Pauses the ongoing session recording. | |`DevRev.resumeRecording()` | Resumes a paused session recording. | |`DevRev.processAllOnDemandSessions()` | Stops the ongoing user recording and sends all on-demand sessions along with the current recording. | diff --git a/artifacts/devrev-sdk-react-native-2.3.13.tgz b/artifacts/devrev-sdk-react-native-2.3.13.tgz new file mode 100644 index 0000000..b8a9edd Binary files /dev/null and b/artifacts/devrev-sdk-react-native-2.3.13.tgz differ diff --git a/sample/expo/screens/SessionAnalyticsScreen.tsx b/sample/expo/screens/SessionAnalyticsScreen.tsx index ed2046d..8767196 100644 --- a/sample/expo/screens/SessionAnalyticsScreen.tsx +++ b/sample/expo/screens/SessionAnalyticsScreen.tsx @@ -26,6 +26,11 @@ const SessionMonitoringButtons = [ const SessionRecordingButtons = [ { text: 'Start Recording', onPress: DevRev.startRecording }, { text: 'Stop Recording', onPress: DevRev.stopRecording }, + { text: 'Abort Recording', onPress: () => DevRev.abortRecording() }, + { + text: 'Abort Recording (Auto-Start On)', + onPress: () => DevRev.abortRecording(true), + }, { text: 'Pause Recording', onPress: DevRev.pauseRecording }, { text: 'Resume Recording', onPress: DevRev.resumeRecording }, { diff --git a/sample/package.json b/sample/package.json index a309204..443ad05 100644 --- a/sample/package.json +++ b/sample/package.json @@ -10,7 +10,7 @@ "build:ios": "react-native build-ios --scheme DevRevSDKSample --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"" }, "dependencies": { - "@devrev/sdk-react-native": "^2.3.10", + "@devrev/sdk-react-native": "^2.3.13", "@notifee/react-native": "^9.1.3", "@react-native-community/cli-platform-ios": "^13.6.9", "@react-native-firebase/app": "^21.0.0", diff --git a/sample/react-native/src/screens/SessionAnalyticsScreen.tsx b/sample/react-native/src/screens/SessionAnalyticsScreen.tsx index baff469..fce2507 100644 --- a/sample/react-native/src/screens/SessionAnalyticsScreen.tsx +++ b/sample/react-native/src/screens/SessionAnalyticsScreen.tsx @@ -19,6 +19,11 @@ const SessionMonitoringButtons = [ const SessionRecordingButtons = [ { text: 'Start Recording', onPress: DevRev.startRecording }, { text: 'Stop Recording', onPress: DevRev.stopRecording }, + { text: 'Abort Recording', onPress: () => DevRev.abortRecording() }, + { + text: 'Abort Recording (Auto-Start On)', + onPress: () => DevRev.abortRecording(true), + }, { text: 'Pause Recording', onPress: DevRev.pauseRecording }, { text: 'Resume Recording', onPress: DevRev.resumeRecording }, {