diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 84f473f4e..d5254cda4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -142,17 +142,26 @@ use_frameworks! Now you can go back to your `App.js/tsx` and use `@datadog/mobile-react-native` from there Example code: ``` -import { DdSdkReactNative, DdSdkReactNativeConfiguration } from '@datadog/mobile-react-native'; +import { DdSdkReactNative, CoreConfiguration, TrackingConsent } from '@datadog/mobile-react-native'; const App: () => React$Node = () => { - const config = new DdSdkReactNativeConfiguration( + const config = new CoreConfiguration( "", "", - "", - true, // track User interactions (e.g.: Tap on buttons) - true, // track XHR Resources - true // track Errors + TrackingConsent.GRANTED, + { + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackFrustrations: true, + trackErrors: true, + }, + logsConfiguration: {}, + traceConfiguration: {} + } ) + DdSdkReactNative.initialize(config); ... ``` diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 000000000..f37fa23bc --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,239 @@ +# Migration Guide + +This document outlines breaking changes and migration steps between major versions of the project. + +## Migration from 2.x to 3.0 + +This section describes the main changes introduced in SDK `3.0` compared to `2.x`. + +### Core SDK Initialization changes + +The configuration object used to initialize the SDK has seen some changes in its structure. +Feature configuration is now split into feature-specific properties: rumConfiguration, logsConfiguration, traceConfiguration. + +Then, RUM, Logs and Trace can be independently configured via their optional configuration objects that are each represented by a property inside the core configuration object. + +**NOTE: clientToken, environment and trackingConsent are mandatory for the Core SDK initialization. +ApplicationID is mandatory for RUM to work.** + +For instance, to configure the SDK and enable RUM, Logs and Trace you'd do the following: + +``` +const config = new CoreConfiguration( + CLIENT_TOKEN, + ENVIRONMENT, + TrackingConsent.GRANTED, + { + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackFrustrations: true, + sessionSampleRate: 100, + telemetrySampleRate: 100 + } + }, + logsConfiguration: { + logEventMapper: (logEvent) => { + logEvent.message = `[CUSTOM] ${logEvent.message}`; + return logEvent; + } + }, + traceConfiguration: {} +); + +... + +await DdSdkReactNative.initialize(config); +``` + +Or if using the DatadogProvider wrapper: + +``` +const configuration = new DatadogProviderConfiguration( + CLIENT_TOKEN, + ENVIRONMENT, + TrackingConsent.GRANTED, + { + batchSize: BatchSize.SMALL, + uploadFrequency: UploadFrequency.FREQUENT, + batchProcessingLevel: BatchProcessingLevel.MEDIUM, + additionalConfiguration: { + customProperty: "sdk-example-app" + }, + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackErrors: true, + sessionSampleRate: 100, + nativeCrashReportEnabled: true + }, + logsConfiguration: { + logEventMapper: (logEvent) => { + logEvent.message = `[CUSTOM] ${logEvent.message}`; + return logEvent; + } + }, + traceConfiguration: {} + } +); + +... + + +``` + +**NOTE: Unlike v2.x, which would always enable all feature modules when initializing the SDK, v3 won't initialize nor enable a feature module if there's no configuration for it.** + +### Property renames and relocations + +| Property | New Location | Changes | +| :--- | :--- | :--- | +| `sampleRate` | *Removed* | Deprecated property removed. | +| `sessionSamplingRate` | `RumConfiguration` | Moved and renamed to `sessionSampleRate` | +| `resourceTracingSamplingRate` | `RumConfiguration` | Moved and renamed to `resourceTraceSampleRate`. | +| `proxyConfig` | `CoreConfiguration` | Renamed to `proxyConfiguration`. | +| `serviceName` | `CoreConfiguration` | Renamed to `service`. | +| `customEndpoints` | *Split* | Split into `customEndpoint` within `RumConfiguration`, `LogsConfiguration`, and `TraceConfiguration` | +| *New Property* | `CoreConfiguration` | `attributeEncoders` added. | +| *New Property* | `RumConfiguration` | `trackMemoryWarnings` added. | +| `nativeCrashReportEnabled` | `RumConfiguration` | Moved. | +| `nativeViewTracking` | `RumConfiguration` | Moved. | +| `nativeInteractionTracking` | `RumConfiguration` | Moved. | +| `firstPartyHosts` | `RumConfiguration` | Moved. | +| `telemetrySampleRate` | `RumConfiguration` | Moved. | +| `nativeLongTaskThresholdMs` | `RumConfiguration` | Moved. | +| `longTaskThresholdMs` | `RumConfiguration` | Moved. | +| `vitalsUpdateFrequency` | `RumConfiguration` | Moved. | +| `trackFrustrations` | `RumConfiguration` | Moved. | +| `trackBackgroundEvents` | `RumConfiguration` | Moved. | +| `bundleLogsWithRum` | `LogsConfiguration` | Moved. | +| `bundleLogsWithTraces` | `LogsConfiguration` | Moved. | +| `trackNonFatalAnrs` | `RumConfiguration` | Moved. | +| `appHangThreshold` | `RumConfiguration` | Moved. | +| `initialResourceThreshold` | `RumConfiguration` | Moved. | +| `trackWatchdogTerminations` | `RumConfiguration` | Moved. | +| `actionNameAttribute` | `RumConfiguration` | Moved. | +| `logEventMapper` | `LogsConfiguration` | Moved. | +| `errorEventMapper` | `RumConfiguration` | Moved. | +| `resourceEventMapper` | `RumConfiguration` | Moved. | +| `actionEventMapper` | `RumConfiguration` | Moved. |`TraceConfiguration`. | +| `useAccessibilityLabel` | `RumConfiguration` | Moved. | +| `trackInteractions` | `RumConfiguration` | Moved. | +| `trackResources` | `RumConfiguration` | Moved. | +| `trackErrors` | `RumConfiguration` | Moved. | + +### FileBasedConfiguration changes + +FileBasedConfiguration now requires a path to a configuration JSON file instead of trying to find a default `datadog-configuration.json` at the app's root level like it did on v2. + +### Changes to SessionReplay configuration +defaultPrivacyLevel has been removed in favor of granular options: imagePrivacyLevel, touchPrivacyLevel and textAndInputPrivacyLevel. + +### Fatal Errors are no longer reported as logs + +Fatal Errors are no longer automatically reported as Logs. Fatal crashes will still be captured, but are no longer duplicated in Logs by default. + +### Context / Attribute encoding +Context / attributes encoding is now safe and deterministic + All attributes passed to Datadog SDK APIs are automatically sanitized and encoded: +Unsupported values (functions, symbols, non-finite numbers, etc.) are dropped with a warning to prevent crashes and undefined behavior +Common types (Date, Error, Map) are properly serialized +Nested objects are flattened using dot notation (a.b.c = value) to match native SDK expectations +Root-level primitives and arrays are wrapped under a context key for schema consistency +Custom encoders can be registered via the attributeEncoders configuration option for domain-specific types + +### Android mindSdkVersion bumped to 23 +Android's minSdkVersion has been bumped to 23. + +### Resource Traces sampling aligned with RUM Sessions +Resource traces are now consistently sampled based on the active RUM session. +You may notice changes in the percentage of reported resources. + +### JS Refresh rate normalization changes +JS refresh rate is now normalized to a 0–60 FPS range. + +### RUM Session sampling changes +v3 modifies the logic to determine whether a trace should be sampled or not, by using the RUM Session ID first, before using the Trace sampling if no session can be found. + +Consistent trace sampling based on RUM Session ID allows RUM clients and the backend to come to a the same decision about sampling without relying on randomness for each trace. + +### Removed APIs + +| API | Status | +| :--- | :--- | +| setUser | Removed in favor of setUserInfo. To completely remove userInfo please use the newly added clearUserInfo | +| setAttributes| Removed in favor of addAttributes | + +### Attributes API +The attribute API has been expanded allowing for addition and removal of single or batches of attributes in bulk.This can be performed with the new granular APIs: addAttributes, removeAttributes, addAttribute and removeAttribute. + +### New APIs + +#### ViewAttributes + +RUM View-level attributes are now automatically propagated to all related child events, including resources, user actions, errors, and long tasks. This ensures consistent metadata across events, making it easier to filter and correlate data on Datadog dashboards. + +To manage View level attributes more effectively, new APIs were added: + +``` +addViewAttribute = (key: string, value: unknown) +removeViewAttribute = (key: string) +addViewAttributes = (attributes: Attributes) +removeViewAttributes = (keys: string[]) +``` + +#### AccountInfo +The AccountInfo API from the native Datadog SDKs has been exposed to React Native as well: + +``` +setAccountInfo = async (accountInfo: { + id: string; + name?: string; + extraInfo?: Record; +}) + +clearAccountInfo = async () + +addAccountExtraInfo = async (extraAccountInfo: Record) +``` + +#### Feature Operations + +``` +startFeatureOperation( + name: string, + operationKey: string | null, + attributes: object +): Promise + +succeedFeatureOperation( + name: string, + operationKey: string | null, + attributes: object +): Promise + +failFeatureOperation( + name: string, + operationKey: string | null, + reason: FeatureOperationFailure, + attributes: object +): Promise +``` + +### New Navigation Tracking Options + +v3 modifies the automatic navigation tracking modules for React Navigation and React Native Navigation and exposes a new NavigationTrackingOptions parameter through the startTracking/startTrackingViews function. + +This `options` object allows to customize the view tracking logic via 3 new optional predicate functions: + +- ViewNamePredicate - a custom naming predicates that decide the display name of views tracked by RUM. +- ViewTrackingPredicate - a custom predicate that decides if a view needs to be tracked by RUM or not. +- ParamsTrackingPredicate - a custom predicate that decides which navigation parameters (if any) need to be tracked alongside the view on RUM. + +All of these are optional, and when not set the default behavior will be used for each one of them. The default behaviours are as follows: + +- ViewNamePredicate - directly forwards the view given name to RUM. +- ViewTrackingPredicate - tracks all views on RUM. +- ParamsTrackingPredicate - does not forward any parameters to RUM. diff --git a/NATIVE_SDK_VERSIONS.md b/NATIVE_SDK_VERSIONS.md index 7ba795c56..38d1b2549 100644 --- a/NATIVE_SDK_VERSIONS.md +++ b/NATIVE_SDK_VERSIONS.md @@ -1,5 +1,6 @@ | React Native | iOS Bridge / iOS SDK | Android Bridge / Android SDK | |-------------|---------------------|-----------------------------| +| 3.0.0 | 3.4.0 | 3.4.0 | | 2.14.1 | 2.30.2 | 2.26.2 | | 2.14.0 | 2.30.2 | 2.26.2 | | 2.13.2 | 2.30.2 | 2.26.2 | diff --git a/benchmarks/android/app/build.gradle b/benchmarks/android/app/build.gradle index 86d26791f..6e111a267 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:2.25.0") + implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.4.0") } diff --git a/benchmarks/ios/Podfile.lock b/benchmarks/ios/Podfile.lock index 771bfab42..e2ffc1b43 100644 --- a/benchmarks/ios/Podfile.lock +++ b/benchmarks/ios/Podfile.lock @@ -1,22 +1,22 @@ PODS: - boost (1.84.0) - - DatadogCore (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogCrashReporting (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogCore (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogCrashReporting (3.4.0): + - DatadogInternal (= 3.4.0) - PLCrashReporter (~> 1.12.0) - - DatadogInternal (2.30.2) - - DatadogLogs (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogRUM (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogSDKReactNative (2.14.1): - - DatadogCore (= 2.30.2) - - DatadogCrashReporting (= 2.30.2) - - DatadogLogs (= 2.30.2) - - DatadogRUM (= 2.30.2) - - DatadogTrace (= 2.30.2) - - DatadogWebViewTracking (= 2.30.2) + - DatadogInternal (3.4.0) + - DatadogLogs (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogRUM (3.4.0): + - DatadogInternal (= 3.4.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) - DoubleConversion - glog - hermes-engine @@ -37,9 +37,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSDKReactNativeSessionReplay (2.14.1): + - DatadogSDKReactNativeSessionReplay (3.0.0): - DatadogSDKReactNative - - DatadogSessionReplay (= 2.30.2) + - DatadogSessionReplay (= 3.4.0) - DoubleConversion - glog - hermes-engine @@ -60,10 +60,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSDKReactNativeWebView (2.14.1): - - DatadogInternal (= 2.30.2) + - DatadogSDKReactNativeWebView (3.0.0): + - DatadogInternal (= 3.4.0) - DatadogSDKReactNative - - DatadogWebViewTracking (= 2.30.2) + - DatadogWebViewTracking (= 3.4.0) - DoubleConversion - glog - hermes-engine @@ -84,13 +84,13 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSessionReplay (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogTrace (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogSessionReplay (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogTrace (3.4.0): + - DatadogInternal (= 3.4.0) - OpenTelemetrySwiftApi (= 1.13.1) - - DatadogWebViewTracking (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogWebViewTracking (3.4.0): + - DatadogInternal (= 3.4.0) - DoubleConversion (1.1.6) - fast_float (6.1.4) - FBLazyVector (0.78.2) @@ -2070,17 +2070,17 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DatadogCore: 8e50ad6cb68343f701707f7eeca16e0acb52ed8c - DatadogCrashReporting: 34763d4276d4fce286c7e8729cfcd2ac04dca43b - DatadogInternal: bd8672d506a7e67936ed5f7ca612169e49029b44 - DatadogLogs: d683aa9e0c9339f5ae679ead70bbdbe41cdc32f6 - DatadogRUM: 8b794aa458e6323ea9b1cef3f820fd3d092cbe27 - DatadogSDKReactNative: 14c7f36115fdd37841dd620f3376848204596909 - DatadogSDKReactNativeSessionReplay: 27bcc3d5280a85fb2a244b84916c1d01a43668e8 - DatadogSDKReactNativeWebView: 1849aa7769bde0a2a2088705e596276631769656 - DatadogSessionReplay: 56a91d799fe34967c5ae79a222364e37d67020f5 - DatadogTrace: 3ba194791267efa09634234749111cac95abd3e5 - DatadogWebViewTracking: 8287d5ad06e992de5e46dd72a17e05c7513344be + DatadogCore: 8c384b6338c49534e43fdf7f9a0508b62bf1d426 + DatadogCrashReporting: 103bfb4077db2ccee1846f71e53712972732d3b7 + DatadogInternal: b0372935ad8dde5ad06960fe8d88c39b2cc92bcc + DatadogLogs: 484bb1bfe0c9a7cb2a7d9733f61614e8ea7b2f3a + DatadogRUM: 00069b27918e0ce4a9223b87b4bfa7929d6a0a1f + DatadogSDKReactNative: 7e6f0c40720299e8463ca27a4c13583572818c6d + DatadogSDKReactNativeSessionReplay: b50d5d7cf696f9c709911d322ce228110030881e + DatadogSDKReactNativeWebView: c4ccb711e5da1ba1d08ae472ff967e0bc17167e6 + DatadogSessionReplay: 462a3a2e39e9e2193528cf572c8d1acfd6cdace1 + DatadogTrace: 852cb80f9370eb1321eb30a73c82c8e3d9e4e980 + DatadogWebViewTracking: 32dfeaf7aad47a605a689ed12e0d21ee8eb56141 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 FBLazyVector: e32d34492c519a2194ec9d7f5e7a79d11b73f91c @@ -2089,70 +2089,70 @@ SPEC CHECKSUMS: hermes-engine: 2771b98fb813fdc6f92edd7c9c0035ecabf9fee7 OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104 PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2 - RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 RCTDeprecation: be794de7dc6ed8f9f7fbf525f86e7651b8b68746 RCTRequired: a83787b092ec554c2eb6019ff3f5b8d125472b3b RCTTypeSafety: 48ad3c858926b1c46f46a81a58822b476e178e2c React: 3b5754191f1b65f1dbc52fbea7959c3d2d9e39c9 React-callinvoker: 6beeaf4c7db11b6cc953fac45f2c76e3fb125013 - React-Core: 88e817c42de035378cc71e009193b9a044d3f595 - React-CoreModules: dcf764d71efb4f75d38fcae8d4513b6729f49360 - React-cxxreact: 8cdcc937c5fbc406fe843a381102fd69440ca78a + React-Core: 8a10ac9de53373a3ecb5dfcbcf56df1d3dad0861 + React-CoreModules: af6999b35c7c01b0e12b59d27f3e054e13da43b1 + React-cxxreact: 833f00155ce8c2fda17f6d286f8eaeff2ececc69 React-debug: 440175830c448e7e53e61ebb8d8468c3256b645e - React-defaultsnativemodule: 4824bcd7b96ee2d75c28b1ca21f58976867f5535 - React-domnativemodule: a421118b475618961cf282e8ea85347cc9bb453c - React-Fabric: 6ac7de06009eb96b609a770b17abba6e460b5f45 - React-FabricComponents: e3bc2680a5a9a4917ff0c8d7f390688c30ef753c - React-FabricImage: 8bad558dec7478077974caa96acc79692d6b71f5 + React-defaultsnativemodule: a970effe18fe50bdbbb7115c3297f873b666d0d4 + React-domnativemodule: 45f886342a724e61531b18fba1859bb6782e5d62 + React-Fabric: 69f1881f2177a8512304a64157943548ab6df0cf + React-FabricComponents: f54111c8e2439fc273ab07483e3a7054ca1e75af + React-FabricImage: 9ad2619dfe8c386d79e8aaa87da6e8f018ab9592 React-featureflags: b9cf9b35baca1c7f20c06a104ffc325a02752faa - React-featureflagsnativemodule: dc93d81da9f41f7132e24455ec8b4b60802fd5b0 - React-graphics: aaa5a38bea15d7b895b210d95d554af45a07002a - React-hermes: 08ad9fb832d1b9faef391be17309aa6a69fad23b - React-idlecallbacksnativemodule: aacea33ef6c511a9781f9286cc7cdf93f39bba14 - React-ImageManager: c596c3b658c9c14607f9183ed0f635c8dd77987c - React-jserrorhandler: 987609b2f16b7d79d63fcd621bf0110dd7400b35 - React-jsi: afa286d7e0c102c2478dc420d4f8935e13c973fc - React-jsiexecutor: 08f5b512b4db9e2f147416d60a0a797576b9cfef - React-jsinspector: 5a94bcae66e3637711c4d96a00038ab9ec935bf5 - React-jsinspectortracing: a12589a0adbb2703cbc4380dabe9a58800810923 - React-jsitracing: 0b1a403d7757cec66b7dd8b308d04db85eef75f3 - React-logger: 304814ae37503c8eb54359851cc55bd4f936b39c - React-Mapbuffer: b588d1ca18d2ce626f868f04ab12d8b1f004f12c - React-microtasksnativemodule: 11831d070aa47755bb5739069eb04ec621fec548 - react-native-config: 3367df9c1f25bb96197007ec531c7087ed4554c3 - react-native-safe-area-context: 9b169299f9dc95f1d7fe1dd266fde53bd899cd0c - react-native-slider: 27263d134d55db948a4706f1e47d0ec88fb354dd - react-native-webview: be9957759cb73cb64f2ed5359e32a85f1f5bdff8 - React-NativeModulesApple: 79a4404ac301b40bec3b367879c5e9a9ce81683c - React-perflogger: 0ea25c109dba33d47dec36b2634bf7ea67c1a555 - React-performancetimeline: f74480de6efbcd8541c34317c0baedb433f27296 + React-featureflagsnativemodule: 7f1bc76d1d2c5bede5e753b8d188dbde7c59b12f + React-graphics: 069e0d0b31ed1e80feb023ad4f7e97f00e84f7b9 + React-hermes: 63df5ac5a944889c8758a6213b39ed825863adb7 + React-idlecallbacksnativemodule: 4c700bd7c0012adf904929075a79418b828b5ffc + React-ImageManager: 5d1ba8a7bae44ebba43fc93da64937c713d42941 + React-jserrorhandler: 0defd58f8bb797cdd0a820f733bf42d8bee708ce + React-jsi: 99d6207ec802ad73473a0dad3c9ad48cd98463f6 + React-jsiexecutor: 8c8097b4ba7e7f480582d6e6238b01be5dcc01c0 + React-jsinspector: ea148ec45bc7ff830e443383ea715f9780c15934 + React-jsinspectortracing: 46bb2841982f01e7b63eaab98140fa1de5b2a1db + React-jsitracing: c1063fc2233960d1c8322291e74bca51d25c10d7 + React-logger: 763728cf4eebc9c5dc9bfc3649e22295784f69f3 + React-Mapbuffer: 63278529b5cf531a7eaf8fc71244fabb062ca90c + React-microtasksnativemodule: 6a39463c32ce831c4c2aa8469273114d894b6be9 + react-native-config: 644074ab88db883fcfaa584f03520ec29589d7df + react-native-safe-area-context: afcc2e2b3e78ae8ef90d81e658aacee34ebc27ea + react-native-slider: 310d3f89edd6ca8344a974bfe83a29a3fbb60e5a + react-native-webview: 80ef603d1df42e24fdde765686fbb9b8a6ecd554 + React-NativeModulesApple: fd0545efbb7f936f78edd15a6564a72d2c34bb32 + React-perflogger: 5f8fa36a8e168fb355efe72099efe77213bc2ac6 + React-performancetimeline: 8c0ecfa1ae459cc5678a65f95ac3bf85644d6feb React-RCTActionSheet: 2ef95837e89b9b154f13cd8401f9054fc3076aff - React-RCTAnimation: 33d960d7f58a81779eea6dea47ad0364c67e1517 - React-RCTAppDelegate: 85c13403fd6f6b6cc630428d52bd8bd76a670dc9 - React-RCTBlob: 74c986a02d951931d2f6ed0e07ed5a7eb385bfc0 - React-RCTFabric: 384a8fea4f22fc0f21299d771971862883ba630a - React-RCTFBReactNativeSpec: eb1c3ec5149f76133593a516ff9d5efe32ebcecd - React-RCTImage: 2c58b5ddeb3c65e52f942bbe13ff9c59bd649b09 - React-RCTLinking: b6b14f8a3e62c02fc627ac4f3fb0c7bd941f907c - React-RCTNetwork: 1d050f2466c1541b339587d46f78d5eee218d626 - React-RCTSettings: 8148f6be0ccc0cfe6e313417ebf8a479caaa2146 - React-RCTText: 64114531ad1359e4e02a4a8af60df606dbbabc25 - React-RCTVibration: f4859417a7dd859b6bf18b1aba897e52beb72ef6 + React-RCTAnimation: 46abefd5acfda7e6629f9e153646deecc70babd2 + React-RCTAppDelegate: 7e58e0299e304cceee3f7019fa77bc6990f66b22 + React-RCTBlob: f68c63a801ef1d27e83c4011e3b083cc86a200d7 + React-RCTFabric: c59f41d0c4edbaac8baa232731ca09925ae4dda7 + React-RCTFBReactNativeSpec: 3240b9b8d792aa4be0fb85c9898fc183125ba8de + React-RCTImage: 34e0bba1507e55f1c614bd759eb91d9be48c8c5b + React-RCTLinking: a0b6c9f4871c18b0b81ea952f43e752718bd5f1d + React-RCTNetwork: bdafd661ac2b20d23b779e45bf7ac3e4c8bd1b60 + React-RCTSettings: 98aa5163796f43789314787b584a84eba47787a9 + React-RCTText: 424a274fc9015b29de89cf3cbcdf4dd85dd69f83 + React-RCTVibration: 92d9875a955b0adb34b4b773528fdbbbc5addd6c React-rendererconsistency: 5ac4164ec18cfdd76ed5f864dbfdc56a5a948bc9 - React-rendererdebug: 3dc1d97bbee0c0c13191e501a96ed9325bbd920e + React-rendererdebug: 710dbd7990e355852c786aa6bc7753f6028f357a React-rncore: 0bace3b991d8843bb5b57c5f2301ec6e9c94718b - React-RuntimeApple: 1e1e0a0c6086bc8c3b07e8f1a2f6ca99b50419a0 - React-RuntimeCore: d39322c59bef2a4b343fda663d20649f29f57fcc + React-RuntimeApple: 701ec44a8b5d863ee9b6a2b2447b6a26bb6805a1 + React-RuntimeCore: a82767065b9a936b05e209dc6987bc1ea9eb5d2d React-runtimeexecutor: 876dfc1d8daa819dfd039c40f78f277c5a3e66a6 - React-RuntimeHermes: 44f5f2baf039f249b31ea4f3e224484fd1731e0e - React-runtimescheduler: 3b3c5b50743bb8743ca49b9e5a70c2c385f156e1 + React-RuntimeHermes: e7a051fd91cab8849df56ac917022ef6064ad621 + React-runtimescheduler: c544141f2124ee3d5f3d5bf0d69f4029a61a68b0 React-timing: 1ee3572c398f5579c9df5bf76aacddf5683ff74e - React-utils: 0cfb7c7fb37d4e5f31cc18ffc7426be0ae6bf907 - ReactAppDependencyProvider: b48473fe434569ff8f6cb6ed4421217ebcbda878 - ReactCodegen: 653a0d8532d8c7dab50c391392044d98e20c9f79 - ReactCommon: 547db015202a80a5b3e7e041586ea54c4a087180 - RNCPicker: ffbd7b9fc7c1341929e61dbef6219f7860f57418 - RNScreens: 0f01bbed9bd8045a8d58e4b46993c28c7f498f3c + React-utils: 18703928768cb37e70cf2efff09def12d74a399e + ReactAppDependencyProvider: 4893bde33952f997a323eb1a1ee87a72764018ff + ReactCodegen: da30aff1cea9b5993dcbc33bf1ef47a463c55194 + ReactCommon: 865ebe76504a95e115b6229dd00a31e56d2d4bfe + RNCPicker: cfb51a08c6e10357d9a65832e791825b0747b483 + RNScreens: 790123c4a28783d80a342ce42e8c7381bed62db1 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: e14bad835e12b6c7e2260fc320bd00e0f4b45add diff --git a/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx b/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx index 4e1d7b6df..19669e293 100644 --- a/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx +++ b/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx @@ -10,7 +10,7 @@ import { useNavigationContainerRef } from '@react-navigation/native'; import { DatadogProvider } from "@datadog/mobile-react-native"; import { createBottomTabNavigator } from "@react-navigation/bottom-tabs"; import { NavigationContainer } from "@react-navigation/native"; -import { DdRumReactNavigationTracking, type ViewNamePredicate } from '@datadog/mobile-react-navigation'; +import { DdRumReactNavigationTracking, type NavigationTrackingOptions, type ViewNamePredicate } from '@datadog/mobile-react-navigation'; import type { Route } from "@react-navigation/native"; import { RunType } from '../../../testSetup/types/testConfig'; import { getDatadogProviderConfig } from '../../../testSetup/testUtils'; @@ -31,12 +31,17 @@ function RUMAutoScenario(props: RUMAutoScenarioProps): React.JSX.Element { return `RN ${Platform.OS} Benchmark - RUM Auto - ${trackedName} / ${route.name}`; }; + const navigationTrackingOptions: NavigationTrackingOptions = { + viewNamePredicate, + }; + const onDatadogInitialization = () => { console.info("Datadog SDK initialized"); }; const Tab = createBottomTabNavigator(); const RootStack = createNativeStackNavigator(); + function TabNavigatior() { return ( @@ -60,7 +65,7 @@ function RUMAutoScenario(props: RUMAutoScenarioProps): React.JSX.Element { return ( { if (instrumented) { - DdRumReactNavigationTracking.startTrackingViews(navigationRef.current, viewNamePredicate); + DdRumReactNavigationTracking.startTrackingViews(navigationRef.current, navigationTrackingOptions); }; }}> @@ -88,4 +93,4 @@ function RUMAutoScenario(props: RUMAutoScenarioProps): React.JSX.Element { }; } -export default RUMAutoScenario; \ No newline at end of file +export default RUMAutoScenario; diff --git a/benchmarks/src/testSetup/monitor.ts b/benchmarks/src/testSetup/monitor.ts index c7cc23473..93ea0fccd 100644 --- a/benchmarks/src/testSetup/monitor.ts +++ b/benchmarks/src/testSetup/monitor.ts @@ -4,8 +4,7 @@ * Copyright 2016-Present Datadog, Inc. */ -import { DefaultTimeProvider, RumActionType } from "@datadog/mobile-react-native"; -import { ErrorSource } from "@datadog/mobile-react-native/lib/typescript/rum/types"; +import { DefaultTimeProvider, ErrorSource, RumActionType } from "@datadog/mobile-react-native"; import type { DdRumType, ResourceKind } from "@datadog/mobile-react-native/lib/typescript/rum/types"; import type { GestureResponderEvent } from "react-native/types"; @@ -72,4 +71,4 @@ export const Monitor: Pick { let config = new DatadogProviderConfiguration( baseConfig.clientToken ?? '', baseConfig.env ?? '', - baseConfig.applicationID ?? '', - true, - true, - true, - TrackingConsent.GRANTED + TrackingConsent.GRANTED, + { + rumConfiguration: { + applicationId: baseConfig.applicationID ?? '', + trackInteractions: true, + trackResources: true, + trackErrors: true, + sessionSampleRate: 100, + nativeCrashReportEnabled: true + }, + logsConfiguration: { + bundleLogsWithRum: true, + bundleLogsWithTraces: true, + }, + traceConfiguration: {} + } ); - - config.nativeCrashReportEnabled = true - config.sessionSamplingRate = 100; - config.serviceName = `com.rn.${platform}.benchmark` + config.service = `com.rn.${platform}.benchmark` config.verbosity = SdkVerbosity.DEBUG; return config; @@ -57,18 +65,27 @@ export const getDatadogProviderConfig = () => { export const initializeDatadog = (clientToken?: string, environment?: string, appId?: string): Promise => { const platform = Platform.OS; - const config = new DdSdkReactNativeConfiguration( + const config = new CoreConfiguration( clientToken ?? '', environment ?? '', - appId ?? '', - true, - true, - true, - TrackingConsent.GRANTED + TrackingConsent.GRANTED, + { + rumConfiguration: { + applicationId: appId ?? "", + trackInteractions: true, + trackResources: true, + trackErrors: true, + sessionSampleRate: 100, + nativeCrashReportEnabled: true, + }, + logsConfiguration: { + bundleLogsWithRum: true, + bundleLogsWithTraces: true, + }, + traceConfiguration: {} + } ); - config.nativeCrashReportEnabled = true - config.sessionSamplingRate = 100; - config.serviceName = `com.rn.${platform}.benchmark` + config.service = `com.rn.${platform}.benchmark` config.verbosity = SdkVerbosity.DEBUG; return DdSdkReactNative.initialize(config); @@ -121,4 +138,4 @@ export const isValidScenario = (scenario?: string): boolean => { export const sleep = (ms: number) => { return new Promise(resolve => setTimeout(resolve, ms)); -}; \ No newline at end of file +}; diff --git a/bump-native-dd-sdk.sh b/bump-native-dd-sdk.sh index 8545802db..67d99a0e7 100755 --- a/bump-native-dd-sdk.sh +++ b/bump-native-dd-sdk.sh @@ -23,7 +23,7 @@ podspec_files=( "packages/react-native-webview/DatadogSDKReactNativeWebView.podspec" ) -ios_pattern="('Datadog[^']+', '~> )[0-9.]+'" +ios_pattern="('Datadog[^']+', ')[0-9.]+'" android_pattern='(com\.datadoghq:dd-sdk-android-[^:"]+):[0-9.]+' if [[ "$sdk" == "ios" ]]; then diff --git a/example-new-architecture/App.tsx b/example-new-architecture/App.tsx index e830aa345..b5d9a8f58 100644 --- a/example-new-architecture/App.tsx +++ b/example-new-architecture/App.tsx @@ -1,5 +1,5 @@ import { - DdSdkReactNativeConfiguration, + CoreConfiguration, SdkVerbosity, UploadFrequency, BatchSize, @@ -8,6 +8,7 @@ import { RumActionType, DdLogs, DdTrace, + TrackingConsent, } from '@datadog/mobile-react-native'; import React from 'react'; import type {PropsWithChildren} from 'react'; @@ -32,19 +33,27 @@ import { import {APPLICATION_ID, CLIENT_TOKEN, ENVIRONMENT} from './ddCredentials'; (async () => { - const config = new DdSdkReactNativeConfiguration( + const config = new CoreConfiguration( CLIENT_TOKEN, ENVIRONMENT, - APPLICATION_ID, - true, - true, - true, + TrackingConsent.GRANTED, + { + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackFrustrations: true, + trackErrors: true, + sessionSampleRate: 100, + telemetrySampleRate: 100, + } + } ); - config.sessionSamplingRate = 100; config.verbosity = SdkVerbosity.DEBUG; - config.telemetrySampleRate = 100; config.uploadFrequency = UploadFrequency.FREQUENT; config.batchSize = BatchSize.SMALL; + + await DdSdkReactNative.initialize(config); await DdRum.startView('main', 'Main'); setTimeout(async () => { diff --git a/example-new-architecture/ios/Podfile.lock b/example-new-architecture/ios/Podfile.lock index ca3b81b1d..6e0553ece 100644 --- a/example-new-architecture/ios/Podfile.lock +++ b/example-new-architecture/ios/Podfile.lock @@ -1,22 +1,22 @@ PODS: - boost (1.84.0) - - DatadogCore (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogCrashReporting (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogCore (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogCrashReporting (3.4.0): + - DatadogInternal (= 3.4.0) - PLCrashReporter (~> 1.12.0) - - DatadogInternal (2.30.2) - - DatadogLogs (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogRUM (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogSDKReactNative (2.14.1): - - DatadogCore (= 2.30.2) - - DatadogCrashReporting (= 2.30.2) - - DatadogLogs (= 2.30.2) - - DatadogRUM (= 2.30.2) - - DatadogTrace (= 2.30.2) - - DatadogWebViewTracking (= 2.30.2) + - DatadogInternal (3.4.0) + - DatadogLogs (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogRUM (3.4.0): + - DatadogInternal (= 3.4.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) - DoubleConversion - glog - hermes-engine @@ -37,13 +37,13 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSDKReactNative/Tests (2.14.1): - - DatadogCore (= 2.30.2) - - DatadogCrashReporting (= 2.30.2) - - DatadogLogs (= 2.30.2) - - DatadogRUM (= 2.30.2) - - DatadogTrace (= 2.30.2) - - DatadogWebViewTracking (= 2.30.2) + - 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) - DoubleConversion - glog - hermes-engine @@ -64,11 +64,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogTrace (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogTrace (3.4.0): + - DatadogInternal (= 3.4.0) - OpenTelemetrySwiftApi (= 1.13.1) - - DatadogWebViewTracking (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogWebViewTracking (3.4.0): + - DatadogInternal (= 3.4.0) - DoubleConversion (1.1.6) - fast_float (6.1.4) - FBLazyVector (0.76.9) @@ -1850,14 +1850,14 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 - DatadogCore: 8e50ad6cb68343f701707f7eeca16e0acb52ed8c - DatadogCrashReporting: 34763d4276d4fce286c7e8729cfcd2ac04dca43b - DatadogInternal: bd8672d506a7e67936ed5f7ca612169e49029b44 - DatadogLogs: d683aa9e0c9339f5ae679ead70bbdbe41cdc32f6 - DatadogRUM: 8b794aa458e6323ea9b1cef3f820fd3d092cbe27 - DatadogSDKReactNative: 3092efeaf685e37afe770740ef058ee3f9f5bf5d - DatadogTrace: 3ba194791267efa09634234749111cac95abd3e5 - DatadogWebViewTracking: 8287d5ad06e992de5e46dd72a17e05c7513344be + DatadogCore: 8c384b6338c49534e43fdf7f9a0508b62bf1d426 + DatadogCrashReporting: 103bfb4077db2ccee1846f71e53712972732d3b7 + DatadogInternal: b0372935ad8dde5ad06960fe8d88c39b2cc92bcc + DatadogLogs: 484bb1bfe0c9a7cb2a7d9733f61614e8ea7b2f3a + DatadogRUM: 00069b27918e0ce4a9223b87b4bfa7929d6a0a1f + DatadogSDKReactNative: 2028776f30b047eb0d118ff7efc15786a20d766f + DatadogTrace: 852cb80f9370eb1321eb30a73c82c8e3d9e4e980 + DatadogWebViewTracking: 32dfeaf7aad47a605a689ed12e0d21ee8eb56141 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 @@ -1866,62 +1866,62 @@ SPEC CHECKSUMS: hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104 PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2 - RCT-Folly: 7b4f73a92ad9571b9dbdb05bb30fad927fa971e1 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea - React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455 - React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0 - React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d + React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 + React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c + React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 - React-defaultsnativemodule: 814830ccbc3fb08d67d0190e63b179ee4098c67b - React-domnativemodule: 270acf94bd0960b026bc3bfb327e703665d27fb4 - React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b - React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb - React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f + React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e + React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f + React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b + React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 + React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c - 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-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-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 - React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22 - React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d - React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9 + React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e + React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 + React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 - 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-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-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 - React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5 + React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 - React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655 - React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157 + React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd + React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 - React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549 - React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe + React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 + React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 - React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e - ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c - ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd + React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f + ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b + ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index aef22ad73..94eff2f60 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" apply from: "../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle" +apply from: "../../node_modules/@datadog/mobile-react-native/datadog-configuration.gradle" /** * This is the configuration block to customize your React Native Android app. diff --git a/example/app.json b/example/app.json index f0f0c83d7..70b08eb89 100644 --- a/example/app.json +++ b/example/app.json @@ -1,5 +1,5 @@ { "name": "DdSdkReactNativeExample", "displayName": "DD RN Sample", - "navigation": "react-native-navigation" + "navigation": "react-navigation" } diff --git a/example/datadog-configuration.json b/example/datadog-configuration.json new file mode 100644 index 000000000..117368236 --- /dev/null +++ b/example/datadog-configuration.json @@ -0,0 +1,21 @@ +{ + "$schema": "./node_modules/@datadog/mobile-react-native/datadog-configuration.schema.json", + "configuration": { + "clientToken": "CLIENT_TOKEN", + "env": "ENVIRONMENT", + "site": "US1", + "rumConfiguration": { + "applicationId": "APPLICATION_ID", + "longTaskThresholdMs": 1000, + "sessionSampleRate": 100, + "telemetrySampleRate": 20, + "trackBackgroundEvents": false, + "trackErrors": true, + "trackInteractions": true, + "trackResources": true + }, + "batchSize": "SMALL", + "trackingConsent": "GRANTED", + "verbosity": "DEBUG" + } +} diff --git a/example/ios/DdSdkReactNativeExample.xcodeproj/project.pbxproj b/example/ios/DdSdkReactNativeExample.xcodeproj/project.pbxproj index f64fe027d..d50783cd5 100644 --- a/example/ios/DdSdkReactNativeExample.xcodeproj/project.pbxproj +++ b/example/ios/DdSdkReactNativeExample.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 04ACF1F72ED5D0B600602CDD /* datadog-configuration.json in Resources */ = {isa = PBXBuildFile; fileRef = 04ACF1F62ED5D0B600602CDD /* datadog-configuration.json */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; @@ -16,6 +17,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 04ACF1F52ED5D05F00602CDD /* datadog-configuration.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "datadog-configuration.json"; path = "../datadog-configuration.json"; sourceTree = ""; }; + 04ACF1F62ED5D0B600602CDD /* datadog-configuration.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "datadog-configuration.json"; path = "../datadog-configuration.json"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* ddSdkReactnativeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ddSdkReactnativeExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ddSdkReactnativeExample/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = ddSdkReactnativeExample/AppDelegate.mm; sourceTree = ""; }; @@ -59,6 +62,7 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 04ACF1F52ED5D05F00602CDD /* datadog-configuration.json */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, F2F7BC23E08401E57C9E1BD4 /* libPods-ddSdkReactnativeExample.a */, ); @@ -75,6 +79,7 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( + 04ACF1F62ED5D0B600602CDD /* datadog-configuration.json */, 13B07FAE1A68108700A75B9A /* ddSdkReactnativeExample */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, @@ -116,8 +121,8 @@ 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 21A29D19EE0D8BA789DB48E2 /* [CP] Embed Pods Frameworks */, CFB529A04D071A5133DC7E2B /* [CP] Copy Pods Resources */, + 93B37AE4FB9A962A472027AF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -164,6 +169,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 04ACF1F72ED5D0B600602CDD /* datadog-configuration.json in Resources */, 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 7115D38EB0DCB0BDB39D62A2 /* PrivacyInfo.xcprivacy in Resources */, @@ -189,7 +195,7 @@ shellPath = /bin/sh; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; - 21A29D19EE0D8BA789DB48E2 /* [CP] Embed Pods Frameworks */ = { + 93B37AE4FB9A962A472027AF /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0deeb0a40..fb945f513 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,34 +1,34 @@ PODS: - boost (1.84.0) - - DatadogCore (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogCrashReporting (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogCore (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogCrashReporting (3.4.0): + - DatadogInternal (= 3.4.0) - PLCrashReporter (~> 1.12.0) - - DatadogInternal (2.30.2) - - DatadogLogs (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogRUM (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogSDKReactNative (2.14.1): - - DatadogCore (= 2.30.2) - - DatadogCrashReporting (= 2.30.2) - - DatadogLogs (= 2.30.2) - - DatadogRUM (= 2.30.2) - - DatadogTrace (= 2.30.2) - - DatadogWebViewTracking (= 2.30.2) + - DatadogInternal (3.4.0) + - DatadogLogs (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogRUM (3.4.0): + - DatadogInternal (= 3.4.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) - React-Core - - DatadogSDKReactNative/Tests (2.14.1): - - DatadogCore (= 2.30.2) - - DatadogCrashReporting (= 2.30.2) - - DatadogLogs (= 2.30.2) - - DatadogRUM (= 2.30.2) - - DatadogTrace (= 2.30.2) - - DatadogWebViewTracking (= 2.30.2) + - 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) - React-Core - - DatadogSDKReactNativeSessionReplay (2.14.1): + - DatadogSDKReactNativeSessionReplay (3.0.0): - DatadogSDKReactNative - - DatadogSessionReplay (= 2.30.2) + - DatadogSessionReplay (= 3.4.0) - DoubleConversion - glog - hermes-engine @@ -49,9 +49,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSDKReactNativeSessionReplay/Tests (2.14.1): + - DatadogSDKReactNativeSessionReplay/Tests (3.0.0): - DatadogSDKReactNative - - DatadogSessionReplay (= 2.30.2) + - DatadogSessionReplay (= 3.4.0) - DoubleConversion - glog - hermes-engine @@ -73,25 +73,25 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - DatadogSDKReactNativeWebView (2.14.1): - - DatadogInternal (= 2.30.2) + - DatadogSDKReactNativeWebView (3.0.0): + - DatadogInternal (= 3.4.0) - DatadogSDKReactNative - - DatadogWebViewTracking (= 2.30.2) + - DatadogWebViewTracking (= 3.4.0) - React-Core - - DatadogSDKReactNativeWebView/Tests (2.14.1): - - DatadogInternal (= 2.30.2) + - DatadogSDKReactNativeWebView/Tests (3.0.0): + - DatadogInternal (= 3.4.0) - DatadogSDKReactNative - - DatadogWebViewTracking (= 2.30.2) + - DatadogWebViewTracking (= 3.4.0) - React-Core - react-native-webview - React-RCTText - - DatadogSessionReplay (2.30.2): - - DatadogInternal (= 2.30.2) - - DatadogTrace (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogSessionReplay (3.4.0): + - DatadogInternal (= 3.4.0) + - DatadogTrace (3.4.0): + - DatadogInternal (= 3.4.0) - OpenTelemetrySwiftApi (= 1.13.1) - - DatadogWebViewTracking (2.30.2): - - DatadogInternal (= 2.30.2) + - DatadogWebViewTracking (3.4.0): + - DatadogInternal (= 3.4.0) - DoubleConversion (1.1.6) - fast_float (6.1.4) - FBLazyVector (0.76.9) @@ -1988,17 +1988,17 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 - DatadogCore: 8e50ad6cb68343f701707f7eeca16e0acb52ed8c - DatadogCrashReporting: 34763d4276d4fce286c7e8729cfcd2ac04dca43b - DatadogInternal: bd8672d506a7e67936ed5f7ca612169e49029b44 - DatadogLogs: d683aa9e0c9339f5ae679ead70bbdbe41cdc32f6 - DatadogRUM: 8b794aa458e6323ea9b1cef3f820fd3d092cbe27 - DatadogSDKReactNative: 676327b41d63d42172cc3543dbed83a9e5f0e32c - DatadogSDKReactNativeSessionReplay: 65bb7f28d508739d76c939d1e8242100c0d42204 - DatadogSDKReactNativeWebView: dfddb218204ae6eec3c092fd20ed3c9d268b8683 - DatadogSessionReplay: 56a91d799fe34967c5ae79a222364e37d67020f5 - DatadogTrace: 3ba194791267efa09634234749111cac95abd3e5 - DatadogWebViewTracking: 8287d5ad06e992de5e46dd72a17e05c7513344be + DatadogCore: 8c384b6338c49534e43fdf7f9a0508b62bf1d426 + DatadogCrashReporting: 103bfb4077db2ccee1846f71e53712972732d3b7 + DatadogInternal: b0372935ad8dde5ad06960fe8d88c39b2cc92bcc + DatadogLogs: 484bb1bfe0c9a7cb2a7d9733f61614e8ea7b2f3a + DatadogRUM: 00069b27918e0ce4a9223b87b4bfa7929d6a0a1f + DatadogSDKReactNative: 94f17b16c05b0723923afb82ef8e51acb9609614 + DatadogSDKReactNativeSessionReplay: 9707e737f3ef4591a972b76e6f061619279b0958 + DatadogSDKReactNativeWebView: 8a524987010728a36a249785e823722746ce8b16 + DatadogSessionReplay: 462a3a2e39e9e2193528cf572c8d1acfd6cdace1 + DatadogTrace: 852cb80f9370eb1321eb30a73c82c8e3d9e4e980 + DatadogWebViewTracking: 32dfeaf7aad47a605a689ed12e0d21ee8eb56141 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 @@ -2008,69 +2008,69 @@ SPEC CHECKSUMS: HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352 OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104 PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2 - RCT-Folly: 7b4f73a92ad9571b9dbdb05bb30fad927fa971e1 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea - React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455 - React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0 - React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d + React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 + React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c + React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 - React-defaultsnativemodule: a965cb39fb0a79276ab611793d39f52e59a9a851 - React-domnativemodule: d647f94e503c62c44f54291334b1aa22a30fa08b - React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b - React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb - React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f + React-defaultsnativemodule: 21f216e8db975897eb32b5f13247f5bbfaa97f41 + React-domnativemodule: 19270ad4b8d33312838d257f24731a0026809d49 + React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b + React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 + React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c - 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-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-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 - React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22 - React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d - React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9 + React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e + React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 + React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 - 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-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-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 - React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5 + React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 - React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655 - React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157 + React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd + React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 - React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549 - React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe + React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 + React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 - React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e - ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c - ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd - ReactNativeNavigation: 50c1eef68b821e7265eff3a391d27ed18fdce459 - RNCAsyncStorage: 23e56519cc41d3bade3c8d4479f7760cb1c11996 - RNGestureHandler: 950dfa674dbf481460ca389c65b9036ac4ab8ada - RNScreens: 606ab1cf68162f7ba0d049a31f2a84089a6fffb4 + React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f + ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b + ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 + ReactNativeNavigation: 445f86273eb245d15b14023ee4ef9d6e4f891ad6 + RNCAsyncStorage: b44e8a4e798c3e1f56bffccd0f591f674fb9198f + RNGestureHandler: cb711d56ee3b03a5adea1d38324d4459ab55653f + RNScreens: f75b26fd4777848c216e27b0a09e1bf9c9f4760a SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a diff --git a/example/src/App.tsx b/example/src/App.tsx index cefcafffe..1427dc5ba 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -6,8 +6,8 @@ import ErrorScreen from './screens/ErrorScreen'; import AboutScreen from './screens/AboutScreen'; import style from './screens/styles'; import { navigationRef } from './NavigationRoot'; -import { DdRumReactNavigationTracking, ViewNamePredicate } from '@datadog/mobile-react-navigation'; -import {DatadogProvider} from '@datadog/mobile-react-native' +import { DdRumReactNavigationTracking, NavigationTrackingOptions, ParamsTrackingPredicate, ViewNamePredicate, ViewTrackingPredicate } from '@datadog/mobile-react-navigation'; +import {DatadogProvider } from '@datadog/mobile-react-native' import { Route } from "@react-navigation/native"; import { NestedNavigator } from './screens/NestedNavigator/NestedNavigator'; import { getDatadogConfig, onDatadogInitialization } from './ddUtils'; @@ -15,15 +15,65 @@ import { TrackingConsent } from '@datadog/mobile-react-native'; const Tab = createBottomTabNavigator(); -const viewPredicate: ViewNamePredicate = function customViewNamePredicate(route: Route, trackedName: string) { +// === Navigation Tracking custom predicates +const viewNamePredicate: ViewNamePredicate = function customViewNamePredicate(route: Route, trackedName: string) { return "Custom RN " + trackedName; } +const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(route: Route) { + if (route.name === "AlertModal") { + return false; + } + + return true; +} + +const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(route: Route) { + const filteredParams: any = {}; + if (route.params?.creditCardNumber) { + filteredParams["creditCardNumber"] = "XXXX XXXX XXXX XXXX"; + } + + if (route.params?.username) { + filteredParams["username"] = route.params.username; + } + + return filteredParams; +} + +const navigationTrackingOptions: NavigationTrackingOptions = { + viewNamePredicate, + viewTrackingPredicate, + paramsTrackingPredicate, +} +// === Datadog Provider Configuration schemes === + +// 1.- Direct configuration +const configuration = getDatadogConfig(TrackingConsent.GRANTED) + +// 2.- File based configuration from .json +// const configuration = new FileBasedConfiguration(require("../datadog-configuration.json")); + +// 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, +// actionEventMapper: (event) => event}); + +// 4.- File based configuration from the native side (using initFromNative) +// see https://docs.datadoghq.com/real_user_monitoring/guide/initialize-your-native-sdk-before-react-native-starts + +// const configuration = new DatadogProviderConfiguration("fake_value", "fake_value"); + export default function App() { + return ( - + { - DdRumReactNavigationTracking.startTrackingViews(navigationRef.current, viewPredicate) + DdRumReactNavigationTracking.startTrackingViews( + navigationRef.current, + navigationTrackingOptions) }}> { - return 'Custom RNN ' + trackedName; -}; +// === Navigation Tracking custom predicates +const viewNamePredicate: ViewNamePredicate = function customViewNamePredicate(_event: ComponentDidAppearEvent, trackedName: string) { + return "Custom RN " + trackedName; +} + +const viewTrackingPredicate: ViewTrackingPredicate = function customViewTrackingPredicate(event: ComponentDidAppearEvent) { + if (event.name === "AlertModal") { + return false; + } + + return true; +} + +const paramsTrackingPredicate: ParamsTrackingPredicate = function customParamsTrackingPredicate(event: ComponentDidAppearEvent) { + const filteredParams: any = {}; + if (event.passProps?.creditCardNumber) { + filteredParams["creditCardNumber"] = "XXXX XXXX XXXX XXXX"; + } + + if (event.passProps?.username) { + filteredParams["username"] = event.passProps.username; + } + + return filteredParams; +} + +const navigationTrackingOptions: NavigationTrackingOptions = { + viewNamePredicate, + viewTrackingPredicate, + paramsTrackingPredicate, +} function startReactNativeNavigation() { - DdRumReactNativeNavigationTracking.startTracking(viewPredicate); + DdRumReactNativeNavigationTracking.startTracking(navigationTrackingOptions); registerScreens(); Navigation.events().registerAppLaunchedListener(async () => { Navigation.setRoot({ @@ -80,7 +105,12 @@ const HomeScreen = props => { title="About" onPress={() => { Navigation.push(props.componentId, { - component: { name: 'About' } + component: { name: 'About', + passProps: { + username: "test", + creditCardNumber: "4242 4242 4242 4242" + } + } }); }} /> diff --git a/example/src/ddUtils.tsx b/example/src/ddUtils.tsx index 2cd64d477..b49caadfd 100644 --- a/example/src/ddUtils.tsx +++ b/example/src/ddUtils.tsx @@ -2,27 +2,48 @@ import { DatadogProviderConfiguration, DdLogs, DdSdkReactNative, - DdSdkReactNativeConfiguration, + CoreConfiguration, SdkVerbosity, - TrackingConsent + TrackingConsent, + BatchSize, + UploadFrequency, } from '@datadog/mobile-react-native'; import {APPLICATION_ID, CLIENT_TOKEN, ENVIRONMENT} from './ddCredentials'; +import { BatchProcessingLevel } from '@datadog/mobile-react-native/src/config/types'; // New SDK Setup - not available for react-native-navigation export function getDatadogConfig(trackingConsent: TrackingConsent) { const config = new DatadogProviderConfiguration( CLIENT_TOKEN, ENVIRONMENT, - APPLICATION_ID, - true, - true, - true, - trackingConsent - ) - config.nativeCrashReportEnabled = true - config.sessionSamplingRate = 100 - config.serviceName = "com.datadoghq.reactnative.sample" + trackingConsent, + { + batchSize: BatchSize.SMALL, + uploadFrequency: UploadFrequency.FREQUENT, + batchProcessingLevel: BatchProcessingLevel.MEDIUM, + additionalConfiguration: { + customProperty: "sdk-example-app" + }, + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackErrors: true, + sessionSampleRate: 100, + nativeCrashReportEnabled: true + }, + logsConfiguration: { + logEventMapper: (logEvent) => { + logEvent.message = `[CUSTOM] ${logEvent.message}`; + return logEvent; + } + }, + traceConfiguration: {} + } + ); + + config.service = "com.datadoghq.reactnative.sample" config.verbosity = SdkVerbosity.DEBUG; return config @@ -31,29 +52,34 @@ export function getDatadogConfig(trackingConsent: TrackingConsent) { export function onDatadogInitialization() { DdLogs.info('The RN Sdk was properly initialized') DdSdkReactNative.setUserInfo({id: "1337", name: "Xavier", email: "xg@example.com", extraInfo: { type: "premium" } }) - DdSdkReactNative.setAttributes({campaign: "ad-network"}) + DdSdkReactNative.addAttributes({campaign: "ad-network"}) } // Legacy SDK Setup export function initializeDatadog(trackingConsent: TrackingConsent) { - const config = new DdSdkReactNativeConfiguration( + const config = new CoreConfiguration( CLIENT_TOKEN, ENVIRONMENT, - APPLICATION_ID, - true, - true, - true, - trackingConsent + trackingConsent, + { + rumConfiguration: { + applicationId: APPLICATION_ID, + trackInteractions: true, + trackResources: true, + trackErrors: true, + sessionSampleRate: 100, + nativeCrashReportEnabled: true + } + } ) - config.nativeCrashReportEnabled = true - config.sampleRate = 100 - config.serviceName = "com.datadoghq.reactnative.sample" + config.verbosity = SdkVerbosity.DEBUG; + config.service = "com.datadoghq.reactnative.sample" DdSdkReactNative.initialize(config).then(() => { DdLogs.info('The RN Sdk was properly initialized') DdSdkReactNative.setUserInfo({id: "1337", name: "Xavier", email: "xg@example.com", extraInfo: { type: "premium" } }) - DdSdkReactNative.setAttributes({campaign: "ad-network"}) + DdSdkReactNative.addAttributes({campaign: "ad-network"}) }); } diff --git a/example/src/screens/MainScreen.tsx b/example/src/screens/MainScreen.tsx index 7f0fbdec2..53b94a180 100644 --- a/example/src/screens/MainScreen.tsx +++ b/example/src/screens/MainScreen.tsx @@ -14,7 +14,6 @@ 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'; -import { DdRum } from '../../../packages/core/src/rum/DdRum'; const axios = require('../axiosConfig'); diff --git a/example/src/screens/NestedNavigator/ScreenWithLinks.tsx b/example/src/screens/NestedNavigator/ScreenWithLinks.tsx index 965236fd6..7419331cb 100644 --- a/example/src/screens/NestedNavigator/ScreenWithLinks.tsx +++ b/example/src/screens/NestedNavigator/ScreenWithLinks.tsx @@ -5,6 +5,6 @@ import {useNavigation} from '@react-navigation/native' export const ScreenWithLinks = (props: {links: { routeName: string}[]}) => { const {navigate} = useNavigation() return (<> - {props.links.map(link =>