Skip to content

Releases: Countly/countly-sdk-react-native-bridge

26.1.0-np

04 May 09:18

Choose a tag to compare

  • Added a new Countly.sessions interface for manual session control:

    • beginSession()
    • updateSession()
    • endSession()
  • Added a new Countly.remoteConfig interface with:

    • update()
    • updateForKeysOnly(keyNames)
    • updateExceptKeys(keyNames)
    • getValue(keyName)
    • clearValues()
  • Added a new Countly.views interface with:

    • startAutoStoppedView(viewName, segmentation?)
    • startView(viewName, segmentation?)
    • stopViewWithName(viewName, segmentation?)
    • stopViewWithID(viewID, segmentation?)
    • stopAllViews(segmentation?)
    • pauseViewWithID(viewID)
    • resumeViewWithID(viewID)
    • addSegmentationToViewWithID(viewID, segmentation)
    • addSegmentationToViewWithName(viewName, segmentation)
    • setGlobalViewSegmentation(segmentation?)
    • updateGlobalViewSegmentation(segmentation)
  • Deprecated root-level session methods in favor of Countly.sessions:

    • Countly.startSession()
    • Countly.updateSession()
    • Countly.endSession()
  • Deprecated root-level remote config methods in favor of Countly.remoteConfig:

    • Countly.remoteConfigUpdate(...)
    • Countly.updateRemoteConfigForKeysOnly(...)
    • Countly.updateRemoteConfigExceptKeys(...)
    • Countly.getRemoteConfigValueForKey(...)
    • Countly.getRemoteConfigValueForKeyP(...)
    • Countly.remoteConfigClearValues()
  • Deprecated root-level view recording in favor of Countly.views.startAutoStoppedView(...):

    • Countly.recordView(...)
  • Deprecated legacy feedback shortcut helpers in favor of the newer direct present APIs:

    • Countly.feedback.showNPS(...) -> Countly.feedback.presentNPS(...)
    • Countly.feedback.showSurvey(...) -> Countly.feedback.presentSurvey(...)
    • Countly.feedback.showRating(...) -> Countly.feedback.presentRating(...)
  • Added Countly.remoteConfig.getValue(keyName) as the async replacement for the older root-level remote config getters. It returns null when a value is missing.

  • Added Countly.addCustomNetworkRequestHeaders(...) for runtime request header updates.

  • Added Countly.content.previewContent(contentId) for direct content previews.

  • Added Countly.webViewDisplayOption constants and .content.setWebViewDisplayOption(...) for controlling content and feedback presentation.

  • Added direct Countly.feedback.presentNPS(...), Countly.feedback.presentSurvey(...), and Countly.feedback.presentRating(...) helpers backed by the latest native feedback APIs.

  • Added Countly.deviceId.changeID(newDeviceID, merge) to the device ID interface for explicit merge control after removing the old root-level Countly.changeDeviceId(...) API.

  • Added init config options for manual session control, hybrid manual session mode, automatic view tracking, global view segmentation, custom network request headers, and disabling auto view restart.

    • enableManualSessionControl()
    • enableManualSessionControlHybridMode()
    • enableAutomaticViewTracking()
    • setAutomaticViewTrackingExclusionList(automaticViewTrackingExclusionList)
    • setGlobalViewSegmentation(globalViewSegmentation)
    • addCustomNetworkRequestHeaders(customHeaderValues)
    • disableViewRestartForManualRecording()
  • Mitigated an issue where the new remote config interface could reject on normal runtime conditions such as missing values, invalid input, or use before SDK initialization. These calls now log and return without crashing the app.

  • Mitigated an issue where Countly.initWithConfig(...) could preserve an empty deviceID under the wrong field name instead of clearing the init payload value.

  • Mitigated an issue where allowedIntentPackageNames could be dropped from init config serialization unless allowedIntentClassNames was also provided.

  • Mitigated an inconsistency where Countly.deviceId.setID(Countly.TemporaryDeviceIDString) did not route temporary-device-ID mode through the dedicated native handling on Android, and now does so explicitly on both Android and iOS.

    • Removed Countly.init(...). Use Countly.initWithConfig(countlyConfig).
    • Removed Countly.hasBeenCalledOnStart(). No direct replacement.
    • Removed Countly.sendEvent(...). Use Countly.events.recordEvent(...).
    • Removed Countly.pushTokenType(...). Use CountlyConfig.setPushTokenType(...) and CountlyConfig.setPushNotificationChannelInformation(...).
    • Removed Countly.configureIntentRedirectionCheck(...). Use CountlyConfig.configureIntentRedirectionCheck(...).
    • Removed Countly.start() and Countly.stop(). No direct replacement; automatic session tracking is enabled by default. For manual control use Countly.sessions.beginSession(), Countly.sessions.updateSession(), and Countly.sessions.endSession().
    • Removed Countly.enableLogging() and Countly.disableLogging(). Use Countly.setLoggingEnabled(...).
    • Removed Countly.setLocationInit(...). Use CountlyConfig.setLocation(...).
    • Removed Countly.getCurrentDeviceId(). Use Countly.deviceId.getID().
    • Removed Countly.getDeviceIDType(). Use Countly.deviceId.getType().
    • Removed Countly.changeDeviceId(...). Use Countly.deviceId.setID(...) for automatic merge selection or Countly.deviceId.changeID(..., merge) for explicit merge control.
    • Removed Countly.enableCrashReporting(). Use CountlyConfig.enableCrashReporting() with Countly.initWithConfig(...).
    • Removed Countly.enableParameterTamperingProtection(...). Use CountlyConfig.enableParameterTamperingProtection(...).
    • Removed Countly.startEvent(...), Countly.cancelEvent(...), and Countly.endEvent(...). Use Countly.events.startEvent(...), Countly.events.cancelEvent(...), and Countly.events.endEvent(...).
    • Removed Countly.setRequiresConsent(...). Use CountlyConfig.setRequiresConsent(...).
    • Removed Countly.giveConsentInit(...). Use CountlyConfig.giveConsent(...).
    • Removed Countly.setStarRatingDialogTexts(...). Use CountlyConfig.setStarRatingDialogTexts(...).
    • Removed Countly.getFeedbackWidgets(). Use Countly.feedback.getAvailableFeedbackWidgets().
    • Removed Countly.presentFeedbackWidgetObject(...). Use Countly.feedback.presentFeedbackWidget(...).
    • Removed Countly.enableApm() and CountlyConfig.enableApm(). Use the CountlyConfig.apm interface, including enableAppStartTimeTracking(), enableForegroundBackgroundTracking(), and enableManualAppLoadedTrigger() as needed.
    • Removed Countly.enableAttribution(...) and Countly.recordAttributionID(...). Use Countly.recordIndirectAttribution(...).
    • Removed CountlyConfig.pushTokenType(...). Use CountlyConfig.setPushTokenType(...) and CountlyConfig.setPushNotificationChannelInformation(...).
  • Android specific changes:

    • Added disableGradualRequestCleaner() init config support.
    • Set the initial activity during SDK initialization to improve content and feedback presentation flows.
    • Ensured Android feedback, survey, NPS, and rating presentation runs on the UI thread to avoid WebView/dialog crashes when showing widgets from the React Native bridge.
    • Aligned the Android bridge with the current native SDK APIs for APM/crash config, preserved feedback widget version metadata for presentation, and allowed typed user-property values to pass through to the native user profile API.
  • iOS specific changes:

    • Added support for the latest manual session handling, custom request header, content preview, and safe-area content display APIs from the native SDK.
    • Aligned the user-profile bridge with the current Countly.user APIs for typed custom-property setters and forwarded custom user data during Countly.setUserData(...) and Countly.userDataBulk.setUserProperties(...).
    • ! Minor Breaking change ! : on iOS, custom fields passed through Countly.setUserData(...) and Countly.userDataBulk.setUserProperties(...) are now forwarded to the native SDK instead of being ignored by the bridge.
  • Updated the underlying Android SDK version to 26.1.2

  • Updated the underlying iOS SDK version to 26.1.1

26.1.0

04 May 09:17
0ccdc53

Choose a tag to compare

  • Added a new Countly.sessions interface for manual session control:

    • beginSession()
    • updateSession()
    • endSession()
  • Added a new Countly.remoteConfig interface with:

    • update()
    • updateForKeysOnly(keyNames)
    • updateExceptKeys(keyNames)
    • getValue(keyName)
    • clearValues()
  • Added a new Countly.views interface with:

    • startAutoStoppedView(viewName, segmentation?)
    • startView(viewName, segmentation?)
    • stopViewWithName(viewName, segmentation?)
    • stopViewWithID(viewID, segmentation?)
    • stopAllViews(segmentation?)
    • pauseViewWithID(viewID)
    • resumeViewWithID(viewID)
    • addSegmentationToViewWithID(viewID, segmentation)
    • addSegmentationToViewWithName(viewName, segmentation)
    • setGlobalViewSegmentation(segmentation?)
    • updateGlobalViewSegmentation(segmentation)
  • Deprecated root-level session methods in favor of Countly.sessions:

    • Countly.startSession()
    • Countly.updateSession()
    • Countly.endSession()
  • Deprecated root-level remote config methods in favor of Countly.remoteConfig:

    • Countly.remoteConfigUpdate(...)
    • Countly.updateRemoteConfigForKeysOnly(...)
    • Countly.updateRemoteConfigExceptKeys(...)
    • Countly.getRemoteConfigValueForKey(...)
    • Countly.getRemoteConfigValueForKeyP(...)
    • Countly.remoteConfigClearValues()
  • Deprecated root-level view recording in favor of Countly.views.startAutoStoppedView(...):

    • Countly.recordView(...)
  • Deprecated legacy feedback shortcut helpers in favor of the newer direct present APIs:

    • Countly.feedback.showNPS(...) -> Countly.feedback.presentNPS(...)
    • Countly.feedback.showSurvey(...) -> Countly.feedback.presentSurvey(...)
    • Countly.feedback.showRating(...) -> Countly.feedback.presentRating(...)
  • Added Countly.remoteConfig.getValue(keyName) as the async replacement for the older root-level remote config getters. It returns null when a value is missing.

  • Added Countly.addCustomNetworkRequestHeaders(...) for runtime request header updates.

  • Added Countly.content.previewContent(contentId) for direct content previews.

  • Added Countly.webViewDisplayOption constants and .content.setWebViewDisplayOption(...) for controlling content and feedback presentation.

  • Added direct Countly.feedback.presentNPS(...), Countly.feedback.presentSurvey(...), and Countly.feedback.presentRating(...) helpers backed by the latest native feedback APIs.

  • Added Countly.deviceId.changeID(newDeviceID, merge) to the device ID interface for explicit merge control after removing the old root-level Countly.changeDeviceId(...) API.

  • Added init config options for manual session control, hybrid manual session mode, automatic view tracking, global view segmentation, custom network request headers, and disabling auto view restart.

    • enableManualSessionControl()
    • enableManualSessionControlHybridMode()
    • enableAutomaticViewTracking()
    • setAutomaticViewTrackingExclusionList(automaticViewTrackingExclusionList)
    • setGlobalViewSegmentation(globalViewSegmentation)
    • addCustomNetworkRequestHeaders(customHeaderValues)
    • disableViewRestartForManualRecording()
  • Mitigated an issue where the new remote config interface could reject on normal runtime conditions such as missing values, invalid input, or use before SDK initialization. These calls now log and return without crashing the app.

  • Mitigated an issue where Countly.initWithConfig(...) could preserve an empty deviceID under the wrong field name instead of clearing the init payload value.

  • Mitigated an issue where allowedIntentPackageNames could be dropped from init config serialization unless allowedIntentClassNames was also provided.

  • Mitigated an inconsistency where Countly.deviceId.setID(Countly.TemporaryDeviceIDString) did not route temporary-device-ID mode through the dedicated native handling on Android, and now does so explicitly on both Android and iOS.

    • Removed Countly.init(...). Use Countly.initWithConfig(countlyConfig).
    • Removed Countly.hasBeenCalledOnStart(). No direct replacement.
    • Removed Countly.sendEvent(...). Use Countly.events.recordEvent(...).
    • Removed Countly.pushTokenType(...). Use CountlyConfig.setPushTokenType(...) and CountlyConfig.setPushNotificationChannelInformation(...).
    • Removed Countly.configureIntentRedirectionCheck(...). Use CountlyConfig.configureIntentRedirectionCheck(...).
    • Removed Countly.start() and Countly.stop(). No direct replacement; automatic session tracking is enabled by default. For manual control use Countly.sessions.beginSession(), Countly.sessions.updateSession(), and Countly.sessions.endSession().
    • Removed Countly.enableLogging() and Countly.disableLogging(). Use Countly.setLoggingEnabled(...).
    • Removed Countly.setLocationInit(...). Use CountlyConfig.setLocation(...).
    • Removed Countly.getCurrentDeviceId(). Use Countly.deviceId.getID().
    • Removed Countly.getDeviceIDType(). Use Countly.deviceId.getType().
    • Removed Countly.changeDeviceId(...). Use Countly.deviceId.setID(...) for automatic merge selection or Countly.deviceId.changeID(..., merge) for explicit merge control.
    • Removed Countly.enableCrashReporting(). Use CountlyConfig.enableCrashReporting() with Countly.initWithConfig(...).
    • Removed Countly.enableParameterTamperingProtection(...). Use CountlyConfig.enableParameterTamperingProtection(...).
    • Removed Countly.startEvent(...), Countly.cancelEvent(...), and Countly.endEvent(...). Use Countly.events.startEvent(...), Countly.events.cancelEvent(...), and Countly.events.endEvent(...).
    • Removed Countly.setRequiresConsent(...). Use CountlyConfig.setRequiresConsent(...).
    • Removed Countly.giveConsentInit(...). Use CountlyConfig.giveConsent(...).
    • Removed Countly.setStarRatingDialogTexts(...). Use CountlyConfig.setStarRatingDialogTexts(...).
    • Removed Countly.getFeedbackWidgets(). Use Countly.feedback.getAvailableFeedbackWidgets().
    • Removed Countly.presentFeedbackWidgetObject(...). Use Countly.feedback.presentFeedbackWidget(...).
    • Removed Countly.enableApm() and CountlyConfig.enableApm(). Use the CountlyConfig.apm interface, including enableAppStartTimeTracking(), enableForegroundBackgroundTracking(), and enableManualAppLoadedTrigger() as needed.
    • Removed Countly.enableAttribution(...) and Countly.recordAttributionID(...). Use Countly.recordIndirectAttribution(...).
    • Removed CountlyConfig.pushTokenType(...). Use CountlyConfig.setPushTokenType(...) and CountlyConfig.setPushNotificationChannelInformation(...).
  • Android specific changes:

    • Added disableGradualRequestCleaner() init config support.
    • Set the initial activity during SDK initialization to improve content and feedback presentation flows.
    • Ensured Android feedback, survey, NPS, and rating presentation runs on the UI thread to avoid WebView/dialog crashes when showing widgets from the React Native bridge.
    • Aligned the Android bridge with the current native SDK APIs for APM/crash config, preserved feedback widget version metadata for presentation, and allowed typed user-property values to pass through to the native user profile API.
  • iOS specific changes:

    • Added support for the latest manual session handling, custom request header, content preview, and safe-area content display APIs from the native SDK.
    • Aligned the user-profile bridge with the current Countly.user APIs for typed custom-property setters and forwarded custom user data during Countly.setUserData(...) and Countly.userDataBulk.setUserProperties(...).
    • ! Minor Breaking change ! : on iOS, custom fields passed through Countly.setUserData(...) and Countly.userDataBulk.setUserProperties(...) are now forwarded to the native SDK instead of being ignored by the bridge.
  • Updated the underlying Android SDK version to 26.1.2

  • Updated the underlying iOS SDK version to 26.1.1

25.4.1-np

30 Sep 09:27

Choose a tag to compare

  • Improved Content display mechanics.

  • Added "setRequestTimeoutDuration" init config parameter to change request timeout duration in seconds.

  • Added a new function "recordMetrics(metricsOverride)" to send a manual metrics requests.

  • Added a new Consent option "metrics" for controlling "recordMetrics" method. (This has no effect on Session metrics.)

  • Added event listener calls for new architecture (thanks @j-q-in-berlin)

  • Mitigated an issue in SDK limits config class initialization (thanks @albertlaiuste)

  • Android specific changes:

    • Improved disk size calculation in crash reports.
    • Mitigated an issue that could have happened when navigating back from a Content.
    • Mitigated a persistency issue with init configuration provided SBS and its initial state.
    • Mitigated an issue where SBS could have been fetched twice.
  • iOS specific changes:

    • Improved CPU architecture detection capabilities.
    • Added the ability to record reserved events.
    • Changed default log level from "Debug" to "Verbose".
    • Mitigated an SBS issue while in temporary ID mode.
    • Mitigated a possible Health Check network log recording issue.
  • Updated the underlying Android SDK version to 25.4.4

  • Updated the underlying iOS SDK version to 25.4.6

25.4.1

30 Sep 09:28
047037c

Choose a tag to compare

  • Improved Content display mechanics.

  • Added "setRequestTimeoutDuration" init config parameter to change request timeout duration in seconds.

  • Added a new function "recordMetrics(metricsOverride)" to send a manual metrics requests.

  • Added a new Consent option "metrics" for controlling "recordMetrics" method. (This has no effect on Session metrics.)

  • Added event listener calls for new architecture (thanks @j-q-in-berlin)

  • Mitigated an issue in SDK limits config class initialization (thanks @albertlaiuste)

  • Android specific changes:

    • Improved disk size calculation in crash reports.
    • Mitigated an issue that could have happened when navigating back from a Content.
    • Mitigated a persistency issue with init configuration provided SBS and its initial state.
    • Mitigated an issue where SBS could have been fetched twice.
  • iOS specific changes:

    • Improved CPU architecture detection capabilities.
    • Added the ability to record reserved events.
    • Changed default log level from "Debug" to "Verbose".
    • Mitigated an SBS issue while in temporary ID mode.
    • Mitigated a possible Health Check network log recording issue.
  • Updated the underlying Android SDK version to 25.4.4

  • Updated the underlying iOS SDK version to 25.4.6

25.4.0-np

24 Jun 14:45

Choose a tag to compare

  • ! Minor breaking change ! The SDK now exclusively uses random UUIDs for device id generation instead of platform specific OpenUDID or IDFV

  • ! Minor breaking change ! Server Configuration is now enabled by default. Changes made on SDK Manager > SDK Configuration on your server will affect SDK behavior directly

  • Added refreshContentZone() method for manual refresh of content zone

  • Added disableBackoffMechanism() init config method for disabling request backoff logic

  • Added disableSDKBehaviorSettingsUpdates() init config method for disabling server config sync requests

  • Added setSDKBehaviorSettings(settingsObject: object) init config method for providing server config settings

  • Added New Architecture (Turbo Modules) support

  • Added fullscreen support for feedback widgets

  • Added support for SDK health checks in iOS

  • Added a built-in backoff mechanism when server responses are slow

  • Mitigated an issue that could occur while serializing events to improve stability, performance and memory usage in iOS

  • Mitigated an issue where the safe area resolution was not correctly calculated for the content zone on certain iOS devices

  • Updated the underlying Android SDK version to 25.4.2

  • Updated the underlying iOS SDK version to 25.4.3

25.4.0

24 Jun 14:46
b509586

Choose a tag to compare

  • ! Minor breaking change ! The SDK now exclusively uses random UUIDs for device id generation instead of platform specific OpenUDID or IDFV

  • ! Minor breaking change ! Server Configuration is now enabled by default. Changes made on SDK Manager > SDK Configuration on your server will affect SDK behavior directly

  • Added refreshContentZone() method for manual refresh of content zone

  • Added disableBackoffMechanism() init config method for disabling request backoff logic

  • Added disableSDKBehaviorSettingsUpdates() init config method for disabling server config sync requests

  • Added setSDKBehaviorSettings(settingsObject: object) init config method for providing server config settings

  • Added New Architecture (Turbo Modules) support

  • Added fullscreen support for feedback widgets

  • Added support for SDK health checks in iOS

  • Added a built-in backoff mechanism when server responses are slow

  • Mitigated an issue that caused PN message data collision if two message with same ID was received in Android

  • Mitigated an issue that could occur while serializing events to improve stability, performance and memory usage in iOS

  • Mitigated an issue where the safe area resolution was not correctly calculated for the content zone on certain iOS devices

  • Updated the underlying Android SDK version to 25.4.2

  • Updated the underlying iOS SDK version to 25.4.3

25.1.2-np

07 Mar 13:54

Choose a tag to compare

  • Mitigated an issue where the visibility tracking could have been enabled by default

  • Underlying Android SDK version is 25.1.1

  • Underlying iOS SDK version is 25.1.1

25.1.2

07 Mar 13:54
0d97a67

Choose a tag to compare

  • Mitigated an issue where the visibility tracking could have been enabled by default

  • Underlying Android SDK version is 25.1.1

  • Underlying iOS SDK version is 25.1.1

25.1.1-np

05 Feb 14:30

Choose a tag to compare

  • Improved content size management of content blocks.

  • Added init time config options:

    • .content.setZoneTimerInterval to set the frequency of content update calls in seconds.
    • .content.setGlobalContentCallback to provide a callback that is called when a content is closed.
  • Android Specific Changes:

    • Improved the custom CertificateTrustManager to handle domain-specific configurations by supporting hostname-aware checkServerTrusted calls.
    • Mitigated an issue where after closing a content, they were not being fetched again.
    • Mitigated an issue where, the action bar was overlapping with the content display.
  • iOS Specific Changes:

    • Added dynamic resizing functionality for the content zone
    • Fixed an issue where the build UUID and executable name were missing from crash reports
  • Updated the underlying Android SDK version to 25.1.1

  • Updated the underlying iOS SDK version to 25.1.1

25.1.1

05 Feb 14:31
2b17367

Choose a tag to compare

  • Improved content size management of content blocks.

  • Added init time config options:

    • .content.setZoneTimerInterval to set the frequency of content update calls in seconds.
    • .content.setGlobalContentCallback to provide a callback that is called when a content is closed.
  • Android Specific Changes:

    • Improved the custom CertificateTrustManager to handle domain-specific configurations by supporting hostname-aware checkServerTrusted calls.
    • Mitigated an issue where after closing a content, they were not being fetched again.
    • Mitigated an issue where, the action bar was overlapping with the content display.
  • iOS Specific Changes:

    • Added dynamic resizing functionality for the content zone
    • Fixed an issue where the build UUID and executable name were missing from crash reports
  • Updated the underlying Android SDK version to 25.1.1

  • Updated the underlying iOS SDK version to 25.1.1