diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv
index 2d12ca9ea..3baff5a5f 100644
--- a/LICENSE-3rdparty.csv
+++ b/LICENSE-3rdparty.csv
@@ -32,6 +32,8 @@ dev,react-native-webview,MIT,"Copyright (c) 2015-present, Facebook, Inc."
dev,react-test-renderer,MIT,"Copyright (c) Facebook, Inc. and its affiliates."
dev,typescript,Apache-2.0,"Copyright Microsoft Corporation"
dev,genversion,MIT,"Copyright (c) 2021 Akseli Palén"
+dev,@openfeature/core,Apache-2.0,"Copyright (c) The OpenFeature Authors"
+prod,@openfeature/web-sdk,Apache-2.0,"Copyright (c) The OpenFeature Authors"
prod,chokidar,MIT,"Copyright (c) 2012 Paul Miller (https://paulmillr.com), Elan Shanker"
prod,fast-glob,MIT,"Copyright (c) Denis Malinochkin"
prod,svgo,MIT,"Copyright (c) Kir Belevich"
diff --git a/benchmarks/android/app/build.gradle b/benchmarks/android/app/build.gradle
index 6e111a267..c674c588d 100644
--- a/benchmarks/android/app/build.gradle
+++ b/benchmarks/android/app/build.gradle
@@ -129,5 +129,5 @@ dependencies {
// Benchmark tools from dd-sdk-android are used for vitals recording
// Remember to bump thid alongside the main dd-sdk-android dependencies
- implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.4.0")
+ implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.5.0")
}
diff --git a/example-new-architecture/App.tsx b/example-new-architecture/App.tsx
index b5d9a8f58..517424501 100644
--- a/example-new-architecture/App.tsx
+++ b/example-new-architecture/App.tsx
@@ -9,10 +9,18 @@ import {
DdLogs,
DdTrace,
TrackingConsent,
+ DdFlags,
} from '@datadog/mobile-react-native';
-import React from 'react';
+import {DatadogOpenFeatureProvider} from '@datadog/mobile-react-native-openfeature';
+import {
+ OpenFeature,
+ OpenFeatureProvider,
+ useObjectFlagDetails,
+} from '@openfeature/react-sdk';
+import React, {Suspense} from 'react';
import type {PropsWithChildren} from 'react';
import {
+ ActivityIndicator,
SafeAreaView,
ScrollView,
StatusBar,
@@ -53,51 +61,62 @@ import {APPLICATION_ID, CLIENT_TOKEN, ENVIRONMENT} from './ddCredentials';
config.uploadFrequency = UploadFrequency.FREQUENT;
config.batchSize = BatchSize.SMALL;
-
+ // Initialize the Datadog SDK.
await DdSdkReactNative.initialize(config);
+
+ // Enable Datadog Flags feature.
+ await DdFlags.enable();
+
+ // Set the provider with OpenFeature.
+ const provider = new DatadogOpenFeatureProvider();
+ OpenFeature.setProvider(provider);
+
+ // Datadog SDK usage examples.
await DdRum.startView('main', 'Main');
setTimeout(async () => {
await DdRum.addTiming('one_second');
}, 1000);
await DdRum.addAction(RumActionType.CUSTOM, 'custom action');
+
await DdLogs.info('info log');
+
const spanId = await DdTrace.startSpan('test span');
await DdTrace.finishSpan(spanId);
})();
-type SectionProps = PropsWithChildren<{
- title: string;
-}>;
+function AppWithProviders() {
+ React.useEffect(() => {
+ const user = {
+ id: 'user-123',
+ favoriteFruit: 'apple',
+ };
+
+ OpenFeature.setContext({
+ targetingKey: user.id,
+ favoriteFruit: user.favoriteFruit,
+ });
+ }, []);
-function Section({children, title}: SectionProps): React.JSX.Element {
- const isDarkMode = useColorScheme() === 'dark';
return (
-
-
- {title}
-
-
- {children}
-
-
+
+
+
+ }>
+
+
+
+
);
}
function App(): React.JSX.Element {
- const isDarkMode = useColorScheme() === 'dark';
+ const greetingFlag = useObjectFlagDetails('rn-sdk-test-json-flag', {
+ greeting: 'Default greeting',
+ });
+ const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
@@ -108,14 +127,21 @@ function App(): React.JSX.Element {
barStyle={isDarkMode ? 'light-content' : 'dark-content'}
backgroundColor={backgroundStyle.backgroundColor}
/>
-
+
-
+
+
+
+ The title of this section is based on the{' '}
+ {greetingFlag.flagKey} feature
+ flag.{'\n\n'}
+ If it's different from "Default greeting", then it is coming from
+ the feature flag evaluation.{'\n\n'}
+ Evaluation reason is {greetingFlag.reason}.{'\n\n'}Inspect greetingFlag in{' '}
+ App.tsx for more evaluation
+ details.
+
+
Edit App.tsx to change this
screen and then come back to see your edits.
@@ -136,6 +162,36 @@ function App(): React.JSX.Element {
);
}
+type SectionProps = PropsWithChildren<{
+ title: string;
+}>;
+
+function Section({children, title}: SectionProps): React.JSX.Element {
+ const isDarkMode = useColorScheme() === 'dark';
+ return (
+
+
+ {title}
+
+
+ {children}
+
+
+ );
+}
+
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
@@ -155,4 +211,4 @@ const styles = StyleSheet.create({
},
});
-export default App;
+export default AppWithProviders;
diff --git a/example-new-architecture/ios/Podfile b/example-new-architecture/ios/Podfile
index f2f0fa09f..3c29ed272 100644
--- a/example-new-architecture/ios/Podfile
+++ b/example-new-architecture/ios/Podfile
@@ -26,7 +26,7 @@ target 'DdSdkReactNativeExample' do
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
-
+
post_install do |installer|
# https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
react_native_post_install(
diff --git a/example-new-architecture/ios/Podfile.lock b/example-new-architecture/ios/Podfile.lock
index 6e0553ece..a9bd4ab2b 100644
--- a/example-new-architecture/ios/Podfile.lock
+++ b/example-new-architecture/ios/Podfile.lock
@@ -1,22 +1,26 @@
PODS:
- boost (1.84.0)
- - DatadogCore (3.4.0):
- - DatadogInternal (= 3.4.0)
- - DatadogCrashReporting (3.4.0):
- - DatadogInternal (= 3.4.0)
- - PLCrashReporter (~> 1.12.0)
- - DatadogInternal (3.4.0)
- - DatadogLogs (3.4.0):
- - DatadogInternal (= 3.4.0)
- - DatadogRUM (3.4.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogCore (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogCrashReporting (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - KSCrash/Filters (= 2.5.0)
+ - KSCrash/Recording (= 2.5.0)
+ - DatadogFlags (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogInternal (3.5.0)
+ - DatadogLogs (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogRUM (3.5.0):
+ - DatadogInternal (= 3.5.0)
- DatadogSDKReactNative (3.0.0):
- - DatadogCore (= 3.4.0)
- - DatadogCrashReporting (= 3.4.0)
- - DatadogLogs (= 3.4.0)
- - DatadogRUM (= 3.4.0)
- - DatadogTrace (= 3.4.0)
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogCore (= 3.5.0)
+ - DatadogCrashReporting (= 3.5.0)
+ - DatadogFlags (= 3.5.0)
+ - DatadogLogs (= 3.5.0)
+ - DatadogRUM (= 3.5.0)
+ - DatadogTrace (= 3.5.0)
+ - DatadogWebViewTracking (= 3.5.0)
- DoubleConversion
- glog
- hermes-engine
@@ -38,12 +42,13 @@ PODS:
- ReactCommon/turbomodule/core
- Yoga
- DatadogSDKReactNative/Tests (3.0.0):
- - DatadogCore (= 3.4.0)
- - DatadogCrashReporting (= 3.4.0)
- - DatadogLogs (= 3.4.0)
- - DatadogRUM (= 3.4.0)
- - DatadogTrace (= 3.4.0)
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogCore (= 3.5.0)
+ - DatadogCrashReporting (= 3.5.0)
+ - DatadogFlags (= 3.5.0)
+ - DatadogLogs (= 3.5.0)
+ - DatadogRUM (= 3.5.0)
+ - DatadogTrace (= 3.5.0)
+ - DatadogWebViewTracking (= 3.5.0)
- DoubleConversion
- glog
- hermes-engine
@@ -64,11 +69,11 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - DatadogTrace (3.4.0):
- - DatadogInternal (= 3.4.0)
- - OpenTelemetrySwiftApi (= 1.13.1)
- - DatadogWebViewTracking (3.4.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogTrace (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - OpenTelemetry-Swift-Api (~> 2.3.0)
+ - DatadogWebViewTracking (3.5.0):
+ - DatadogInternal (= 3.5.0)
- DoubleConversion (1.1.6)
- fast_float (6.1.4)
- FBLazyVector (0.76.9)
@@ -77,8 +82,18 @@ PODS:
- hermes-engine (0.76.9):
- hermes-engine/Pre-built (= 0.76.9)
- hermes-engine/Pre-built (0.76.9)
- - OpenTelemetrySwiftApi (1.13.1)
- - PLCrashReporter (1.12.0)
+ - KSCrash/Core (2.5.0)
+ - KSCrash/Filters (2.5.0):
+ - KSCrash/Recording
+ - KSCrash/RecordingCore
+ - KSCrash/ReportingCore
+ - KSCrash/Recording (2.5.0):
+ - KSCrash/RecordingCore
+ - KSCrash/RecordingCore (2.5.0):
+ - KSCrash/Core
+ - KSCrash/ReportingCore (2.5.0):
+ - KSCrash/Core
+ - OpenTelemetry-Swift-Api (2.3.0)
- RCT-Folly (2024.10.14.00):
- boost
- DoubleConversion
@@ -1706,13 +1721,14 @@ SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- DatadogCore
- DatadogCrashReporting
+ - DatadogFlags
- DatadogInternal
- DatadogLogs
- DatadogRUM
- DatadogTrace
- DatadogWebViewTracking
- - OpenTelemetrySwiftApi
- - PLCrashReporter
+ - KSCrash
+ - OpenTelemetry-Swift-Api
- SocketRocket
EXTERNAL SOURCES:
@@ -1850,81 +1866,82 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
- DatadogCore: 8c384b6338c49534e43fdf7f9a0508b62bf1d426
- DatadogCrashReporting: 103bfb4077db2ccee1846f71e53712972732d3b7
- DatadogInternal: b0372935ad8dde5ad06960fe8d88c39b2cc92bcc
- DatadogLogs: 484bb1bfe0c9a7cb2a7d9733f61614e8ea7b2f3a
- DatadogRUM: 00069b27918e0ce4a9223b87b4bfa7929d6a0a1f
- DatadogSDKReactNative: 2028776f30b047eb0d118ff7efc15786a20d766f
- DatadogTrace: 852cb80f9370eb1321eb30a73c82c8e3d9e4e980
- DatadogWebViewTracking: 32dfeaf7aad47a605a689ed12e0d21ee8eb56141
+ DatadogCore: 4cbe2646591d2f96fb3188400863ec93ac411235
+ DatadogCrashReporting: e48da3f880a59d2aa2d04e5034e56507177e9d64
+ DatadogFlags: f8cf88371460d6c672abfd97fdc9af5be208f33b
+ DatadogInternal: 63308b529cd87fb2f99c5961d9ff13afb300a3aa
+ DatadogLogs: be538def1d5204e011f7952915ad0261014a0dd5
+ DatadogRUM: cffc65659ce29546fcc2639a74003135259548fc
+ DatadogSDKReactNative: ab55448d4e1fd641f08091f0329d2f1cfe0e5c78
+ DatadogTrace: 085e35f9e4889f82f8a747922c58ea4b19728720
+ DatadogWebViewTracking: 61b8344da898cbaccffc75bc1a17c86175e8573a
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45
fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11
- OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104
- PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2
- RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17
+ KSCrash: 80e1e24eaefbe5134934ae11ca8d7746586bc2ed
+ OpenTelemetry-Swift-Api: 3d77582ab6837a63b65bf7d2eacc57d8f2595edd
+ RCT-Folly: 7b4f73a92ad9571b9dbdb05bb30fad927fa971e1
RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83
RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716
RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f
React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d
React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea
- React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245
- React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c
- React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab
+ React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455
+ React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0
+ React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d
React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964
- React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e
- React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f
- React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b
- React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520
- React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576
+ React-defaultsnativemodule: 814830ccbc3fb08d67d0190e63b179ee4098c67b
+ React-domnativemodule: 270acf94bd0960b026bc3bfb327e703665d27fb4
+ React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b
+ React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb
+ React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f
React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c
- React-featureflagsnativemodule: 742a8325b3c821d2a1ca13a6d2a0fc72d04555e0
- React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121
- React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf
- React-idlecallbacksnativemodule: d61d9c9816131bf70d3d80cd04889fc625ee523f
- React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020
- React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6
- React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d
- React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893
- React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086
- React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f
- React-logger: c4052eb941cca9a097ef01b59543a656dc088559
- React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de
- React-microtasksnativemodule: d80ff86c8902872d397d9622f1a97aadcc12cead
+ React-featureflagsnativemodule: 0d7091ae344d6160c0557048e127897654a5c00f
+ React-graphics: cbebe910e4a15b65b0bff94a4d3ed278894d6386
+ React-hermes: ec18c10f5a69d49fb9b5e17ae95494e9ea13d4d3
+ React-idlecallbacksnativemodule: 6b84add48971da9c40403bd1860d4896462590f2
+ React-ImageManager: f2a4c01c2ccb2193e60a20c135da74c7ca4d36f2
+ React-jserrorhandler: 61d205b5a7cbc57fed3371dd7eed48c97f49fc64
+ React-jsi: 95f7676103137861b79b0f319467627bcfa629ee
+ React-jsiexecutor: 41e0fe87cda9ea3970ffb872ef10f1ff8dbd1932
+ React-jsinspector: 15578208796723e5c6f39069b6e8bf36863ef6e2
+ React-jsitracing: 3758cdb155ea7711f0e77952572ea62d90c69f0b
+ React-logger: dbca7bdfd4aa5ef69431362bde6b36d49403cb20
+ React-Mapbuffer: 6efad4a606c1fae7e4a93385ee096681ef0300dc
+ React-microtasksnativemodule: a645237a841d733861c70b69908ab4a1707b52ad
React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678
- React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e
- React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358
- React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc
+ React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22
+ React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d
+ React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9
React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342
- React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585
- React-RCTAppDelegate: 345a6f1b82abc578437df0ce7e9c48740eca827c
- React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6
- React-RCTFabric: 007b1a98201cc49b5bc6e1417d7fe3f6fc6e2b78
- React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8
- React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa
- React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7
- React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223
- React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf
- React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78
+ React-RCTAnimation: d8c82deebebe3aaf7a843affac1b57cb2dc073d4
+ React-RCTAppDelegate: 1774aa421a29a41a704ecaf789811ef73c4634b6
+ React-RCTBlob: 70a58c11a6a3500d1a12f2e51ca4f6c99babcff8
+ React-RCTFabric: 731cda82aed592aacce2d32ead69d78cde5d9274
+ React-RCTImage: 5e9d655ba6a790c31e3176016f9b47fd0978fbf0
+ React-RCTLinking: 2a48338252805091f7521eaf92687206401bdf2a
+ React-RCTNetwork: 0c1282b377257f6b1c81934f72d8a1d0c010e4c3
+ React-RCTSettings: f757b679a74e5962be64ea08d7865a7debd67b40
+ React-RCTText: e7d20c490b407d3b4a2daa48db4bcd8ec1032af2
+ React-RCTVibration: 8228e37144ca3122a91f1de16ba8e0707159cfec
React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6
- React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec
+ React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5
React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74
- React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd
- React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb
+ React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655
+ React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157
React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899
- React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385
- React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d
+ React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549
+ React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe
React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9
- React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f
- ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b
- ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9
+ React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e
+ ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c
+ ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a
-PODFILE CHECKSUM: d9d720c99b6fffec4dd489d565a544a358a52b83
+PODFILE CHECKSUM: 2046fc46dd3311048c09b49573c69b7aba2aab81
COCOAPODS: 1.16.2
diff --git a/example-new-architecture/package.json b/example-new-architecture/package.json
index b72ce69e4..83a990a29 100644
--- a/example-new-architecture/package.json
+++ b/example-new-architecture/package.json
@@ -9,6 +9,8 @@
},
"dependencies": {
"@datadog/mobile-react-native": "workspace:packages/core",
+ "@datadog/mobile-react-native-openfeature": "workspace:packages/react-native-openfeature",
+ "@openfeature/react-sdk": "^1.1.0",
"react": "18.3.1",
"react-native": "0.76.9"
},
diff --git a/example/ios/Podfile b/example/ios/Podfile
index 1736870c9..7484e6aa7 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -28,7 +28,7 @@ target 'ddSdkReactnativeExample' do
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
-
+
# pod 'DatadogSDKReactNative', :path => '../../packages/core/DatadogSDKReactNative.podspec', :testspecs => ['Tests']
post_install do |installer|
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index fb945f513..3d645cd7f 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1,34 +1,39 @@
PODS:
- boost (1.84.0)
- - DatadogCore (3.4.0):
- - DatadogInternal (= 3.4.0)
- - DatadogCrashReporting (3.4.0):
- - DatadogInternal (= 3.4.0)
- - PLCrashReporter (~> 1.12.0)
- - DatadogInternal (3.4.0)
- - DatadogLogs (3.4.0):
- - DatadogInternal (= 3.4.0)
- - DatadogRUM (3.4.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogCore (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogCrashReporting (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - KSCrash/Filters (= 2.5.0)
+ - KSCrash/Recording (= 2.5.0)
+ - DatadogFlags (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogInternal (3.5.0)
+ - DatadogLogs (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogRUM (3.5.0):
+ - DatadogInternal (= 3.5.0)
- DatadogSDKReactNative (3.0.0):
- - DatadogCore (= 3.4.0)
- - DatadogCrashReporting (= 3.4.0)
- - DatadogLogs (= 3.4.0)
- - DatadogRUM (= 3.4.0)
- - DatadogTrace (= 3.4.0)
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogCore (= 3.5.0)
+ - DatadogCrashReporting (= 3.5.0)
+ - DatadogFlags (= 3.5.0)
+ - DatadogLogs (= 3.5.0)
+ - DatadogRUM (= 3.5.0)
+ - DatadogTrace (= 3.5.0)
+ - DatadogWebViewTracking (= 3.5.0)
- React-Core
- DatadogSDKReactNative/Tests (3.0.0):
- - DatadogCore (= 3.4.0)
- - DatadogCrashReporting (= 3.4.0)
- - DatadogLogs (= 3.4.0)
- - DatadogRUM (= 3.4.0)
- - DatadogTrace (= 3.4.0)
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogCore (= 3.5.0)
+ - DatadogCrashReporting (= 3.5.0)
+ - DatadogFlags (= 3.5.0)
+ - DatadogLogs (= 3.5.0)
+ - DatadogRUM (= 3.5.0)
+ - DatadogTrace (= 3.5.0)
+ - DatadogWebViewTracking (= 3.5.0)
- React-Core
- DatadogSDKReactNativeSessionReplay (3.0.0):
- DatadogSDKReactNative
- - DatadogSessionReplay (= 3.4.0)
+ - DatadogSessionReplay (= 3.5.0)
- DoubleConversion
- glog
- hermes-engine
@@ -51,7 +56,7 @@ PODS:
- Yoga
- DatadogSDKReactNativeSessionReplay/Tests (3.0.0):
- DatadogSDKReactNative
- - DatadogSessionReplay (= 3.4.0)
+ - DatadogSessionReplay (= 3.5.0)
- DoubleConversion
- glog
- hermes-engine
@@ -74,24 +79,24 @@ PODS:
- ReactCommon/turbomodule/core
- Yoga
- DatadogSDKReactNativeWebView (3.0.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogInternal (= 3.5.0)
- DatadogSDKReactNative
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogWebViewTracking (= 3.5.0)
- React-Core
- DatadogSDKReactNativeWebView/Tests (3.0.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogInternal (= 3.5.0)
- DatadogSDKReactNative
- - DatadogWebViewTracking (= 3.4.0)
+ - DatadogWebViewTracking (= 3.5.0)
- React-Core
- react-native-webview
- React-RCTText
- - DatadogSessionReplay (3.4.0):
- - DatadogInternal (= 3.4.0)
- - DatadogTrace (3.4.0):
- - DatadogInternal (= 3.4.0)
- - OpenTelemetrySwiftApi (= 1.13.1)
- - DatadogWebViewTracking (3.4.0):
- - DatadogInternal (= 3.4.0)
+ - DatadogSessionReplay (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - DatadogTrace (3.5.0):
+ - DatadogInternal (= 3.5.0)
+ - OpenTelemetry-Swift-Api (~> 2.3.0)
+ - DatadogWebViewTracking (3.5.0):
+ - DatadogInternal (= 3.5.0)
- DoubleConversion (1.1.6)
- fast_float (6.1.4)
- FBLazyVector (0.76.9)
@@ -101,8 +106,18 @@ PODS:
- hermes-engine/Pre-built (= 0.76.9)
- hermes-engine/Pre-built (0.76.9)
- HMSegmentedControl (1.5.6)
- - OpenTelemetrySwiftApi (1.13.1)
- - PLCrashReporter (1.12.0)
+ - KSCrash/Core (2.5.0)
+ - KSCrash/Filters (2.5.0):
+ - KSCrash/Recording
+ - KSCrash/RecordingCore
+ - KSCrash/ReportingCore
+ - KSCrash/Recording (2.5.0):
+ - KSCrash/RecordingCore
+ - KSCrash/RecordingCore (2.5.0):
+ - KSCrash/Core
+ - KSCrash/ReportingCore (2.5.0):
+ - KSCrash/Core
+ - OpenTelemetry-Swift-Api (2.3.0)
- RCT-Folly (2024.10.14.00):
- boost
- DoubleConversion
@@ -1824,6 +1839,7 @@ SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- DatadogCore
- DatadogCrashReporting
+ - DatadogFlags
- DatadogInternal
- DatadogLogs
- DatadogRUM
@@ -1831,8 +1847,8 @@ SPEC REPOS:
- DatadogTrace
- DatadogWebViewTracking
- HMSegmentedControl
- - OpenTelemetrySwiftApi
- - PLCrashReporter
+ - KSCrash
+ - OpenTelemetry-Swift-Api
- SocketRocket
EXTERNAL SOURCES:
@@ -1988,17 +2004,18 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
- DatadogCore: 8c384b6338c49534e43fdf7f9a0508b62bf1d426
- DatadogCrashReporting: 103bfb4077db2ccee1846f71e53712972732d3b7
- DatadogInternal: b0372935ad8dde5ad06960fe8d88c39b2cc92bcc
- DatadogLogs: 484bb1bfe0c9a7cb2a7d9733f61614e8ea7b2f3a
- DatadogRUM: 00069b27918e0ce4a9223b87b4bfa7929d6a0a1f
- DatadogSDKReactNative: 94f17b16c05b0723923afb82ef8e51acb9609614
- DatadogSDKReactNativeSessionReplay: 9707e737f3ef4591a972b76e6f061619279b0958
- DatadogSDKReactNativeWebView: 8a524987010728a36a249785e823722746ce8b16
- DatadogSessionReplay: 462a3a2e39e9e2193528cf572c8d1acfd6cdace1
- DatadogTrace: 852cb80f9370eb1321eb30a73c82c8e3d9e4e980
- DatadogWebViewTracking: 32dfeaf7aad47a605a689ed12e0d21ee8eb56141
+ DatadogCore: 4cbe2646591d2f96fb3188400863ec93ac411235
+ DatadogCrashReporting: e48da3f880a59d2aa2d04e5034e56507177e9d64
+ DatadogFlags: f8cf88371460d6c672abfd97fdc9af5be208f33b
+ DatadogInternal: 63308b529cd87fb2f99c5961d9ff13afb300a3aa
+ DatadogLogs: be538def1d5204e011f7952915ad0261014a0dd5
+ DatadogRUM: cffc65659ce29546fcc2639a74003135259548fc
+ DatadogSDKReactNative: bf3df9195b39491ba37cea90c3924d807ae60036
+ DatadogSDKReactNativeSessionReplay: 701ca8bfed785f9046b6defd779e0e23e43ce944
+ DatadogSDKReactNativeWebView: 61b027a096421adc7288f286d479a2344246f4bd
+ DatadogSessionReplay: eea291df0135ec792177be1ffc4951750a66a011
+ DatadogTrace: 085e35f9e4889f82f8a747922c58ea4b19728720
+ DatadogWebViewTracking: 61b8344da898cbaccffc75bc1a17c86175e8573a
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45
@@ -2006,74 +2023,74 @@ SPEC CHECKSUMS:
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11
HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
- OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104
- PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2
- RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17
+ KSCrash: 80e1e24eaefbe5134934ae11ca8d7746586bc2ed
+ OpenTelemetry-Swift-Api: 3d77582ab6837a63b65bf7d2eacc57d8f2595edd
+ RCT-Folly: 7b4f73a92ad9571b9dbdb05bb30fad927fa971e1
RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83
RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716
RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f
React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d
React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea
- React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245
- React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c
- React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab
+ React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455
+ React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0
+ React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d
React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964
- React-defaultsnativemodule: 21f216e8db975897eb32b5f13247f5bbfaa97f41
- React-domnativemodule: 19270ad4b8d33312838d257f24731a0026809d49
- React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b
- React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520
- React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576
+ React-defaultsnativemodule: a965cb39fb0a79276ab611793d39f52e59a9a851
+ React-domnativemodule: d647f94e503c62c44f54291334b1aa22a30fa08b
+ React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b
+ React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb
+ React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f
React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c
- React-featureflagsnativemodule: 3a8731d8fd9f755be57e00d9fa8a7f92aa77e87d
- React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121
- React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf
- React-idlecallbacksnativemodule: 9a2c5b5c174c0c476f039bedc1b9497a8272133e
- React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020
- React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6
- React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d
- React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893
- React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086
- React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f
- React-logger: c4052eb941cca9a097ef01b59543a656dc088559
- React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de
- React-microtasksnativemodule: 5c3d795318c22ab8df55100e50b151384a4a60b3
- react-native-crash-tester: 48bde9d6f5256c61ef2e0c52dfc74256b26e55eb
- react-native-safe-area-context: e134b241010ebe2aacdcea013565963d13826faa
- react-native-webview: 2ea635bc43fd8a4b89de61133e8cc0607084e9f8
+ React-featureflagsnativemodule: 95a02d895475de8ace78fedd76143866838bb720
+ React-graphics: cbebe910e4a15b65b0bff94a4d3ed278894d6386
+ React-hermes: ec18c10f5a69d49fb9b5e17ae95494e9ea13d4d3
+ React-idlecallbacksnativemodule: 0c1ae840cc5587197cd926a3cb76828ad059d116
+ React-ImageManager: f2a4c01c2ccb2193e60a20c135da74c7ca4d36f2
+ React-jserrorhandler: 61d205b5a7cbc57fed3371dd7eed48c97f49fc64
+ React-jsi: 95f7676103137861b79b0f319467627bcfa629ee
+ React-jsiexecutor: 41e0fe87cda9ea3970ffb872ef10f1ff8dbd1932
+ React-jsinspector: 15578208796723e5c6f39069b6e8bf36863ef6e2
+ React-jsitracing: 3758cdb155ea7711f0e77952572ea62d90c69f0b
+ React-logger: dbca7bdfd4aa5ef69431362bde6b36d49403cb20
+ React-Mapbuffer: 6efad4a606c1fae7e4a93385ee096681ef0300dc
+ React-microtasksnativemodule: 8732b71aa66045da4bb341ddee1bb539f71e5f38
+ react-native-crash-tester: 3ffaa64141427ca362079cb53559fe9a532487ae
+ react-native-safe-area-context: 04803a01f39f31cc6605a5531280b477b48f8a88
+ react-native-webview: 1e12de2fad74c17b4f8b1b53ebd1e3baa0148d71
React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678
- React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e
- React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358
- React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc
+ React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22
+ React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d
+ React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9
React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342
- React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585
- React-RCTAppDelegate: 1e5b43833e3e36e9fa34eec20be98174bc0e14a2
- React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6
- React-RCTFabric: bd906861a4e971e21d8df496c2d8f3ca6956f840
- React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8
- React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa
- React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7
- React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223
- React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf
- React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78
+ React-RCTAnimation: d8c82deebebe3aaf7a843affac1b57cb2dc073d4
+ React-RCTAppDelegate: 6c0377d9c4058773ea7073bb34bb9ebd6ddf5a84
+ React-RCTBlob: 70a58c11a6a3500d1a12f2e51ca4f6c99babcff8
+ React-RCTFabric: 7eb6dd2c8fda98cb860a572e3f4e4eb60d62c89e
+ React-RCTImage: 5e9d655ba6a790c31e3176016f9b47fd0978fbf0
+ React-RCTLinking: 2a48338252805091f7521eaf92687206401bdf2a
+ React-RCTNetwork: 0c1282b377257f6b1c81934f72d8a1d0c010e4c3
+ React-RCTSettings: f757b679a74e5962be64ea08d7865a7debd67b40
+ React-RCTText: e7d20c490b407d3b4a2daa48db4bcd8ec1032af2
+ React-RCTVibration: 8228e37144ca3122a91f1de16ba8e0707159cfec
React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6
- React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec
+ React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5
React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74
- React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd
- React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb
+ React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655
+ React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157
React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899
- React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385
- React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d
+ React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549
+ React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe
React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9
- React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f
- ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b
- ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9
- ReactNativeNavigation: 445f86273eb245d15b14023ee4ef9d6e4f891ad6
- RNCAsyncStorage: b44e8a4e798c3e1f56bffccd0f591f674fb9198f
- RNGestureHandler: cb711d56ee3b03a5adea1d38324d4459ab55653f
- RNScreens: f75b26fd4777848c216e27b0a09e1bf9c9f4760a
+ React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e
+ ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c
+ ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd
+ ReactNativeNavigation: 50c1eef68b821e7265eff3a391d27ed18fdce459
+ RNCAsyncStorage: 23e56519cc41d3bade3c8d4479f7760cb1c11996
+ RNGestureHandler: 950dfa674dbf481460ca389c65b9036ac4ab8ada
+ RNScreens: 606ab1cf68162f7ba0d049a31f2a84089a6fffb4
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a
-PODFILE CHECKSUM: 2be76f6ff2a88869ff51bdbf48edb79d7d863c79
+PODFILE CHECKSUM: 9a1faac3ae43394b0b86e6fcabf63eced6c66dc2
COCOAPODS: 1.16.2
diff --git a/example/package.json b/example/package.json
index db38f20b6..f065aab69 100644
--- a/example/package.json
+++ b/example/package.json
@@ -12,9 +12,11 @@
"dependencies": {
"@datadog/mobile-react-native": "workspace:packages/core",
"@datadog/mobile-react-native-navigation": "workspace:packages/react-native-navigation",
+ "@datadog/mobile-react-native-openfeature": "workspace:packages/react-native-openfeature",
"@datadog/mobile-react-native-session-replay": "workspace:packages/react-native-session-replay",
"@datadog/mobile-react-native-webview": "workspace:packages/react-native-webview",
"@datadog/mobile-react-navigation": "workspace:packages/react-navigation",
+ "@openfeature/react-sdk": "^1.2.0",
"@react-native-async-storage/async-storage": "^2.1.2",
"@react-native-community/cli": "15.0.1",
"@react-native-community/cli-platform-android": "15.0.1",
diff --git a/example/src/App.tsx b/example/src/App.tsx
index 1427dc5ba..897a1a3a8 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -7,11 +7,12 @@ import AboutScreen from './screens/AboutScreen';
import style from './screens/styles';
import { navigationRef } from './NavigationRoot';
import { DdRumReactNavigationTracking, NavigationTrackingOptions, ParamsTrackingPredicate, ViewNamePredicate, ViewTrackingPredicate } from '@datadog/mobile-react-navigation';
-import {DatadogProvider } from '@datadog/mobile-react-native'
+import { DatadogProvider, TrackingConsent, DdFlags } from '@datadog/mobile-react-native'
+import { DatadogOpenFeatureProvider } from '@datadog/mobile-react-native-openfeature';
+import { OpenFeature, OpenFeatureProvider } from '@openfeature/react-sdk';
import { Route } from "@react-navigation/native";
import { NestedNavigator } from './screens/NestedNavigator/NestedNavigator';
import { getDatadogConfig, onDatadogInitialization } from './ddUtils';
-import { TrackingConsent } from '@datadog/mobile-react-native';
const Tab = createBottomTabNavigator();
@@ -20,7 +21,7 @@ const viewNamePredicate: ViewNamePredicate = function customViewNamePredicate(ro
return "Custom RN " + trackedName;
}
-const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(route: Route) {
+const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(route: Route) {
if (route.name === "AlertModal") {
return false;
}
@@ -28,7 +29,7 @@ const viewTrackingPredicate: ViewTrackingPredicate = function customViewTracking
return true;
}
-const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(route: Route) {
+const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(route: Route) {
const filteredParams: any = {};
if (route.params?.creditCardNumber) {
filteredParams["creditCardNumber"] = "XXXX XXXX XXXX XXXX";
@@ -56,9 +57,9 @@ const configuration = getDatadogConfig(TrackingConsent.GRANTED)
// 3.- File based configuration from .json and custom mapper setup
// const configuration = new FileBasedConfiguration( {
-// configuration: require("../datadog-configuration.json").configuration,
-// errorEventMapper: (event) => event,
-// resourceEventMapper: (event) => event,
+// configuration: require("../datadog-configuration.json").configuration,
+// errorEventMapper: (event) => event,
+// resourceEventMapper: (event) => event,
// actionEventMapper: (event) => event});
// 4.- File based configuration from the native side (using initFromNative)
@@ -66,26 +67,38 @@ const configuration = getDatadogConfig(TrackingConsent.GRANTED)
// const configuration = new DatadogProviderConfiguration("fake_value", "fake_value");
-export default function App() {
+const handleDatadogInitialization = async () => {
+ onDatadogInitialization();
+
+ // Enable Datadog Flags feature.
+ await DdFlags.enable();
+ // Set the provider with OpenFeature.
+ const provider = new DatadogOpenFeatureProvider();
+ OpenFeature.setProvider(provider);
+}
+
+export default function App() {
return (
-
- {
- DdRumReactNavigationTracking.startTrackingViews(
- navigationRef.current,
- navigationTrackingOptions)
- }}>
- null
+
+
+ {
+ DdRumReactNavigationTracking.startTrackingViews(
+ navigationRef.current,
+ navigationTrackingOptions)
}}>
-
-
-
-
-
-
+ null
+ }}>
+
+
+
+
+
+
+
)
}
diff --git a/example/src/WixApp.tsx b/example/src/WixApp.tsx
index 809912843..af685b934 100644
--- a/example/src/WixApp.tsx
+++ b/example/src/WixApp.tsx
@@ -1,5 +1,5 @@
-import React, { useState } from 'react';
-import { View, Text, Button } from 'react-native';
+import React from 'react';
+import { View, Text, Button, ActivityIndicator } from 'react-native';
import MainScreen from './screens/MainScreen';
import ErrorScreen from './screens/ErrorScreen';
import AboutScreen from './screens/AboutScreen';
@@ -11,15 +11,17 @@ import {
} from '@datadog/mobile-react-native-navigation';
import styles from './screens/styles';
+import { DdFlags } from '@datadog/mobile-react-native';
import TraceScreen from './screens/TraceScreen';
import { NavigationTrackingOptions, ParamsTrackingPredicate, ViewTrackingPredicate } from '@datadog/mobile-react-native-navigation/src/rum/instrumentation/DdRumReactNativeNavigationTracking';
+import { OpenFeatureProvider, useFlag } from '@openfeature/react-sdk';
// === Navigation Tracking custom predicates
const viewNamePredicate: ViewNamePredicate = function customViewNamePredicate(_event: ComponentDidAppearEvent, trackedName: string) {
return "Custom RN " + trackedName;
}
-const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(event: ComponentDidAppearEvent) {
+const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(event: ComponentDidAppearEvent) {
if (event.name === "AlertModal") {
return false;
}
@@ -27,7 +29,7 @@ const viewTrackingPredicate: ViewTrackingPredicate = function customViewTracking
return true;
}
-const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(event: ComponentDidAppearEvent) {
+const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(event: ComponentDidAppearEvent) {
const filteredParams: any = {};
if (event.passProps?.creditCardNumber) {
filteredParams["creditCardNumber"] = "XXXX XXXX XXXX XXXX";
@@ -61,14 +63,25 @@ function startReactNativeNavigation() {
}
function registerScreens() {
- Navigation.registerComponent('Home', () => HomeScreen);
+ Navigation.registerComponent('Home', () => HomeScreenWithProviders);
Navigation.registerComponent('Main', () => MainScreen);
Navigation.registerComponent('Error', () => ErrorScreen);
Navigation.registerComponent('Trace', () => TraceScreen);
Navigation.registerComponent('About', () => AboutScreen);
}
+const HomeScreenWithProviders = () => {
+ return (
+
+
+
+ )
+}
+
const HomeScreen = props => {
+ const testFlagKey = 'rn-sdk-test-json-flag';
+ const flag = useFlag(testFlagKey, {greeting: "Default greeting"});
+
return (
@@ -109,11 +122,12 @@ const HomeScreen = props => {
passProps: {
username: "test",
creditCardNumber: "4242 4242 4242 4242"
- }
+ }
}
});
}}
/>
+ {testFlagKey}: {JSON.stringify(flag.value)}
);
};
diff --git a/example/src/ddUtils.tsx b/example/src/ddUtils.tsx
index b49caadfd..8e2fa8a94 100644
--- a/example/src/ddUtils.tsx
+++ b/example/src/ddUtils.tsx
@@ -7,7 +7,10 @@ import {
TrackingConsent,
BatchSize,
UploadFrequency,
+ DdFlags,
} from '@datadog/mobile-react-native';
+import { DatadogOpenFeatureProvider } from '@datadog/mobile-react-native-openfeature';
+import { OpenFeature } from '@openfeature/react-sdk';
import {APPLICATION_ID, CLIENT_TOKEN, ENVIRONMENT} from './ddCredentials';
import { BatchProcessingLevel } from '@datadog/mobile-react-native/src/config/types';
@@ -82,4 +85,11 @@ export function initializeDatadog(trackingConsent: TrackingConsent) {
DdSdkReactNative.setUserInfo({id: "1337", name: "Xavier", email: "xg@example.com", extraInfo: { type: "premium" } })
DdSdkReactNative.addAttributes({campaign: "ad-network"})
});
+
+ // Enable the Flags feature.
+ DdFlags.enable().then(() => {
+ // Set the provider with OpenFeature.
+ const provider = new DatadogOpenFeatureProvider();
+ OpenFeature.setProvider(provider);
+ })
}
diff --git a/example/src/screens/MainScreen.tsx b/example/src/screens/MainScreen.tsx
index 53b94a180..1616e953d 100644
--- a/example/src/screens/MainScreen.tsx
+++ b/example/src/screens/MainScreen.tsx
@@ -7,11 +7,12 @@
import React, { Component, RefObject } from 'react';
import {
View, Text, Button, TouchableOpacity,
- TouchableWithoutFeedback, TouchableNativeFeedback
+ TouchableWithoutFeedback, TouchableNativeFeedback, ActivityIndicator
} from 'react-native';
+import { DdLogs, DdSdkReactNative, TrackingConsent, DdFlags } from '@datadog/mobile-react-native';
+import { FeatureFlag } from '@openfeature/react-sdk';
import styles from './styles';
import { APPLICATION_KEY, API_KEY } from '../../src/ddCredentials';
-import { DdLogs, DdSdkReactNative, TrackingConsent } from '@datadog/mobile-react-native';
import { getTrackingConsent, saveTrackingConsent } from '../utils';
import { ConsentModal } from '../components/consent';
@@ -113,7 +114,12 @@ export default class MainScreen extends Component {
render() {
return
- {this.state.welcomeMessage}
+ Welcome!}>
+ Greetings from the Feature Flags!
+
+
+ The above greeting is being controlled by the{'\n'}`rn-sdk-test-boolean-flag` feature flag.
+