App Center Analytics (iOS)

Important

La mise hors service de Visual Studio App Center est prévue pour le 31 mars 2025. Bien que vous puissiez continuer à utiliser Visual Studio App Center jusqu’à sa mise hors service complète, il existe plusieurs alternatives recommandées vers lesquelles vous pouvez envisager la migration.

En savoir plus sur les chronologies et les alternatives de support.

App Center Analytics vous aide à comprendre le comportement des utilisateurs et l’engagement des clients pour améliorer votre application. Le Kit de développement logiciel (SDK) capture automatiquement le nombre de sessions et les propriétés de l’appareil, comme le modèle, la version du système d’exploitation, etc. Vous pouvez définir vos propres événements personnalisés pour mesurer les éléments qui vous importent. Toutes les informations capturées sont disponibles dans le portail App Center pour vous permettre d’analyser les données.

Notes

Les appareils iOS sans carte SIM carte n’envoient pas le rapport avec l’indicatif du pays de l’opérateur au portail App Center. Si vous souhaitez fournir une valeur de pays, utilisez la setCountryCode méthode pour remplacer le code de pays à partir de l’emplacement de votre appareil.

Notes

Dans la 4.0.0 version d’App Center, des changements cassants ont été introduits. Suivez la section Migrer vers app Center SDK 4.0.0 et versions ultérieures pour migrer App Center à partir des versions précédentes.

Suivez la section Prise en main si vous n’avez pas encore configuré le Kit de développement logiciel (SDK) dans votre application.

Informations sur la session et l’appareil

Une fois que vous avez ajouté App Center Analytics à votre application et démarré le Kit de développement logiciel (SDK), il suit automatiquement les sessions et les propriétés de l’appareil, notamment la version du système d’exploitation, le modèle, etc., sans code supplémentaire.

Notes

Sur les applications Catalyst Mac, le nombre de sessions peut être inférieur à celui des applications iOS. Les événements de cycle de vie utilisés pour suivre les sessions sur Mac Catalyst se comportent différemment de ceux sur iOS.

Le Kit de développement logiciel (SDK) signale automatiquement le code de pays d’un utilisateur si un modem de données mobiles et une carte SIM sont installés sur l’appareil. Les appareils Wi-Fi uniquement ne signalent pas d’indicatif de pays par défaut. Pour définir le code de pays de ces utilisateurs, vous devez récupérer vous-même l’emplacement de votre utilisateur et utiliser la setCountryCode: méthode dans le SDK. Notre conseil est de garder à l’esprit le suivi des emplacements des utilisateurs et d’utiliser une faible résolution d’emplacement. L’exemple ci-dessous utilise kCLLocationAccuracyKilometer.

  • Veillez à activer les services de localisation sur l’appareil.
  • Obtenez l’emplacement actuel de l’appareil à l’aide de CLLocationManager.
  • Convertissez l’emplacement en code de pays ISO à l’aide de CLGeocoder.
  • Remplacez le code du pays de l’opérateur à l’aide de la méthode du setCountryCode SDK.

Utilisez le code suivant pour obtenir l’emplacement de l’appareil et remplacer le code du pays de l’opérateur dans l’application :

Ajoutez le protocole CLLocationManagerDelegate à AppDelegate et ajoutez la propriété locationManager :

@interface AppDelegate () <CLLocationManagerDelegate>
@property(nonatomic) CLLocationManager *locationManager;
@end
class AppDelegate: CLLocationManagerDelegate {
  private var locationManager: CLLocationManager = CLLocationManager()
}

Dans la méthode didFinishLaunchingWithOptions : configurez le gestionnaire d’emplacement :

  self.locationManager = [[CLLocationManager alloc] init];
  self.locationManager.delegate = self;
  self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
  [self.locationManager requestWhenInUseAuthorization];
  self.locationManager.delegate = self
  self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer
  self.locationManager.requestWhenInUseAuthorization()

Notes

La requestWhenInUseAuthorization méthode n’est pas disponible pour macOS. Supprimez les appels à cette méthode lors du développement pour macOS.

Ajoutez les méthodes de délégué :

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
  if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    [manager requestLocation];
  }
}

- (void)locationManger:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
  CLLocation *location = [locations lastObject];
  CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  [geocoder reverseGeocodeLocation:location
                 completionHandler:^(NSArray *placemarks, NSError *error) {
                   if (placemarks.count == 0 || error)
                     return;
                   CLPlacemark *pm = [placemarks firstObject];
                   [MSACAppCenter setCountryCode:pm.ISOcountryCode];
                 }]
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
  NSLog(@"Failed to find user's location: \(error.localizedDescription)");
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
  if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    manager.requestLocation()
  }
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
  let userLocation:CLLocation = locations[0] as CLLocation
  CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
    if error == nil {
      AppCenter.countryCode = placemarks?.first?.isoCountryCode
    }
  }
}
  
func locationManager(_ Manager: CLLocationManager, didFailWithError error: Error) {
  print("Failed to find user's location: \(error.localizedDescription)")
}

Événements personnalisés

Vous pouvez suivre vos propres événements personnalisés avec jusqu’à 20 propriétés pour savoir ce qui se passe dans votre application, comprendre les actions des utilisateurs et voir les agrégats dans le portail App Center.

Une fois que vous avez démarré le Kit de développement logiciel (SDK), utilisez la trackEvent:withProperties méthode pour suivre vos événements avec des propriétés. Vous pouvez envoyer jusqu’à 200 noms d’événements distincts. En outre, il existe une limite maximale de 256 caractères par nom d’événement et de 125 caractères par nom de propriété d’événement et valeur de propriété d’événement.

NSDictionary *properties = @{@"Category" : @"Music", @"FileName" : @"favorite.avi"};
[MSACAnalytics trackEvent:@"Video clicked" withProperties: properties];
Analytics.trackEvent("Video clicked", withProperties: ["Category" : "Music", "FileName" : "favorite.avi"])

Les propriétés des événements sont entièrement facultatives . Si vous souhaitez simplement suivre un événement, utilisez plutôt cet exemple :

[MSACAnalytics trackEvent:@"Video clicked"];
Analytics.trackEvent("Video clicked")

Priorité et persistance des événements

Vous pouvez suivre les événements critiques pour l’entreprise qui ont une importance plus élevée que d’autres événements.

  • Les développeurs peuvent définir la priorité des événements sur Normal (FlagsNormal dans l’API) ou Critique (FlagsCritical dans l’API).
  • Les événements dont la priorité est définie sur Critique sont d’abord récupérés à partir du stockage et envoyés avant les événements Normal .
  • Lorsque le stockage local est saturé et que de nouveaux événements doivent être stockés. Les événements les plus anciens avec la priorité la plus basse sont d’abord supprimés pour faire de l’espace pour les nouveaux.
  • Si le stockage est plein de journaux avec priorité critique , le suivi d’un événement avec priorité Normale échoue, car le SDK ne peut pas faire de place dans ce cas.
  • Si vous utilisez également le service Incidents , les journaux d’incident sont définis comme critiques et partagent le même stockage que les événements.
  • L’intervalle de transmission est appliqué uniquement aux événements Normal , les événements critiques sont envoyés après 3 secondes.

Vous pouvez utiliser l’API suivante pour suivre un événement comme critique :

NSDictionary *properties = @{@"Category" : @"Music", @"FileName" : @"favorite.avi"};
[MSACAnalytics trackEvent:@"Video clicked" withProperties:properties flags:MSACFlagsCritical];

// If you're using name only, you can pass nil as properties.
let properties = ["Category" : "Music", "FileName" : "favorite.avi"];
Analytics.trackEvent("Video clicked", withProperties: properties, flags: .critical)

// If you're using name only, you can pass nil as properties.

Suspendre et reprendre l’envoi des journaux

La suspension de la transmission d’événements peut être utile dans les scénarios où l’application doit contrôler la bande passante réseau pour répondre à des besoins plus critiques pour l’entreprise. Vous pouvez suspendre l’envoi des journaux au back-end App Center. Lorsqu’ils sont suspendus, les événements peuvent toujours être suivis et enregistrés, mais ils ne sont pas envoyés immédiatement. Tous les événements suivis par votre application en pause ne seront envoyés qu’une fois que vous appelez resume.

[MSACAnalytics pause];
[MSACAnalytics resume];
Analytics.pause()
Analytics.resume()

Activer ou désactiver App Center Analytics au moment de l’exécution

Vous pouvez activer et désactiver App Center Analytics au moment de l’exécution. Si vous le désactivez, le Kit de développement logiciel (SDK) ne collecte plus d’informations d’analyse pour l’application.

[MSACAnalytics setEnabled:NO];
Analytics.enabled = false

Pour réactiver App Center Analytics, utilisez la même API, mais passez YES/true en tant que paramètre.

[MSACAnalytics setEnabled:YES];
Analytics.enabled = true

L’état est conservé dans le stockage de l’appareil au cours des lancements d’application.

Notes

Cette méthode ne doit être utilisée qu’après Analytics le démarrage.

Vérifier si App Center Analytics est activé

Vous pouvez également case activée si App Center Analytics est activé ou non.

[MSACAnalytics isEnabled];
Analytics.enabled

Notes

Cette méthode ne doit être utilisée qu’après Analytics le démarrage. Elle retourne NO toujours ou false avant le démarrage.

Gérer démarrer la session

Par défaut, l’ID de session dépend du cycle de vie de l’application. Si vous souhaitez contrôler manuellement le début d’une nouvelle session, suivez les étapes suivantes :

Notes

Faites attention à ce que chaque appel de l’API Analytics.StartSession() génère une nouvelle session. Si en mode suivi de session manuel, cette API ne sera pas appelée, alors tous les journaux d’envoi auront une valeur de session Null.

Notes

Faites attention au fait qu’après le lancement d’une nouvelle application, l’ID de session est régénéré.

  • Appelez la méthode suivante avant le démarrage du Kit de développement logiciel (SDK) :
[MSACAnalytics enableManualSessionTracker];
Analytics.enableManualSessionTracker()
  • Vous pouvez ensuite utiliser l’API startSession après :AppCenter.start
[MSACAnalytics startSession];
Analytics.startSession()

Taille du stockage local

Par défaut, le SDK stocke tous les journaux jusqu’à 10 Mo. Les développeurs peuvent utiliser une API pour augmenter la taille de stockage et le SDK continuera à stocker les journaux jusqu’à ce que le stockage soit saturé.

Aucun accès à Internet

Lorsqu’il n’existe aucune connectivité réseau, le SDK enregistre jusqu’à 10 Mo de journaux dans le stockage local. Une fois le stockage saturé, le SDK commence à ignorer les anciens journaux pour libérer de l’espace pour les nouveaux journaux. Une fois la connectivité réseau retournée, le SDK envoie les journaux dans le lot de 50 ou après toutes les 6 secondes (par défaut).

Notes

Les journaux de plus de 25 jours seront ignorés.

Traitement par lot des journaux des événements

Le Kit de développement logiciel (SDK) App Center charge les journaux dans un lot de 50 et si le SDK n’a pas 50 journaux à envoyer, il envoie toujours les journaux après 6 secondes (par défaut). Un maximum de trois lots peuvent être envoyés en parallèle. L’intervalle de transmission peut être modifié :

// Change transmission interval to 10 seconds.
[MSACAnalytics setTransmissionInterval:10000];
// Change transmission interval to 10 seconds.
Analytics.transmissionInterval = 10000

La valeur de l’intervalle de transmission doit être comprise entre 6 secondes et 86400 secondes (un jour) et cette méthode doit être appelée avant le démarrage du service.

Logique de nouvelle tentative et de sauvegarde

Le Kit de développement logiciel (SDK) App Center prend en charge les nouvelles tentatives de sauvegarde sur les erreurs réseau récupérables. Voici la logique de nouvelle tentative :

  • Trois tentatives maximum par requête.
  • Chaque requête a sa propre machine d’état de nouvelle tentative.
  • Tous les canaux de transmission sont désactivés (jusqu’au processus d’application suivant) après qu’une requête a épuisé toutes ses nouvelles tentatives.

Logique de back-off

  • Randomisation à 50 %, première nouvelle tentative entre 5 et 10 secondes, deuxième nouvelle tentative entre 2,5 et 5 minutes, dernière tentative entre 10 et 20 minutes.
  • Si le réseau bascule de désactivé à activé (ou du wi-fi au mobile), les états de nouvelles tentatives sont réinitialisés et les demandes sont retentées immédiatement.