Envoyez des données Real User Monitoring à Datadog à partir de vos applications iOS avec la SDK RUM côté client dd-sdk-ios
de Datadog. Vous pourrez notamment :
Déclarez la bibliothèque en tant que dépendance en fonction de votre gestionnaire de paquets. Consultez la page Releases de Datadog pour obtenir la dernière version bêta.
Vous pouvez utiliser CocoaPods pour installer dd-sdk-ios
:
pod 'DatadogSDK', :git => 'https://github.com/DataDog/dd-sdk-ios.git', :tag => '1.4.0-beta1'
Pour réaliser l’intégration du SDK grâce au Swift Package Manager d’Apple, ajoutez ce qui suit en tant que dépendance à votre Package.swift
:
.package(url: "https://github.com/DataDog/dd-sdk-ios.git", .exact("1.4.0-beta1"))
Vous pouvez utiliser Carthage pour installer dd-sdk-ios
:
github "DataDog/dd-sdk-ios" "1.4.0-beta1"
Initialisez la bibliothèque avec le contexte de votre application et votre token client Datadog. Pour des raisons de sécurité, vous devez utiliser un token client : vous ne pouvez pas utiliser les clés d’API Datadog pour configurer la bibliothèque dd-sdk-ios
, car elles risqueraient d’être exposées côté client dans le bytecode de l’IPA de l’application iOS. Pour en savoir plus sur la configuration d’un token client, consultez la [documentation dédiée][4]. Vous devez également spécifier un ID d’application (créez une application RUM Javascript en suivant les instructions décrites sur la page de prise en main de RUM.
Datadog.initialize(
appContext: .init(),
configuration: Datadog.Configuration
.builderUsing(
rumApplicationID: "<id_application_rum>",
clientToken: "<token_client>",
environment: "<nom_environnement>"
)
.set(serviceName: "app-name")
.build()
)
Datadog.initialize(
appContext: .init(),
configuration: Datadog.Configuration
.builderUsing(
rumApplicationID: "<id_application_rum-id>",
clientToken: "<token_client>",
environment: "<nom_environnement>"
)
.set(serviceName: "app-name")
.set(endpoint: .eu)
.build()
)
Configurez et enregistrez le monitor RUM. Cette opération, qui doit être effectuée une seule fois, s’effectue généralement dans le code AppDelegate
de votre application :
import Datadog
Global.rum = RUMMonitor.initialize()
Le SDK RUM offre deux méthodes d’instrumentation :
Remarque : il est possible de combiner les deux méthodes.
Pour activer le suivi des vues RUM, utilisez l’option .trackUIKitRUMViews(using:)
lors de la configuration du SDK :
Datadog.Configuration
.builderUsing(...)
.trackUIKitRUMViews(using: predicate)
.build()
Global.rum = RUMMonitor.initialize()
Le type predicate
doit être conforme au protocole UIKitRUMViewsPredicate
:
public protocol UIKitRUMViewsPredicate {
func rumView(for viewController: UIViewController) -> RUMView?
}
Au sein de l’implémentation rumView(for:)
, votre application doit décider si une instance donnée de UIViewController
doit démarrer la vue RUM ou non (et renvoyer nil
le cas échéant). La valeur de RUMView
renvoyée doit au minimum spécifier le path
pour créer la vue RUM. Référez-vous aux commentaires de la documentation relative au code pour en savoir plus.
Remarque : le SDK appelle rumView(for:)
à plusieurs reprises pendant que votre application s’exécute. Votre implémentation du predicate
ne doit pas dépendre de l’ordre des appels par le SDK.
Pour activer le suivi des ressources RUM, utilisez l’option .track(firstPartyHosts:)
lors de la configuration du SDK :
Datadog.Configuration
.builderUsing(...)
.track(firstPartyHosts: ["your.domain.com"])
.build()
Global.rum = RUMMonitor.initialize()
Définissez également DDURLSessionDelegate()
en tant que delegate
de l'URLSession
que vous souhaitez surveiller, par exemple :
let session = URLSession(
configuration: .default,
delegate: DDURLSessionDelegate(),
delegateQueue: nil
)
De cette façon, le SDK surveillera les requêtes envoyées depuis cette instance de l'URLSession
. Les requêtes dont les URL correspondent au firstPartyHosts
seront également marquées comme “first party” dans le RUM Explorer.
Pour activer le suivi des actions RUM, utilisez l’option .trackUIKitActions(_:)
lors de la configuration du SDK :
Datadog.Configuration
.builderUsing(...)
.trackUIKitActions(true)
.build()
Global.rum = RUMMonitor.initialize()
De cette façon, le SDK surveillera toutes les pressions significatives effectuées sur l’écran depuis l’application. Pour des raisons de confidentialité, les interactions avec le clavier ne sont jamais enregistrées.
Tous les logs “error” et “critical” sont signalés comme erreurs RUM et associés à la vue RUM actuelle :
logger.error("message")
logger.critical("message")
De la même manière, toutes les spans APM finalisées et marquées comme erreur sont signalées comme des erreurs RUM :
span.setTag(key: OTTags.error, value: true)
Utilisez l’une des méthodes suivantes sur Global.rum
pour collecter manuellement les ressources RUM :
.startView(viewController:)
.stopView(viewController:)
Exemple :
// dans votre `UIViewController` :
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
Global.rum.startView(viewController: self)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
Global.rum.stopView(viewController: self)
}
Pour en savoir plus et découvrir toutes les options disponibles, référez-vous aux commentaires de la documentation relative au code dans la classe DDRUMMonitor
.
Utilisez l’une des méthodes suivantes sur Global.rum
pour collecter manuellement les ressources RUM :
.startResourceLoading(resourceKey:request:)
.stopResourceLoading(resourceKey:response:)
.stopResourceLoadingWithError(resourceKey:error:)
.stopResourceLoadingWithError(resourceKey:errorMessage:)
Exemple :
// dans votre client réseau :
Global.rum.startResourceLoading(
resourceKey: "resource-key",
request: request
)
Global.rum.stopResourceLoading(
resourceKey: "resource-key",
response: response
)
Remarque : la chaîne utilisée pour resourceKey
dans les deux appels doit être unique à la ressource que vous appelez. Dans le cas contraire, le SDK ne pourra pas faire correspondre le début d’une ressource à sa fin.
Pour en savoir plus et découvrir toutes les options disponibles, référez-vous aux commentaires de la documentation relative au code dans la classe DDRUMMonitor
.
Pour enregistrer manuellement les actions RUM instantanées (par exemple : .tap
), utilisez :
.addUserAction(type:name:)
Pour enregistrer des actions RUM continues (par exemple : .scroll
), utilisez :
.startUserAction(type:name:)
.stopUserAction(type:)
sur Global.rum
.
Exemple :
// dans votre `UIViewController` :
@IBAction func didTapDownloadResourceButton(_ sender: Any) {
Global.rum.addUserAction(
type: .tap,
name: (sender as? UIButton).currentTitle ?? "",
)
}
Remarque : lorsque vous utilisez .startUserAction(type:name:)
et .stopUserAction(type:)
. Cela est nécessaire pour que le SDK puisse faire correspondre le début d’une ressource à sa fin.
Pour en savoir plus et découvrir toutes les options disponibles, référez-vous aux commentaires de la documentation relative au code dans la classe DDRUMMonitor
.
Utilisez l’une des méthodes suivantes sur Global.rum
pour collecter manuellement les erreurs RUM :
.addError(message:)
.addError(error:)
Exemple :
// à n'importe quel endroit dans votre code :
Global.rum.addError(message: "error message.")
Pour en savoir plus et découvrir toutes les options disponibles, référez-vous aux commentaires de la documentation relative au code dans la classe DDRUMMonitor
.