Cette page n'est pas encore disponible en français, sa traduction est en cours.
Si vous avez des questions ou des retours sur notre projet de traduction actuel,
n'hésitez pas à nous contacter.
Overview
Enable React Native Crash Reporting and Error Tracking to get comprehensive crash reports and error trends with Real User Monitoring.
Each time you release a new CodePush version for your React Native application, you need to upload the source maps to Datadog to unminify errors.
Datadog recommends using @datadog/mobile-react-native-code-push
in your app and the datadog-ci react-native codepush
command to upload your source maps. This ensures that the version
is consistent in both reported crashes and uploaded source maps.
If you experience any issues setting up the Datadog SDK with codepush, you can see our example application as a reference.
Setup
See the React Native Monitoring installation steps to install @datadog/mobile-react-native
.
Then, install @datadog/mobile-react-native-code-push
.
To install with NPM, run:
npm install @datadog/mobile-react-native-code-push
To install with Yarn, run:
yarn add @datadog/mobile-react-native-code-push
Initializing with DdSdkReactNative.initialize
Replace DdSdkReactNative.initialize
by DatadogCodepush.initialize
in your code:
import { DdSdkReactNativeConfiguration } from '@datadog/mobile-react-native';
import { DatadogCodepush } from '@datadog/mobile-react-native-code-push';
const config = new DdSdkReactNativeConfiguration(
'<CLIENT_TOKEN>',
'<ENVIRONMENT_NAME>',
'<RUM_APPLICATION_ID>',
true, // track user interactions (such as a tap on buttons). You can use the 'accessibilityLabel' element property to give the tap action a name, otherwise the element type is reported
true, // track XHR resources
true // track errors
);
await DatadogCodepush.initialize(config);
Initializing with DatadogProvider
Replace DatadogProvider
by DatadogCodepushProvider
in your App component:
import { DatadogCodepushProvider } from '@datadog/mobile-react-native-code-push';
export default function App() {
return (
<DatadogCodepushProvider configuration={datadogConfiguration}>
<Navigation />
</DatadogCodepushProvider>
);
}
As getting the CodePush version is an asynchronous step that needs to be performed before initializing the Datadog React Native SDK for RUM, there is no difference between InitializationMode.SYNC
and InitializationMode.ASYNC
when using DatadogCodepushProvider
.
Upload CodePush source maps
Install @datadog/datadog-ci
as a development dependency to your project.
To install it with NPM:
npm install @datadog/datadog-ci --save-dev
To install it with Yarn:
yarn add -D @datadog/datadog-ci
Create a gitignored datadog-ci.json
file at the root of your project containing your API key and the Datadog site (if not datadoghq.com
):
{
"apiKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"site": "datadoghq.eu"
}
You can also export them as DATADOG_API_KEY
and DATADOG_SITE
environment variables.
When releasing a new CodePush bundle, specify a directory to output the source maps and bundle:
appcenter codepush release-react -a MyOrganization/MyApplication -d MyDeployment --sourcemap-output --output-dir ./build
Run the datadog-ci react-native codepush
command by passing the adequate CodePush app
and deployment
arguments.
To run it with NPM:
npm run datadog-ci react-native codepush --platform ios --service com.company.app --bundle ./build/CodePush/main.jsbundle --sourcemap ./build/CodePush/main.jsbundle.map --app MyOrganization/MyApplication --deployment MyDeployment
To run it with Yarn:
yarn datadog-ci react-native codepush --platform ios --service com.company.app --bundle ./build/CodePush/main.jsbundle --sourcemap ./build/CodePush/main.jsbundle.map --app MyOrganization/MyApplication --deployment MyDeployment
Alternatives
These steps ensure that the version
matches the format {commercialVersion}-codepush.{codePushLabel}
, such as 1.2.4-codepush.v3
.
You can also do that by specifying a versionSuffix
in the SDK configuration:
const config = new DdSdkReactNativeConfiguration(
'<CLIENT_TOKEN>',
'<ENVIRONMENT_NAME>',
'<RUM_APPLICATION_ID>',
true, // track User interactions (e.g.: Tap on buttons. You can use 'accessibilityLabel' element property to give tap action the name, otherwise element type will be reported)
true, // track XHR Resources
true // track Errors
);
config.versionSuffix = `codepush.${codepushVersion}`; // will result in "1.0.0-codepush.v2"
In order to avoid potential version clashes, the versionSuffix
adds a dash (-
) before the suffix.
To obtain the codepushVersion
, you can hardcode it or use CodePush.getUpdateMetadata
.
Then, upload your source maps using the datadog-ci react-native upload
command, and ensure the --release-version
argument matches the one set in the SDK configuration.
Sending data when device is offline
RUM ensures availability of data when your user device is offline. In case of low-network areas, or when the device battery is too low, all the RUM events are first stored on the local device in batches.
Each batch follows the intake specification. They are sent as soon as the network is available, and the battery is high enough to ensure the Datadog SDK does not impact the end user’s experience. If the network is not available while your application is in the foreground, or if an upload of data fails, the batch is kept until it can be sent successfully.
This means that even if users open your application while offline, no data is lost. To ensure the SDK does not use too much disk space, the data on the disk is automatically discarded if it gets too old.
Further reading
Documentation, liens et articles supplémentaires utiles: