Présentation

Suivez ce guide pour migrer entre les versions majeures des SDK Mobile RUM, Logs et Trace. Consultez la documentation de chaque SDK pour plus de détails sur ses fonctionnalités et ses capacités.

Migrations les plus courantes :

  • v2 vers v3 : Mettant l’accent sur la suppression d’Open Tracing et les mises à jour de l’API
  • v1 vers v2 : Changements architecturaux majeurs en vue d’une conception modulaire

De la v2 à la v3

La transition de la version 2 à la version 3 se concentre sur la suppression de la prise en charge du projet Open Tracing hérité, améliorant ainsi la stabilité et la cohérence du SDK.

La migration de la v2 vers la v3 se concentre sur la rationalisation des modules, l’affinement des valeurs par défaut et l’amélioration de la fiabilité des fonctionnalités du produit.

Tous les produits SDK (RUM, Trace, Logs, Session Replay, etc.) restent modulaires et séparés en bibliothèques distinctes. Le changement principal est que le module DatadogObjc a été supprimé, son contenu ayant été intégré aux modules de produit correspondants.

La migration de la v2 vers la v3 se concentre sur l’alignement de la configuration avec le comportement du SDK modulaire v3 et sur la consolidation de la propriété de la configuration entre CoreConfiguration, RumConfiguration, LogsConfiguration et TraceConfiguration.

Veuillez lire le guide MIGRATION.md dans le dépôt officiel React Native pour obtenir la liste complète des changements.

Important : Contrairement à la v2.x (qui activait toujours tous les modules de fonctionnalités lors de l'initialisation du SDK), la v3 n'initialise et n'active aucun module de fonctionnalité à moins que vous ne transmettiez explicitement sa configuration.

Modules

Datadog suit la politique de version des bibliothèques AndroidX de Google pour les AndroidX bibliothèques, de sorte que le niveau d'API Android minimum pris en charge par le SDK v3 est 23.

Prérequis :

  • Kotlin 1.9 est requis
  • La dépendance Open Tracing a été supprimée car elle est obsolète

Les bibliothèques continuent d’être modularisées dans la v3. Adoptez les bibliothèques suivantes :

  • DatadogCore
  • DatadogCrashReporting
  • DatadogLogs
  • DatadogRUM
  • DatadogSessionReplay
  • DatadogTrace
  • DatadogWebViewTracking
SPM (Recommandé)
let package = Package(
  ...
  dependencies: [
      .package(url: "https://github.com/DataDog/dd-sdk-ios", from: "3.0.0")
  ],
  targets: [
      .target(
          ...
          dependencies: [
              .product(name: "DatadogCore", package: "dd-sdk-ios"),
              .product(name: "DatadogCrashReporting", package: "dd-sdk-ios"),
              .product(name: "DatadogLogs", package: "dd-sdk-ios"),
              .product(name: "DatadogRUM", package: "dd-sdk-ios"),
              .product(name: "DatadogSessionReplay", package: "dd-sdk-ios"),
              .product(name: "DatadogTrace", package: "dd-sdk-ios"),
              .product(name: "DatadogWebViewTracking", package: "dd-sdk-ios"),
          ]
      ),
  ]
)
CocoaPods
pod 'DatadogCore'
pod 'DatadogCrashReporting'
pod 'DatadogLogs'
pod 'DatadogRUM'
pod 'DatadogSessionReplay'
pod 'DatadogTrace'
pod 'DatadogWebViewTracking'
Carthage

Le Cartfile reste le même :

github "DataDog/dd-sdk-ios"

Dans Xcode, vous devez lier les frameworks suivants :

DatadogInternal.xcframework
DatadogCore.xcframework

Ensuite, vous pouvez sélectionner les modules que vous souhaitez utiliser :

DatadogCrashReporting.xcframework
DatadogLogs.xcframework
DatadogRUM.xcframework
DatadogSessionReplay.xcframework
DatadogTrace.xcframework
DatadogWebViewTracking.xcframework

Consultez le guide MIGRATION.md dans le dépôt officiel React Native pour connaître les étapes de mise à niveau recommandées et les mises à jour de dépendances requises.

Important : Dans la v3, les modules de fonctionnalités ne sont activés que si vous transmettez leur configuration lors de l'initialisation (par exemple, RUM / Logs / Trace). Si vous omettez une configuration de fonctionnalité, cette fonctionnalité n'est ni initialisée ni activée.

Modifications requises et mises à jour de l’API

Core

Action requise : Dans le SDK v3, l'ID des informations utilisateur devient obligatoire, et la null La valeur ne peut plus être fournie.

Modifications de l’API :

2.x3.0
Datadog.setUserInfo(null, "Jane Smith", "jane@example.com")Datadog.setUserInfo("user123", "Jane Smith", "jane@example.com")

RUM

Nous avons apporté des améliorations mineures aux modules RUM. Ils ne nécessitent pas de changements importants dans votre code, mais il est utile de vérifier si vous pouvez refactoriser certains paramètres redondants.

L’URL fournie dans la méthode useCustomEndpoint doit être l’URL complète de l’endpoint (https://example.com/rum/upload), et non seulement le nom d’hôte :

Rum.enable(
  RumConfiguration.Builder(...)
      .useCustomEndpoint("https://example.com/rum/upload")
      .build()
)

Modifications de l’API :

2.x3.0
DatadogRumMonitor.startResource(String, String, String,Map<String, Any?>)Utilisez la méthode startResource qui prend RumHttpMethod comme paramètre method au lieu de
L’objetcom.datadog.android.rum.GlobalRum
com.datadog.android.rum.RumMonitor.addAction()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.RumMonitor.startAction()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.RumMonitor.stopResource()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.RumMonitor.addError()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.RumMonitor.addErrorWithStacktrace()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.internal.monitor.AdvancedNetworkRumMonitor.stopResource()Le paramètre attributes: Map<String, Any?> est facultatif
com.datadog.android.rum.internal.monitor.AdvancedNetworkRumMonitor.stopResource()Le paramètre attributes: Map<String, Any?> est facultatif

Logs

Le produit Logs ne signale plus les erreurs fatales. Pour activer Error Tracking pour les plantages, Crash Reporting doit être activé conjointement avec RUM.

L’URL fournie dans la méthode useCustomEndpoint doit être l’URL complète de l’endpoint (https://example.com/logs/upload), et non seulement le nom d’hôte :

Logs.enable(
  LogsConfiguration.Builder()
      .useCustomEndpoint("https://example.com/logs/upload")
      .build()
)

Trace

L’URL fournie dans la méthode useCustomEndpoint doit être l’URL complète de l’endpoint (par ex. : https://example.com/trace/upload), et non seulement le nom d’hôte, c’est-à-dire :

Trace.enable(
  TraceConfiguration.Builder()
      .useCustomEndpoint(`https://example.com/trace/upload`)
      .build()
)

Le projet Open Tracing a été marqué comme archivé et n’est plus pris en charge. Les dépendances Open Tracing ont été supprimées du SDK v3.

Le SDK Datadog prend déjà en charge Open Telemetry, qui est la méthode recommandée pour utiliser l’API de fonctionnalité de traçage.

Notez que la bibliothèque de spécification Open Telemetry nécessite que le desugaring soit activé pour les projets avec un minSdk < 26.

  1. Ajoutez la dépendance Open Telemetry à votre build.gradle.kts :
implementation(project("com.datadoghq:dd-sdk-android-trace-otel:x.x.x"))
  1. Remplacez la configuration Open Tracing :
GlobalTracer.registerIfAbsent(
  AndroidTracer.Builder()
    .setService(BuildConfig.APPLICATION_ID)
    .build()
)

par la configuration Open Telemetry :

GlobalOpenTelemetry.set(
  DatadogOpenTelemetry(BuildConfig.APPLICATION_ID)
)

Pour accéder à l’objet traceur pour un traçage manuel (personnalisé), utilisez io.opentelemetry.api.GlobalOpenTelemetry.get() au lieu de io.opentracing.util.GlobalTracer.get(). Exemple :

val tracer: Tracer = GlobalOpenTelemetry
  .get()
  .getTracer("SampleApplicationTracer")

val span = tracer
  .spanBuilder("Executing operation")
  .startSpan()

// Code that should be instrumented

span.end()

Consultez la Open Telemetrydocumentation officielle pour plus de détails.

Migration du traçage de Open Tracing vers DatadogTracing (période de transition)

Cette option a été ajoutée pour la compatibilité et pour simplifier la transition d'Open Tracing vers Open Telemetry, mais elle pourrait ne pas être disponible dans les futures versions majeures. Datadog recommande d'utiliser Open Telemetry comme standard pour les tâches de traçage. Cependant, s'il n'est pas possible d'activer le « desugaring » dans votre projet pour une raison quelconque, vous pouvez utiliser cette méthode.
Remplacez la configuration `Open Tracing` :
GlobalTracer.registerIfAbsent(
  AndroidTracer.Builder()
    .setService(BuildConfig.APPLICATION_ID)
    .build()
)

par la configuration DatadogTracing :

GlobalDatadogTracer.registerIfAbsent(
  DatadogTracing.newTracerBuilder()
    .build()
)

Pour un traçage manuel (personnalisé), utilisez com.datadog.android.trace.GlobalDatadogTracer.get() au lieu de io.opentracing.util.GlobalTracer.get() pour accéder à l’objet traceur. Exemple :

val tracer = GlobalDatadogTracer.get()

val span = tracer
  .buildSpan("Executing operation")
  .start()

// Code that should be instrumented

span.finish()

Consultez la documentation Datadog pour plus de détails.

Modifications de l’API :

2.x3.0 Open Telemetry3.0 Datadog API
io.opentracing.util.GlobalTracerio.opentelemetry.api.GlobalOpenTelemetrycom.datadog.android.trace.GlobalDatadogTracer
com.datadog.android.trace.AndroidTracerio.opentelemetry.api.trace.Tracercom.datadog.android.trace.api.tracer.DatadogTracer
io.opentracing.Spanio.opentelemetry.api.trace.Spancom.datadog.android.trace.api.span.DatadogSpan
io.opentracing.Scopeio.opentelemetry.context.Scopecom.datadog.android.trace.api.scope.DatadogScope
io.opentracing.SpanContextio.opentelemetry.api.trace.SpanContextcom.datadog.android.trace.api.span.DatadogSpanContext

Conseils de remplacement :

2.x3.0 Open Telemetry3.0 Datadog API
AndroidTracer.Builder().build()DatadogTracing.newTracerBuilder().build()
AndroidTracer.setPartialFlushThreshold(Int)OtelTracerProvider.setPartialFlushThreshold()DatadogTracerBuilder.withPartialFlushMinSpans()
io.opentracing.SpanContext.toTraceId()io.opentelemetry.api.trace.SpanContext.getTraceId()DatadogSpanContext.traceId.toString()
io.opentracing.Span.setError()io.opentelemetry.api.trace.recordException()DatadogSpan.addThrowable()

Instrumentation OkHttp

L’instrumentation OkHttp (com.datadoghq:dd-sdk-android-okhttp:x.x.x) ne nécessite pas la prise en charge du « desugaring ». Cependant, quelques actions de migration peuvent être nécessaires.

Modifications de l’API :

2.x3.0
TracingInterceptor(String, List<String>, TracedRequestListener,Sampler<Span>)Utilisez TracingInterceptor.Builder() à la place.
TracingInterceptor(String?,Map<String, Set<TracingHeaderType>>, TracedRequestListener, Sampler<Span>)Utilisez TracingInterceptor.Builder() à la place.
TracingInterceptor(String?,TracedRequestListener,Sampler<Span>)Utilisez TracingInterceptor.Builder() à la place.
DatadogInterceptor(String?, Map<String, Set<TracingHeaderType>>,TracedRequestListener, RumResourceAttributesProvider, Sampler<Span>)Utilisez DatadogInterceptor.Builder() à la place.
DatadogInterceptor(String?,List<String>,TracedRequestListener,RumResourceAttributesProvider,Sampler<Span>)Utilisez DatadogInterceptor.Builder() à la place.
DatadogInterceptor(String?,TracedRequestListener,RumResourceAttributesProvider,Sampler<Span>)Utilisez DatadogInterceptor.Builder() à la place.

Session Replay

L’URL fournie dans la méthode useCustomEndpoint doit être l’URL complète de l’endpoint (par ex. : https://example.com/session_replay/upload), et non seulement le nom d’hôte, c’est-à-dire :

SessionReplay.enable(
  SessionReplayConfiguration.Builder(...)
      .useCustomEndpoint("https://example.com/session_replay/upload")
      .build()
)

Le SDK doit être initialisé le plus tôt possible dans le cycle de vie de l’application, spécifiquement dans le rappel application(_:didFinishLaunchingWithOptions:) de AppDelegate. Cela garantit une mesure précise de toutes les métriques, y compris la durée de démarrage de l’application. Pour les applications créées avec SwiftUI, utilisez @UIApplicationDelegateAdaptor pour accéder à AppDelegate.

import DatadogCore

Datadog.initialize(
    with: Datadog.Configuration(
        clientToken: "<client token>",
        env: "<environment>",
        service: "<service name>"
    ),
    trackingConsent: .granted
)

Remarque : L’initialisation du SDK ailleurs (par exemple plus tard lors du chargement de la vue) peut entraîner des données de télémétrie inexactes ou manquantes, en particulier concernant les performances de démarrage de l’application.

Action requise : L'API pour définir les informations utilisateur nécessite le id le paramètre, qui était facultatif dans la version 2.x.
2.x3.0
Datadog.setUserInfo(id: nil, name: "Jane Smith", email: "jane@example.com")Datadog.setUserInfo(id: "user123", name: "Jane Smith", email: "jane@example.com")

RUM

Les attributs au niveau de la vue RUM sont automatiquement propagés à tous les événements enfants associés, y compris les ressources, les actions utilisateur, les erreurs et les tâches longues. Cela garantit la cohérence des métadonnées entre les événements, facilitant ainsi le filtrage et la corrélation des données sur les tableaux de bord Datadog.

Pour gérer plus efficacement les attributs au niveau de la vue, de nouvelles API ont été ajoutées :

  • Monitor.addViewAttribute(forKey:value:)
  • Monitor.addViewAttributes(_:)
  • Monitor.removeViewAttribute(forKey:)
  • Monitor.removeViewAttributes(forKeys:)

Autres changements notables :

  • Toutes les API RUM Objective-C sont incluses dans DatadogRUM. Le module DatadogObjc séparé n’est plus disponible.
  • Les blocages d’application et les arrêts par le watchdog ne sont plus signalés depuis les extensions d’application ou les widgets.
  • Une nouvelle propriété trackMemoryWarnings a été ajoutée à RUM.Configuration pour signaler les avertissements de mémoire en tant qu’erreurs RUM.

Modifications de l’API :

2.x3.0
-RUM.Configuration.trackMemoryWarnings
RUMView(path:attributes:)RUMView(name:attributes:isUntrackedModal:)
-Monitor.addViewAttribute(forKey:value:)
-Monitor.addViewAttributes(:)
-Monitor.removeViewAttribute(forKey:)
-Monitor.removeViewAttributes(forKeys:)

Logs

Le produit Logs ne signale plus les erreurs fatales. Pour activer Error Tracking pour les plantages, Crash Reporting doit être activé conjointement avec RUM.

De plus, toutes les Objective-C Logs APIs sont incluses dans DatadogLogs. Le module DatadogObjc séparé n’est plus disponible.

Trace

L’échantillonnage des traces est désormais déterministe lorsqu’il est utilisé avec RUM. Il utilise le RUM session.id pour garantir un échantillonnage cohérent.

Également :

  • La configuration Trace.Configuration.URLSessionTracking.FirstPartyHostsTracing définit l’échantillonnage pour toutes les requêtes par défaut et le contexte de trace est injecté uniquement dans les requêtes échantillonnées.
  • Toutes les Objective-C Trace APIs sont incluses dans DatadogTrace. Le module DatadogObjc séparé n’est plus disponible.

Remarque : Une configuration similaire existe dans RUM.Configuration.URLSessionTracking.FirstPartyHostsTracing.

Session Replay

Les paramètres de confidentialité sont plus granulaires. Le paramètre defaultPrivacyLevel précédent a été remplacé par :

  • textAndInputPrivacyLevel
  • imagePrivacyLevel
  • touchPrivacyLevel

En savoir plus sur les niveaux de confidentialité.

Modifications de l’API :

2.x3.0
SessionReplay.Configuration(replaySampleRate:defaultPrivacyLevel:startRecordingImmediately:customEndpoint:)SessionReplay.Configuration(replaySampleRate:textAndInputPrivacyLevel:imagePrivacyLevel:touchPrivacyLevel:startRecordingImmediately:customEndpoint:featureFlags:)
SessionReplay.Configuration(replaySampleRate:defaultPrivacyLevel:startRecordingImmediately:customEndpoint:)SessionReplay.Configuration(replaySampleRate:textAndInputPrivacyLevel:imagePrivacyLevel:touchPrivacyLevel:startRecordingImmediately:customEndpoint:featureFlags:)

URLSession Instrumentation

Pour activer l’instrumentation URLSession, assurez-vous également d’activer RUM et/ou Trace pour effectuer des rapports vers ces produits respectifs.

Les types de délégués hérités ont été remplacés par une API d’instrumentation unifiée :

2.x3.0
DatadogURLSessionDelegate()URLSessionInstrumentation.enable(with:)
DDURLSessionDelegate()URLSessionInstrumentation.enable(with:)
DDNSURLSessionDelegate()URLSessionInstrumentation.enable(with:)

Veuillez lire le guide MIGRATION.md dans le dépôt officiel React Native.

Important : Contrairement à la v2.x (qui activait toujours tous les modules de fonctionnalités lors de l'initialisation du SDK), la v3 n'initialise et n'active aucun module de fonctionnalité à moins que vous ne transmettiez explicitement sa configuration.

Modifications de configuration

Certaines propriétés de configuration ont été déplacées, renommées, supprimées ou divisées :

PropriétéNouvel emplacementModifications
sampleRateSuppriméPropriété obsolète supprimée.
sessionSamplingRateRumConfigurationDéplacé et renommé en sessionSampleRate.
resourceTracingSamplingRateRumConfigurationDéplacé et renommé en resourceTraceSampleRate.
proxyConfigCoreConfigurationRenommé en proxyConfiguration.
serviceNameCoreConfigurationRenommé en service.
customEndpointsDiviséDivisé en customEndpoint au sein de RumConfiguration, LogsConfiguration et TraceConfiguration.
(Nouvelle propriété)CoreConfigurationattributeEncoders ajoutée.
(Nouvelle propriété)RumConfigurationtrackMemoryWarnings ajoutée.
nativeCrashReportEnabledRumConfigurationDéplacé.
nativeViewTrackingRumConfigurationDéplacé.
nativeInteractionTrackingRumConfigurationDéplacé.
firstPartyHostsRumConfigurationUtilisation forcée du type FirstPartyHost[] et déplacé.
telemetrySampleRateRumConfigurationDéplacé.
nativeLongTaskThresholdMsRumConfigurationDéplacé.
longTaskThresholdMsRumConfigurationDéplacé.
vitalsUpdateFrequencyRumConfigurationDéplacé.
trackFrustrationsRumConfigurationDéplacé.
trackBackgroundEventsRumConfigurationDéplacé.
bundleLogsWithRumLogsConfigurationDéplacé.
bundleLogsWithTracesLogsConfigurationDéplacé.
trackNonFatalAnrsRumConfigurationDéplacé.
appHangThresholdRumConfigurationDéplacé.
initialResourceThresholdRumConfigurationDéplacé.
trackWatchdogTerminationsRumConfigurationDéplacé.
actionNameAttributeRumConfigurationDéplacé.
logEventMapperLogsConfigurationDéplacé.
errorEventMapperRumConfigurationDéplacé.
resourceEventMapperRumConfigurationDéplacé.
actionEventMapperRumConfigurationDéplacé.
useAccessibilityLabelRumConfigurationDéplacé.
trackInteractionsRumConfigurationDéplacé.
trackResourcesRumConfigurationDéplacé.
trackErrorsRumConfigurationDéplacé.

Structures renommées

2.x3.x
DdSdkConfigurationCoreConfiguration

Mises à jour de l’API

En plus des changements de propriété de configuration (configurations Core vs feature), plusieurs types publics et API ont été renommés ou déplacés pour correspondre à la conception modulaire de la v3. Consultez le guide MIGRATION.md pour obtenir la liste officielle et des exemples de code.

De la v1 à la v2

La migration de la v1 vers la v2 représente une migration d’un SDK monolithique vers une architecture modulaire. RUM, Trace, Logs, Session Replay, etc. possèdent chacun des modules individuels, vous permettant d’intégrer uniquement ce qui est nécessaire dans votre application.

Le SDK v2 offre une disposition d’API unifiée et un alignement des noms entre le SDK iOS, le SDK Android et les autres produits Datadog.

Le SDK v2 permet l’utilisation de Mobile Session Replay sur les applications Android et iOS.

La migration de la v1 vers la v2 représente une migration d’un SDK monolithique vers une architecture modulaire. RUM, Trace, Logs, Session Replay, etc. possèdent chacun des modules individuels, vous permettant d’intégrer uniquement ce qui est nécessaire dans votre application.

Le SDK v2 offre une disposition d’API unifiée et un alignement des noms entre le SDK iOS, le SDK Android et les autres produits Datadog.

Le SDK v2 permet l’utilisation de Mobile Session Replay sur les applications Android et iOS.

La migration vers la version 2 offre des performances supérieures par rapport à la version 1.

La migration vers la version 2 offre des performances supérieures par rapport à la version 1. De plus, les SDK Native v2 proposent des fonctionnalités supplémentaires.

Modules

Les artefacts sont modularisés dans la v2. Adoptez les artefacts suivants :

  • RUM : com.datadoghq:dd-sdk-android-rum:x.x.x
  • Logs : com.datadoghq:dd-sdk-android-logs:x.x.x
  • Trace : com.datadoghq:dd-sdk-android-trace:x.x.x
  • Session Replay : com.datadoghq:dd-sdk-android-session-replay:x.x.x
  • WebView Tracking : com.datadoghq:dd-sdk-android-webview:x.x.x
  • OkHttp instrumentation : com.datadoghq:dd-sdk-android-okhttp:x.x.x

Remarque : Si vous utilisez NDK Crash Reporting et WebView Tracking, vous devez ajouter les artefacts RUM et Logs pour signaler les événements à RUM et Logs respectivement.

La référence à l’artefact com.datadoghq:dd-sdk-android doit être supprimée de votre script de build Gradle, car cet artefact n’existe plus.

Remarque : Les coordonnées Maven de tous les autres artefacts restent les mêmes.

v2 ne prend pas en charge l'API Android 19 (KitKat). Le SDK minimum pris en charge est désormais l'API 21 (Lollipop). Kotlin 1.7 est requis. Le SDK lui-même est compilé avec Kotlin 1.8, donc un compilateur Kotlin 1.6 ou inférieur ne peut pas lire les métadonnées des classes du SDK.

Si jamais vous rencontrez une erreur semblable à ce qui suit :

A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)

Ajoutez les règles suivantes à votre script de build (plus de détails dans le problème Stack Overflow correspondant) :

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }
}

Consultez l’exemple d’application Android pour savoir comment configurer le SDK.

Les bibliothèques sont modularisées dans la v2. Adoptez les bibliothèques suivantes :

  • DatadogCore
  • DatadogLogs
  • DatadogTrace
  • DatadogSessionReplay
  • DatadogRUM
  • DatadogWebViewTracking

Celles-ci s’ajoutent aux DatadogCrashReporting et DatadogObjc existantes.

SPM (Recommandé)
let package = Package(
  ...
  dependencies: [
      .package(url: "https://github.com/DataDog/dd-sdk-ios", from: "2.0.0")
  ],
  targets: [
      .target(
          ...
          dependencies: [
              .product(name: "DatadogCore", package: "dd-sdk-ios"),
              .product(name: "DatadogLogs", package: "dd-sdk-ios"),
              .product(name: "DatadogTrace", package: "dd-sdk-ios"),
              .product(name: "DatadogSessionReplay", package: "dd-sdk-ios"),
              .product(name: "DatadogRUM", package: "dd-sdk-ios"),
              .product(name: "DatadogCrashReporting", package: "dd-sdk-ios"),
              .product(name: "DatadogWebViewTracking", package: "dd-sdk-ios"),
          ]
      ),
  ]
)
CocoaPods
pod 'DatadogCore'
pod 'DatadogLogs'
pod 'DatadogTrace'
pod 'DatadogSessionReplay'
pod 'DatadogRUM'
pod 'DatadogCrashReporting'
pod 'DatadogWebViewTracking'
pod 'DatadogObjc'
Carthage

Le Cartfile reste le même :

github "DataDog/dd-sdk-ios"

Dans Xcode, vous devez lier les frameworks suivants :

DatadogInternal.xcframework
DatadogCore.xcframework

Ensuite, vous pouvez sélectionner les modules que vous souhaitez utiliser :

DatadogLogs.xcframework
DatadogTrace.xcframework
DatadogSessionReplay.xcframework
DatadogRUM.xcframework
DatadogCrashReporting.xcframework + CrashReporter.xcframework
DatadogWebViewTracking.xcframework
DatadogObjc.xcframework

Remarque : Lorsque vous utilisez Crash Reporting et WebView Tracking, vous devez ajouter les modules RUM et Logs pour signaler les événements à RUM et Logs respectivement.

Mettez à jour @datadog/mobile-react-native dans votre package.json :

"@datadog/mobile-react-native": "2.0.0"

Mettez à jour vos pods iOS :

(cd ios && bundle exec pod update)

Si vous utilisez une version de React Native strictement supérieure à 0.67, utilisez la version 17 de Java. Si vous utilisez une version de React Native égale ou inférieure à 0.67, utilisez la version 11 de Java. Pour vérifier votre version de Java, exécutez la commande suivante dans un terminal :

java --version

Pour React Native < 0.73

Dans votre fichier android/build.gradle, spécifiez kotlinVersion pour éviter les conflits entre les dépendances Kotlin :

buildscript {
    ext {
        // targetSdkVersion = ...
        kotlinVersion = "1.8.21"
    }
}

Pour React Native < 0.68

Dans votre fichier android/build.gradle, spécifiez kotlinVersion pour éviter les conflits entre les dépendances Kotlin :

buildscript {
    ext {
        // targetSdkVersion = ...
        kotlinVersion = "1.8.21"
    }
}

Si vous utilisez une version de com.android.tools.build:gradle inférieure à 5.0 dans votre android/build.gradle, ajoutez dans votre fichier android/gradle.properties :

android.jetifier.ignorelist=dd-sdk-android-core

Dépannage

Le build Android échoue avec Unable to make field private final java.lang.String java.io.File.path accessible

Si votre build Android échoue avec une erreur telle que :

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processReleaseMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1bbf7f0e

Vous utilisez Java 17, qui n’est pas compatible avec votre version de React Native. Passez à Java 11 pour résoudre le problème.

La compilation Android échoue avec Unsupported class file major version 61

Si votre build Android échoue avec une erreur telle que :

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:lintVitalRelease'.
> Could not resolve all artifacts for configuration ':app:debugRuntimeClasspath'.
   > Failed to transform dd-sdk-android-core-2.0.0.aar (com.datadoghq:dd-sdk-android-core:2.0.0) to match attributes {artifactType=android-manifest, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}.
      > Execution failed for JetifyTransform: /Users/me/.gradle/caches/modules-2/files-2.1/com.datadoghq/dd-sdk-android-core/2.0.0/a97f8a1537da1de99a86adf32c307198b477971f/dd-sdk-android-core-2.0.0.aar.
         > Failed to transform '/Users/me/.gradle/caches/modules-2/files-2.1/com.datadoghq/dd-sdk-android-core/2.0.0/a97f8a1537da1de99a86adf32c307198b477971f/dd-sdk-android-core-2.0.0.aar' using Jetifier. Reason: IllegalArgumentException, message: Unsupported class file major version 61. (Run with --stacktrace for more details.)

Vous utilisez une version du plugin Android Gradle inférieure à 5.0. Pour résoudre le problème, ajoutez dans votre fichier android/gradle.properties :

android.jetifier.ignorelist=dd-sdk-android-core

La compilation Android échoue avec Duplicate class kotlin.collections.jdk8.*

Si votre build Android échoue avec une erreur telle que :

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkReleaseDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)
     Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)

Vous devez définir une version de Kotlin pour votre projet afin d’éviter les conflits entre les dépendances Kotlin. Dans votre fichier android/build.gradle, spécifiez le kotlinVersion :

buildscript {
    ext {
        // targetSdkVersion = ...
        kotlinVersion = "1.8.21"
    }
}

Alternativement, vous pouvez ajouter les règles suivantes à votre script de compilation dans votre fichier android/app/build.gradle :

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }
}

Mettez à jour datadog_flutter_plugin dans votre pubspec.yaml :

dependencies:
  'datadog_flutter_plugin: ^2.0.0

Dépannage

Interface en double (iOS)

Si vous voyez cette erreur lors de la compilation iOS après la mise à niveau vers datadog_flutter_plugin v2.0 :

Semantic Issue (Xcode): Duplicate interface definition for class 'DatadogSdkPlugin'
/Users/exampleuser/Projects/test_app/build/ios/Debug-iphonesimulator/datadog_flutter_plugin/datadog_flutter_plugin.framework/Headers/DatadogSdkPlugin.h:6:0

Essayez d’effectuer flutter clean && flutter pub get et de recompiler. Cela résout généralement le problème.

Classes dupliquées (Android)

Si vous voyez cette erreur lors de la compilation d’Android après la mise à niveau vers datadog_flutter_plugin v2.0 :

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable

Assurez-vous d’avoir mis à jour votre version de Kotlin vers au moins 1.8 dans votre fichier build.gradle.

Initialisation du SDK

Avec l’extraction de différents produits dans des modules indépendants, la configuration du SDK est organisée par module.

com.datadog.android.core.configuration.Configuration.Builder La classe présente les changements suivants :

  • Le jeton client, le nom de l’environnement, le nom de la variante (la valeur par défaut est une chaîne vide) et le nom du service (la valeur par défaut est l’ID d’application extrait du manifeste) doivent être fournis dans le constructeur.
  • La classe com.datadog.android.core.configuration.Credentials est supprimée.
  • logsEnabled, tracesEnabled et rumEnabled sont supprimés du constructeur au profit d’une configuration de produit individuelle (voir ci-dessous).
  • crashReportsEnabled L’argument du constructeur est supprimé. Vous pouvez activer ou désactiver le rapport de plantage JVM avec la méthode Configuration.Builder.setCrashReportsEnabled. Par défaut, le rapport de plantage JVM est activé.
  • Les méthodes de configuration des produits RUM, Logs et Trace sont supprimées de Configuration.Builder au profit de la configuration de produit individuelle (voir ci-dessous).

La méthode Datadog.initialize n’inclut plus la classe Credentials dans la liste des arguments.

Le package com.datadog.android.plugin et toutes les classes/méthodes associées sont supprimés.

Logs

Toutes les classes liées au produit Logs sont strictement contenues dans le package com.datadog.android.log.

Pour utiliser la fonctionnalité de logs, importez l’artefact suivant :

implementation("com.datadoghq:dd-sdk-android-logs:x.x.x")

Vous pouvez activer le produit Logs avec l’extrait suivant :

val logsConfig = LogsConfiguration.Builder()
    ...
    .build()

Logs.enable(logsConfig)

val logger = Logger.Builder()
    ...
    .build()

Modifications de l’API :

1.x2.0
com.datadog.android.core.configuration.Configuration.Builder.setLogEventMappercom.datadog.android.log.LogsConfiguration.Builder.setEventMapper
com.datadog.android.core.configuration.Configuration.Builder.useCustomLogsEndpointcom.datadog.android.log.LogsConfiguration.Builder.useCustomEndpoint
com.datadog.android.log.Logger.Builder.setLoggerNamecom.datadog.android.log.Logger.Builder.setName
com.datadog.android.log.Logger.Builder.setSampleRatecom.datadog.android.log.Logger.Builder.setRemoteSampleRate
com.datadog.android.log.Logger.Builder.setDatadogLogsEnabledCette méthode a été supprimée. Utilisez com.datadog.android.log.Logger.Builder.setRemoteSampleRate(0f) à la place pour désactiver l’envoi de logs à Datadog.
com.datadog.android.log.Logger.Builder.setServiceNamecom.datadog.android.log.Logger.Builder.setService
com.datadog.android.log.Logger.Builder.setDatadogLogsMinPrioritycom.datadog.android.log.Logger.Builder.setRemoteLogThreshold

Trace

Toutes les classes liées au produit Trace sont strictement contenues dans le package com.datadog.android.trace (cela signifie que toutes les classes résidant auparavant dans com.datadog.android.tracing ont été déplacées).

Pour utiliser le produit Trace, importez l’artefact suivant :

implementation("com.datadoghq:dd-sdk-android-trace:x.x.x")

Vous pouvez activer le produit Trace avec l’extrait suivant :

val traceConfig = TraceConfiguration.Builder()
    ...
    .build()

Trace.enable(traceConfig)

val tracer = AndroidTracer.Builder()
    ...
    .build()

GlobalTracer.registerIfAbsent(tracer)

Modifications de l’API :

1.x2.0
com.datadog.android.core.configuration.Configuration.Builder.setSpanEventMappercom.datadog.android.trace.TraceConfiguration.Builder.setEventMapper
com.datadog.android.core.configuration.Configuration.Builder.useCustomTracesEndpointcom.datadog.android.trace.TraceConfiguration.Builder.useCustomEndpoint
com.datadog.android.tracing.AndroidTracer.Builder.setSamplingRatecom.datadog.android.trace.AndroidTracer.Builder.setSampleRate
com.datadog.android.tracing.AndroidTracer.Builder.setServiceNamecom.datadog.android.trace.AndroidTracer.Builder.setService

RUM

Toutes les classes liées au produit RUM sont strictement contenues dans le package com.datadog.android.rum.

Pour utiliser le produit RUM, importez l’artefact suivant :

implementation("com.datadoghq:dd-sdk-android-rum:x.x.x")

Vous pouvez utiliser l’extrait de code suivant pour activer la solution RUM :

val rumConfig = RumConfiguration.Builder(rumApplicationId)
    ...
    .build()

Rum.enable(rumConfig)

Modifications de l’API :

1.x2.0
com.datadog.android.core.configuration.Configuration.Builder.setRumViewEventMappercom.datadog.android.rum.RumConfiguration.Builder.setViewEventMapper
com.datadog.android.core.configuration.Configuration.Builder.setRumResourceEventMappercom.datadog.android.rum.RumConfiguration.Builder.setResourceEventMapper
com.datadog.android.core.configuration.Configuration.Builder.setRumActionEventMappercom.datadog.android.rum.RumConfiguration.Builder.setActionEventMapper
com.datadog.android.core.configuration.Configuration.Builder.setRumErrorEventMappercom.datadog.android.rum.RumConfiguration.Builder.setErrorEventMapper
com.datadog.android.core.configuration.Configuration.Builder.setRumLongTaskEventMappercom.datadog.android.rum.RumConfiguration.Builder.setLongTaskEventMapper
com.datadog.android.core.configuration.Configuration.Builder.useCustomRumEndpointcom.datadog.android.rum.RumConfiguration.Builder.useCustomEndpoint
com.datadog.android.event.ViewEventMappercom.datadog.android.rum.event.ViewEventMapper
com.datadog.android.core.configuration.VitalsUpdateFrequencycom.datadog.android.rum.configuration.VitalsUpdateFrequency
com.datadog.android.core.configuration.Configuration.Builder.trackInteractionscom.datadog.android.rum.RumConfiguration.Builder.trackUserInteractions
com.datadog.android.core.configuration.Configuration.Builder.disableInteractionTrackingcom.datadog.android.rum.RumConfiguration.Builder.disableUserInteractionTracking
com.datadog.android.core.configuration.Configuration.Builder.sampleRumSessionscom.datadog.android.rum.RumConfiguration.Builder.setSessionSampleRate
com.datadog.android.core.configuration.Configuration.Builder.sampleTelemetrycom.datadog.android.rum.RumConfiguration.Builder.setTelemetrySampleRate
com.datadog.android.rum.RumMonitor.BuilderCette classe a été supprimée. Le monitor RUM est créé et enregistré lors de l’appel Rum.enable.
com.datadog.android.rum.RumMonitor.Builder.sampleRumSessionscom.datadog.android.rum.RumConfiguration.Builder.setSessionSampleRate
com.datadog.android.rum.RumMonitor.Builder.setSessionListenercom.datadog.android.rum.RumConfiguration.Builder.setSessionListener
com.datadog.android.rum.RumMonitor.addUserActioncom.datadog.android.rum.RumMonitor.addAction
com.datadog.android.rum.RumMonitor.startUserActioncom.datadog.android.rum.RumMonitor.startAction
com.datadog.android.rum.RumMonitor.stopUserActioncom.datadog.android.rum.RumMonitor.stopAction
com.datadog.android.rum.GlobalRum.registerIfAbsentCette méthode a été supprimée. Le monitor RUM est créé et enregistré lors de l’appel Rum.enable.
com.datadog.android.rum.GlobalRumcom.datadog.android.rum.GlobalRumMonitor
com.datadog.android.rum.GlobalRum.addAttributecom.datadog.android.rum.RumMonitor.addAttribute
com.datadog.android.rum.GlobalRum.removeAttributecom.datadog.android.rum.RumMonitor.removeAttribute

Rapport de crash NDK

Le nom de l’artefact reste le même qu’auparavant : com.datadoghq:dd-sdk-android-ndk:x.x.x.

Vous pouvez activer le rapport de crash NDK avec l’extrait suivant :

NdkCrashReports.enable()

Cette configuration remplace l’appel com.datadog.android.core.configuration.Configuration.Builder.addPlugin.

Note : Vous devez avoir activé les produits RUM et Logs pour recevoir les rapports de crash NDK dans RUM et Logs respectivement.

Suivi WebView

Le nom de l’artefact reste le même qu’auparavant : com.datadoghq:dd-sdk-android-webview:x.x.x

Vous pouvez activer le suivi WebView avec l’extrait suivant :

WebViewTracking.enable(webView, allowedHosts)

Note : Vous devez avoir activé les produits RUM et Logs pour recevoir les événements provenant de WebView dans RUM et Logs respectivement.

Modifications de l’API :

1.x2.0
com.datadog.android.webview.DatadogEventBridgeCette méthode est devenue une classe internal. Utilisez WebViewTracking à la place.
com.datadog.android.rum.webview.RumWebChromeClientCette classe a été supprimée. Utilisez WebViewTracking à la place.
com.datadog.android.rum.webview.RumWebViewClientCette classe a été supprimée. Utilisez WebViewTracking à la place.

Suivi OkHttp

Pour utiliser le suivi OkHttp, importez l’artefact suivant :

implementation("com.datadoghq:dd-sdk-android-okhttp:x.x.x")

L’instrumentation OkHttp prend en charge l’initialisation du SDK Datadog après le client OkHttp, ce qui vous permet de créer com.datadog.android.okhttp.DatadogEventListener, com.datadog.android.okhttp.DatadogInterceptor et com.datadog.android.okhttp.trace.TracingInterceptor avant d’initialiser le SDK Datadog. L’instrumentation OkHttp commence à signaler les événements à Datadog une fois que le SDK Datadog est initialisé.

com.datadog.android.okhttp.DatadogInterceptor et com.datadog.android.okhttp.trace.TracingInterceptor vous permettent tous deux de contrôler l’échantillonnage de manière dynamique grâce à l’intégration avec un système de configuration à distance.

Pour ajuster dynamiquement l’échantillonnage, fournissez votre propre implémentation de l’interface com.datadog.android.core.sampling.Sampler dans le constructeur com.datadog.android.okhttp.DatadogInterceptor/com.datadog.android.okhttp.trace.TracingInterceptor. Il est interrogé pour chaque requête afin de prendre la décision d’échantillonnage.

dd-sdk-android-ktx suppression du module

Pour améliorer la granularité des SDK Datadog utilisés, le module dd-sdk-android-ktx est supprimé. Le code est réparti entre les autres modules pour fournir des méthodes d’extension pour les fonctionnalités RUM et Trace.

1.x‘2.0’Nom du module
com.datadog.android.ktx.coroutine#kotlinx.coroutines.CoroutineScope.launchTracedcom.datadog.android.trace.coroutines#kotlinx.coroutines.CoroutineScope.launchTraceddd-sdk-android-trace-coroutines
com.datadog.android.ktx.coroutine#runBlockingTracedcom.datadog.android.trace.coroutines#runBlockingTraceddd-sdk-android-trace-coroutines
com.datadog.android.ktx.coroutine#kotlinx.coroutines.CoroutineScope.asyncTracedcom.datadog.android.trace.coroutines#kotlinx.coroutines.CoroutineScope.asyncTraceddd-sdk-android-trace-coroutines
com.datadog.android.ktx.coroutine#kotlinx.coroutines.Deferred<T>.awaitTracedcom.datadog.android.trace.coroutines#kotlinx.coroutines.Deferred<T>.awaitTraceddd-sdk-android-trace-coroutines
com.datadog.android.ktx.coroutine#withContextTracedcom.datadog.android.trace.coroutines#withContextTraceddd-sdk-android-trace-coroutines
com.datadog.android.ktx.coroutine.CoroutineScopeSpancom.datadog.android.trace.coroutines.CoroutineScopeSpandd-sdk-android-trace-coroutines
com.datadog.android.ktx.sqlite#android.database.sqlite.SQLiteDatabase.transactionTracedcom.datadog.android.trace.sqlite#android.database.sqlite.SQLiteDatabase.transactionTraceddd-sdk-android-trace
com.datadog.android.ktx.tracing#io.opentracing.Span.setErrorcom.datadog.android.trace#io.opentracing.Span.setErrordd-sdk-android-trace
com.datadog.android.ktx.tracing#withinSpancom.datadog.android.trace#withinSpandd-sdk-android-trace
com.datadog.android.ktx.coroutine#sendErrorToDatadogcom.datadog.android.rum.coroutines#sendErrorToDatadogdd-sdk-android-rum-coroutines
com.datadog.android.ktx.rum#java.io.Closeable.useMonitoredcom.datadog.android.rum#java.io.Closeable.useMonitoreddd-sdk-android-rum
com.datadog.android.ktx.rum#android.content.Context.getAssetAsRumResourcecom.datadog.android.rum.resource#android.content.Context.getAssetAsRumResourcedd-sdk-android-rum
com.datadog.android.ktx.rum#android.content.Context.getRawResAsRumResourcecom.datadog.android.rum.resource#android.content.Context.getRawResAsRumResourcedd-sdk-android-rum
com.datadog.android.ktx.rum#java.io.InputStream.asRumResourcecom.datadog.android.rum.resource#java.io.InputStream.asRumResourcedd-sdk-android-rum
com.datadog.android.ktx.tracing#okhttp3.Request.Builder.parentSpancom.datadog.android.okhttp.trace#okhttp3.Request.Builder.parentSpandd-sdk-android-okhttp

Session Replay

Pour obtenir des instructions sur la configuration de Mobile Session Replay, consultez Mobile Session Replay Setup and Configuration.

Avec l’extraction de différents produits dans des modules indépendants, la configuration du SDK est organisée par module.

Le SDK doit être initialisé avant d’activer tout produit.

Le modèle Builder de l’initialisation du SDK a été supprimé au profit de définitions de structures. L’exemple suivant montre comment une initialisation 1.x se traduirait en 2.0.

Initialisation V1

import Datadog

Datadog.initialize(
    appContext: .init(),
    trackingConsent: .granted,
    configuration: Datadog.Configuration
        .builderUsing(
            clientToken: "<client token>",
            environment: "<environment>"
        )
        .set(serviceName: "<service name>")
        .build()

Initialisation V2

import DatadogCore

Datadog.initialize(
    with: Datadog.Configuration(
        clientToken: "<client token>",
        env: "<environment>",
        service: "<service name>"
    ),
    trackingConsent: .granted
)

Modifications de l’API :

1.x2.0
Datadog.Configuration.Builder.set(serviceName:)Datadog.Configuration.service
Datadog.Configuration.Builder.set(batchSize:)Datadog.Configuration.batchSize
Datadog.Configuration.Builder.set(uploadFrequency:)Datadog.Configuration.uploadFrequency
Datadog.Configuration.Builder.set(proxyConfiguration:)Datadog.Configuration.proxyConfiguration
Datadog.Configuration.Builder.set(encryption:)Datadog.Configuration.encryption
Datadog.Configuration.Builder.set(serverDateProvider:)Datadog.Configuration.serverDateProvider
Datadog.AppContext(mainBundle:)Datadog.Configuration.bundle

Logs

Toutes les classes liées aux Logs se trouvent strictement dans le module DatadogLogs. Vous devez d’abord activer le produit :

import DatadogLogs

Logs.enable(with: Logs.Configuration(...))

Vous pouvez ensuite créer votre instance de logger :

import DatadogLogs

let logger = Logger.create(
    with: Logger.Configuration(name: "<logger name>")
)

Modifications de l’API :

1.x2.0
Datadog.Configuration.Builder.setLogEventMapper(_:)Logs.Configuration.eventMapper
Datadog.Configuration.Builder.set(loggingSamplingRate:)Logs.Configuration.eventMapper
Logger.Builder.set(serviceName:)Logger.Configuration.service
Logger.Builder.set(loggerName:)Logger.Configuration.name
Logger.Builder.sendNetworkInfo(_:)Logger.Configuration.networkInfoEnabled
Logger.Builder.bundleWithRUM(_:)Logger.Configuration.bundleWithRumEnabled
Logger.Builder.bundleWithTrace(_:)Logger.Configuration.bundleWithTraceEnabled
Logger.Builder.sendLogsToDatadog(false)Logger.Configuration.remoteSampleRate = 0
Logger.Builder.set(datadogReportingThreshold:)Logger.Configuration.remoteLogThreshold
Logger.Builder.printLogsToConsole(_:, usingFormat)Logger.Configuration.consoleLogFormat

Trace

Toutes les classes liées à Trace se trouvent strictement dans le module DatadogTrace. Vous devez d’abord activer le produit :

import DatadogTrace

Trace.enable(
    with: Trace.Configuration(...)
)

Ensuite, vous pouvez accéder à l’instance partagée du Tracer :

import DatadogTrace

let tracer = Tracer.shared()

Modifications de l’API :

1.x2.0
Datadog.Configuration.Builder.trackURLSession(_:)Trace.Configuration.urlSessionTracking
Datadog.Configuration.Builder.setSpanEventMapper(_:)Trace.Configuration.eventMapper
Datadog.Configuration.Builder.set(tracingSamplingRate:)Trace.Configuration.sampleRate
Tracer.Configuration.serviceNameTrace.Configuration.service
Tracer.Configuration.sendNetworkInfoTrace.Configuration.networkInfoEnabled
Tracer.Configuration.globalTagsTrace.Configuration.tags
Tracer.Configuration.bundleWithRUMTrace.Configuration.bundleWithRumEnabled
Tracer.Configuration.samplingRateTrace.Configuration.sampleRate

RUM

Toutes les classes liées à RUM se trouvent strictement dans le module DatadogRUM. Vous devez d’abord activer le produit :

import DatadogRUM

RUM.enable(
    with: RUM.Configuration(applicationID: "<RUM Application ID>")
)

Ensuite, vous pouvez accéder à l’instance partagée du monitor RUM :

import DatadogRUM

let monitor = RUMMonitor.shared()

Modifications de l’API :

1.x2.0
Datadog.Configuration.Builder.trackURLSession(_:)RUM.Configuration.urlSessionTracking
Datadog.Configuration.Builder.set(rumSessionsSamplingRate:)RUM.Configuration.sessionSampleRate
Datadog.Configuration.Builder.onRUMSessionStartRUM.Configuration.onSessionStart
Datadog.Configuration.Builder.trackUIKitRUMViews(using:)RUM.Configuration.uiKitViewsPredicate
Datadog.Configuration.Builder.trackUIKitRUMActions(using:)RUM.Configuration.uiKitActionsPredicate
Datadog.Configuration.Builder.trackRUMLongTasks(threshold:)RUM.Configuration.longTaskThreshold
Datadog.Configuration.Builder.setRUMViewEventMapper(_:)RUM.Configuration.viewEventMapper
Datadog.Configuration.Builder.setRUMResourceEventMapper(_:)RUM.Configuration.resourceEventMapper
Datadog.Configuration.Builder.setRUMActionEventMapper(_:)RUM.Configuration.actionEventMapper
Datadog.Configuration.Builder.setRUMErrorEventMapper(_:)RUM.Configuration.errorEventMapper
Datadog.Configuration.Builder.setRUMLongTaskEventMapper(_:)RUM.Configuration.longTaskEventMapper
Datadog.Configuration.Builder.setRUMResourceAttributesProvider(_:)RUM.Configuration.urlSessionTracking.resourceAttributesProvider
Datadog.Configuration.Builder.trackBackgroundEvents(_:)RUM.Configuration.trackBackgroundEvents
Datadog.Configuration.Builder.trackFrustrations(_:)RUM.Configuration.frustrationsTracking
Datadog.Configuration.Builder.set(mobileVitalsFrequency:)RUM.Configuration.vitalsUpdateFrequency
Datadog.Configuration.Builder.set(sampleTelemetry:)RUM.Configuration.telemetrySampleRate

Rapports de crash

Pour activer les rapports de crash, assurez-vous d’activer RUM et les Logs pour qu’ils rapportent respectivement à ces produits.

import DatadogCrashReporting

CrashReporting.enable()
1.x2.0
Datadog.Configuration.Builder.enableCrashReporting()CrashReporting.enable()

Suivi WebView

Pour activer le suivi WebView, assurez-vous également d’activer RUM et les Logs pour qu’ils rapportent respectivement à ces produits.

import WebKit
import DatadogWebViewTracking

let webView = WKWebView(...)
WebViewTracking.enable(webView: webView)
1.x2.0
WKUserContentController.startTrackingDatadogEventsWebViewTracking.enable(webView:)

Session Replay

Pour obtenir des instructions sur la configuration de Mobile Session Replay, consultez Mobile Session Replay Setup and Configuration.

Aucun changement dans l’initialisation du SDK n’est nécessaire.

Modifications de la configuration du SDK

Certaines propriétés de configuration ont été déplacées ou renommées, afin de prendre en charge la modularité dans les SDK natifs de Datadog.

Les structures suivantes ont été renommées :

1.x2.x
DdSdkConfigurationDatadogConfiguration
LoggingConfigurationDatadogLoggingConfiguration
RumConfigurationDatadogRumConfiguration
DdSdkExistingConfigurationDatadogAttachConfiguration

Les propriétés suivantes ont été modifiées :

1.x2.xNotes
DdSdkConfiguration.trackingConsentSuppriméFait partie de Datadog.initialize
DdSdkConfiguration.customEndpointSuppriméDésormais configuré par fonctionnalité
DdSdkConfiguration.serviceNameDatadogConfiguration.service
DdSdkConfiguration.logEventMapperDatadogLoggingConfiguration.eventMapper
DdSdkConfiguration.customLogsEndpointDatadogLoggingConfiguration.customEndpoint
DdSdkConfiguration.telemetrySampleRateDatadogRumConfiguration.telemetrySampleRate

De plus, les API suivantes ont été modifiées :

1.x2.xNotes
VerbositySuppriméVoir CoreLoggerLevel ou LogLevel
DdLogs DatadogSdk.logsDatadogLogging DatadogSdk.logsType modifié
DdRum DatadogSdk.rumDatadogRum DatadogSdk.rumType modifié
Verbosity DatadogSdk.sdkVerbosityCoreLoggerLevel DatadogSdk.sdkVerbosity
DatadogSdk.runAppDatadogSdk.runAppAjout du paramètre trackingConsent
DatadogSdk.initializeDatadogSdk.initializeAjout du paramètre trackingConsent
DatadogSdk.createLoggerDatadogLogging.createLoggerDéplacé

Modifications de Flutter Web

Les clients utilisant Flutter Web doivent passer au SDK Datadog Browser v5. Modifiez l’importation suivante dans votre index.html :

-  <script type="text/javascript" src="https://www.datadoghq-browser-agent.com/datadog-logs-v4.js"></script>
-  <script type="text/javascript" src="https://www.datadoghq-browser-agent.com/datadog-rum-slim-v4.js"></script>
+  <script type="text/javascript" src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-logs.js"></script>
+  <script type="text/javascript" src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-rum-slim.js"></script>

Remarque : Datadog fournit un bundle CDN par site. Consultez le README du SDK Browser pour obtenir la liste de toutes les URL de site.

Modifications du produit Logs

Comme pour la v1, la journalisation Datadog peut être activée en définissant le membre DatadogConfiguration.loggingConfiguration. Cependant, contrairement à la v1, Datadog ne crée pas de logger par défaut pour vous. DatadogSdk.logs est désormais une instance de DatadogLogging, qui peut être utilisée pour créer des logs. De nombreuses options ont été déplacées vers DatadogLoggerConfiguration pour offrir aux développeurs un contrôle plus granulaire sur les loggers individuels.

Les API suivantes ont été modifiées :

1.x2.xNotes
LoggingConfigurationDatadogLoggingConfigurationRenommés, la plupart des membres se trouvent désormais sur DatadogLoggerConfiguration
LoggingConfiguration.sendNetworkInfoDatadogLoggerConfiguration.networkInfoEnabled
LoggingConfiguration.printLogsToConsoleDatadogLoggerConfiguration.customConsoleLogFunction
LoggingConfiguration.sendLogsToDatadogSupprimé. Utilisez remoteLogThreshold à la place
LoggingConfiguration.datadogReportingThresholdDatadogLoggerConfiguration.remoteLogThreshold
LoggingConfiguration.bundleWithRumDatadogLoggerConfiguration.bundleWithRumEnabled
LoggingConfiguration.bundleWithTraceDatadogLoggerConfiguration.bundleWithTraceEnabled
LoggingConfiguration.loggerNameDatadogLoggerConfiguration.name
LoggingConfiguration.sampleRateDatadogLoggerConfiguration.remoteSampleRate

Modifications du produit RUM

Les API suivantes ont été modifiées :

1.x2.xNotes
RumConfigurationDatadogRumConfigurationType renommé
RumConfiguration.vitalsUpdateFrequencyDatadogRumConfiguration.vitalsUpdateFrequencyDéfinissez sur null pour désactiver les mises à jour des indicateurs vitaux
RumConfiguration.tracingSampleRateDatadogRumConfiguration.traceSampleRate
RumConfiguration.rumViewEventMapperDatadogRumConfiguration.viewEventMapper
RumConfiguration.rumActionEventMapperDatadogRumConfiguration.actionEventMapper
RumConfiguration.rumResourceEventMapperDatadogRumConfiguration.resourceEventMapper
RumConfiguration.rumErrorEventMapperDatadogRumConfiguration.rumErrorEventMapper
RumConfiguration.rumLongTaskEventMapperDatadogRumConfiguration.longTaskEventMapper
RumUserActionTypeRumActionTypeType renommé
DdRum.addUserActionDdRum.addAction
DdRum.startUserActionDdRum.startAction
DdRum.stopUserActionDdRum.stopAction
DdRum.startResourceLoadingDdRum.startResource
DdRum.stopResourceLoadingDdRum.stopResource
DdRum.stopResourceLoadingWithErrorDdRum.stopResourceWithError

De plus, les mappeurs d’événements ne vous permettent plus de modifier leurs noms de vue. Pour renommer une vue, utilisez plutôt un ViewInfoExtractor personnalisé.

Pour aller plus loin