Skip Navigation

BlackBerry Dynamics SDK for React Native
version 12.0

The
BlackBerry Dynamics SDK for React Native
is open sourced and available on
GitHub
, along with developer documentation and sample apps, at https://github.com/blackberry/BlackBerry-Dynamics-React-Native-SDK.
New in this release
Feature
Description
Support for
BlackBerry Dynamics SDK
12.0
BlackBerry Dynamics SDK
for
iOS
and
Android
12.0 is now supported.
Support for
Play Integrity
attestation
Play Integrity
attestation is supported and added to the existing
SafetyNet
attestation library. For more information, see Implementing Play Integrity attestation for BlackBerry Dynamics apps.
The
BlackBerry Dynamics SDK for React Native
12.0 is not compatible with previous versions of the
SafetyNet
library.
BlackBerry Dynamics
apps must use the latest
SafetyNet
library distributed with the
BlackBerry Dynamics SDK for React Native
12.0 to support
Play Integrity
attestation. For more information, see the BlackBerry Dynamics SDK for Android API reference.
Enhancements to the <WebView /> UI component
The following APIs have been added to the <WebView /> UI component to enhance secure download functionality for Android:
  • showDownloadDirectory(): This method allows you to show the BBWebView Downloads user interface with a list of downloaded files from the Download directory.
  • getDownloadDirectoryPath(): This method allows you to get the path to the BBWebView Downloads directory in the secure file system.
For more information, see the BBWebView API documentation.
The WebViewBrowser sample app has also been updated.
Support
Feature
Description
Development requirements
  • macOS
    X
  • Windows 10
    (
    Android
    only)
  • Windows 11
    (
    Android
    only)
React Native
supported versions
  • 0.72.x
  • 0.71.x
  • 0.70.x
  • 0.69.x (This version is deprecated and will be removed in a future release.)
  • 0.68.x (This version is deprecated and will be removed in a future release.)
  • 0.67.x (This version is deprecated and will be removed in a future release.)
  • 0.66.x (This version is deprecated and will be removed in a future release.)
React Native
0.67.x and earlier requires Node.js version 12.x. and
Java
version 8.x.
React Native
0.68.x and later requires Node.js version 18.x. and
Java
version 11.x.
BlackBerry Dynamics SDK
supported versions
Features
Feature
Description
Integration with
BlackBerry Dynamics
Integration of the
BlackBerry Dynamics SDK
for
iOS
and
Android
into the
React Native
application is supported by the addition of the BlackBerry-Dynamics-for-React-Native-Base module. You can also integrate a locally downloaded version of
BlackBerry Dynamics SDK for iOS
into your
BlackBerry Dynamics
React Native
app.
Secure connectivity
  • XMLHttpRequest and fetch are secured in scope of the BlackBerry-Dynamics-for-React-Native-Networking module.
  • <WebView /> is secured in scope of the BlackBerry-Dynamics-for-React-Native-WebView UI component.
Secure storage
  • AsyncStorage is secured in the BlackBerry-Dynamics-for-React-Native-Async-Storage module.
  • SQLite is secured in the BlackBerry-Dynamics-for-React-Native-SQLite-Storage module.
Data leakage prevention (DLP)
No code work is required to support DLP for
iOS
and
Android
. Note the following:
  • On
    iOS
    , the <Text /> component, <TextInput /> component, and Clipboard API are secured by integrating
    BlackBerry Dynamics
    .
  • On
    Android
    , the following items are required:
    • The <Text /> component is secured in scope of the BlackBerry-Dynamics-for-React-Native-Text UI component.
    • The <TextInput /> component is secured in scope of the BlackBerry-Dynamics-for-React-Native-TextInput UI component.
    • The BlackBerry-Dynamics-for-React-Native-Clipboard module secures the Clipboard API on Android.
Inter-Container Communication (ICC)
ICC (also known as AppKinetics) provides service discovery, service consumption, and service providing capabilities for
BlackBerry Dynamics
React Native
apps and allows secure communication with other
BlackBerry Dynamics
apps. To implement some ICC capabilities in
BlackBerry Dynamics
React Native
apps, use the BlackBerry-Dynamics-for-React-Native-AppKinetics module.
Support for Yarn package manager
  • To add a
    BlackBerry Dynamics
    React Native
    module, run following command:
    $ yarn add
    <path_to_module>
  • To remove a
    BlackBerry Dynamics
    React Native
    module, run following command:
    $ yarn remove
    <path_to_module>
For more information, see the readme file for each module.
Importing a prepopulated SQLite database
You can use any of the methods detailed here to import a prepopulated SQLite database: Importing a prepopulated database. The third method is supported for
Android
only. For more information, see the readme file at https://github.com/blackberry/BlackBerry-Dynamics-React-Native-SDK.
Package contents
Feature
Description
Modules
  • BlackBerry-Dynamics-for-React-Native-Base automatically integrates the
    BlackBerry Dynamics SDK
    for
    iOS
    and
    Android
    into the React Native application.
  • BlackBerry-Dynamics-for-React-Native-Networking secures XMLHttpRequest and fetch APIs on
    Android
    . For more information, see React Native: Networking.
  • BlackBerry-Dynamics-for-React-Native-SQLite-Storage secures SQLite database usage, based on the react-native-sqlite-storage third-party module.
  • BlackBerry-Dynamics-for-React-Native-Async-Storage secures built-in AsyncStorage.
  • BlackBerry-Dynamics-for-React-Native-Clipboard secures the built-in Clipboard API.
  • BlackBerry-Dynamics-for-React-Native-AppKinetics provides the ability to use
    BlackBerry Dynamics
    app-based services within a
    BlackBerry Dynamics
    React Native app to securely communicate with other
    BlackBerry Dynamics
    apps in a process called Inter-Container Communication (ICC) or AppKinetics; also provides service discovery, service consumption, and service providing capabilities.
  • BlackBerry-Dynamics-for-React-Native-FileSystem secures the API for the react-native-fs module; the JavaScript API of this module is the same, but files and directories are now stored and managed within the
    BlackBerry Dynamics
    secure container.
  • BlackBerry-Dynamics-for-React-Native-Launcher allows you to integrate the
    BlackBerry Dynamics Launcher
    with your
    BlackBerry Dynamics
    React Native
    apps.
  • BlackBerry-Dynamics-for-React-Native-Application allows you to access information that is globally available to any
    BlackBerry Dynamics
    app.
UI components
  • BlackBerry-Dynamics-for-React-Native-Text enables data leakage protection (DLP) within UI components on
    Android
    .
  • BlackBerry-Dynamics-for-React-Native-TextInput enables DLP within UI components on
    Android
    .
  • BlackBerry-Dynamics-for-React-Native-WebView secures the built-in <WebView /> UI component to securely load public and enterprise resources within a WebView.
Sample apps
  • BasicNetworking provides examples of using fetch and XMLHttpRequest in different scenarios. This app covers different HTTP request types (GET, POST, PUT, DELETE, and so on), authentication types (basic auth, Digest, NTLM), and includes the ability to send different data types to the server and receive responses for different data types.
  • ClipboardTestApp demonstrates how to use the Clipboard API for data leakage prevention (DLP). It is possible to change the DLP policy on
    UEM
    and see how it affects the clipboard within the app. If DLP is enabled, clipboard data cannot be copied from a
    BlackBerry Dynamics
    app to a non-
    BlackBerry Dynamics
    app, and vice-versa.
  • DLP demonstrates how to use the <Text /> and <TextInput /> UI components together with the
    UEM
    DLP policy option. If DLP is on, it is not possible to perform cut-copy-paste operations to transfer data from
    BlackBerry Dynamics
    to non-
    BlackBerry Dynamics
    applications, and vice-versa.
  • SQLite demonstrates how to use a secure SQLite DB instance in a React Native app.
  • UnitTest runs Jasmine unit tests for fetch, XMLHttpRequest, Clipboard, AsyncStorage, SQLite, and AppKinetics in a React Native application.
  • WebViewBrowser demonstrates how to use the <WebView /> component in a React Native application.
  • FileSystem demonstrates how to use a secure FileSystem instance in a
    React Native
    app, how to manage files and directories, and how to upload and download files.
  • WebSocketClient and WebSocketServer demonstrate how to establish a connection to a WebSocket server using "ws://" or "wss://" protocols, how to send or receive text or binary data over a WebSocket connection, and how to close a WebSocket connection.
  • AppKinetics demonstrates how to use AppKinetics, or secure Inter-Container Communication (ICC), including sending and receiving files using ICC and creating secure email with
    BlackBerry Work
    or the native email client (if permitted).
  • Policy demonstrates how to retrieve a collection of app-specific configuration and policy settings. The retrieval of these settings happens during the method call or whenever settings are changed.

Fixed issues

When sending a file from
BlackBerry Work
using AppKinetics, if the Annotate file service was enabled, the Edit file service did not work properly. (GD-61620)

Known issues

Image content may not be visible on the
iOS
clipboard sample app. (GD-63121)
Flipper cannot be used with
BlackBerry Dynamics SDK for React Native
in debug configuration because it disables some
BlackBerry Dynamics
secure networking functionality. Flipper is disabled by default on
iOS
and
Android
. If your
BlackBerry Dynamics SDK for React Native
app does not use the secure connectivity feature (
BlackBerry-Dynamics-for-React-Native-Networking
module), you can enable Flipper by uncommenting the following:
  • On
    iOS
    : Uncomment the
    use_flipper!()
    line in Podfile.
  • On
    Android
    : Uncomment the
    initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
    line in MainApplication.java for React Native versions less than 71, or uncomment the
    ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
    line in MainApplication.java for React Native versions 71 and later.
When both default and secure SQLite libraries are linked to an
iOS
project, it can cause conflicts and unpredictable behavior.
Workaround:
Remove the
sqlite3
dependency in */node_modules/reactnative- webrtc/react-native-webrtc.podspec, and then run
pod install
again.
Apps targeting
Android
12 and higher are required to specify an explicit value for
android:exported
when the corresponding component has an intent filter defined. More details can be found here.
React Native
0.68 and higher supports Android 12+ by default by setting appropriate setting in AndroidManifest.xml. For
React Native
versions 0.67 and earlier,
android:exported
should be set manually.
React Native
for
iOS
projects using
Xcode
14.3 (14E222b) fails to build properly. This is a known issue with the
React Native
platform, and more details can be found here.
When loading the Metro server on
React Native
versions 0.72.0 or 0.72.1, a "Cannot read properties of undefined (reading 'addHelper')" error occurs.
Workaround:
Add the following devDependency to the project:
$ yarn add @babel/traverse@7.22.8 --dev
When creating a new
React Native
project on versions 0.72.5 or earlier, an error may occur when installing activesupport CocoaPods dependencies.
Workaround:
Create or update the gemfile in the root of your project with this dependency:
gem 'activesupport', '~> 7.0.8'
. Then, run the following commands:
$ bundle update activesupport $ bundle exec pod install
The same issue can occur when running Dynamics React Native sample apps. Make sure that version 7.0.8 of activesupport Ruby gem is installed locally:
gem uninstall activesupport --version 7.x.x gem install activesupport --version 7.0.8