Udostępnij za pośrednictwem


Analiza usługi App Center (macOS)

Ważne

Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Chociaż możesz nadal używać programu Visual Studio App Center do momentu jego pełnego wycofania, istnieje kilka zalecanych alternatyw, do których można rozważyć migrację.

Dowiedz się więcej o osiach czasu pomocy technicznej i alternatywach.

Usługa App Center Analytics pomaga zrozumieć zachowanie użytkowników i zaangażowanie klientów w celu ulepszenia aplikacji. Zestaw SDK automatycznie przechwytuje liczbę sesji i właściwości urządzenia, takie jak model, wersja systemu operacyjnego itp. Możesz zdefiniować własne zdarzenia niestandardowe, aby mierzyć istotne elementy. Wszystkie przechwycone informacje są dostępne w portalu Centrum aplikacji, aby analizować dane.

Uwaga

Kraj przewoźnika i nazwa przewoźnika nie są dostępne w usłudze App Center Analytics dla systemu macOS, ale możesz ustawić kraj przewoźnika za pomocą lokalizacji urządzenia.

Uwaga

4.0.0 Wprowadzono zmiany powodujące niezgodność w usłudze App Center. Postępuj zgodnie z sekcją Migrate to App Center SDK 4.0.0 and higher (Migrowanie do zestawu APP Center SDK 4.0.0 i nowszych), aby przeprowadzić migrację centrum aplikacji z poprzednich wersji.

Postępuj zgodnie z sekcją Wprowadzenie , jeśli zestaw SDK nie został jeszcze skonfigurowany w aplikacji.

Informacje o sesji i urządzeniu

Po dodaniu usługi App Center Analytics do aplikacji i uruchomieniu zestawu SDK będzie ona automatycznie śledzić sesje i właściwości urządzenia, w tym wersję systemu operacyjnego, model itd., bez dodatkowego kodu.

Uwaga

W aplikacjach Mac Catalyst liczba sesji może być niższa niż w aplikacjach systemu iOS. Zdarzenia cyklu życia używane do śledzenia sesji na komputerze Mac Catalyst zachowują się inaczej niż w systemie iOS.

Zestaw SDK automatycznie zgłasza kod kraju użytkownika, jeśli urządzenie ma zainstalowany modem danych mobilnych i kartę SIM. Urządzenia tylko do sieci Wi-Fi nie będą domyślnie zgłaszać kodu kraju. Aby ustawić kod kraju tych użytkowników, musisz samodzielnie pobrać lokalizację użytkownika i użyć setCountryCode: metody w zestawie SDK. Nasza rada polega na uważnym śledzeniu lokalizacji użytkowników i używaniu niskiej rozdzielczości lokalizacji. W poniższym przykładzie użyto metody kCLLocationAccuracyKilometer.

  • Upewnij się, że na urządzeniu włączono usługi lokalizacyjne .
  • Pobierz bieżącą lokalizację urządzenia przy użyciu polecenia CLLocationManager.
  • Przekonwertuj lokalizację na kod kraju ISO przy użyciu polecenia CLGeocoder.
  • Zastąpij kod kraju przewoźnika przy użyciu metody zestawu SDK setCountryCode .

Użyj następującego kodu, aby pobrać lokalizację urządzenia i zastąpić kod kraju przewoźnika w aplikacji:

Dodaj protokół CLLocationManagerDelegate do elementu AppDelegate i dodaj właściwość locationManager:

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

W pliku didFinishLaunchingWithOptions: metoda set-up menedżera lokalizacji:

  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()

Uwaga

Metoda requestWhenInUseAuthorization jest niedostępna dla systemu macOS. Usuń wywołania tej metody podczas tworzenia aplikacji dla systemu macOS.

Dodaj metody delegatów:

- (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)")
}

Zdarzenia niestandardowe

Możesz śledzić własne zdarzenia niestandardowe z maksymalnie 20 właściwościami , aby wiedzieć, co dzieje się w aplikacji, zrozumieć akcje użytkownika i wyświetlić agregacje w portalu Centrum aplikacji.

Po uruchomieniu zestawu SDK użyj trackEvent:withProperties metody , aby śledzić zdarzenia za pomocą właściwości. Można wysłać do 200 odrębnych nazw zdarzeń. Ponadto istnieje maksymalny limit 256 znaków na nazwę zdarzenia i 125 znaków na nazwę właściwości zdarzenia i wartość właściwości zdarzenia.

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

Właściwości zdarzeń są całkowicie opcjonalne — jeśli chcesz tylko śledzić zdarzenie, użyj tego przykładu:

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

Priorytet zdarzenia i trwałość

Możesz śledzić zdarzenia krytyczne dla działania firmy, które mają wyższą ważność niż inne zdarzenia.

  • Deweloperzy mogą ustawić priorytet zdarzeń jako Normalny (FlagsNormal w interfejsie API) lub Krytyczne (FlagsCritical w interfejsie API).
  • Zdarzenia z priorytetem ustawionym jako Krytyczne będą najpierw pobierane z magazynu i wysyłane przed zdarzeniami normalnymi .
  • Gdy magazyn lokalny jest pełny i należy przechowywać nowe zdarzenia. Najstarsze zdarzenia o najniższym priorycie są najpierw usuwane, aby zrobić miejsce na nowe.
  • Jeśli magazyn jest pełen dzienników z priorytetem krytycznym , śledzenie zdarzenia z priorytetem Normalnym zakończy się niepowodzeniem, ponieważ zestaw SDK nie może zrobić miejsca w tym przypadku.
  • Jeśli używasz również usługi Awarie , dzienniki awarii są ustawione jako Krytyczne i współużytkują ten sam magazyn co zdarzenia.
  • Interwał transmisji jest stosowany tylko do zdarzeń normalnych . Zdarzenia krytyczne będą wysyłane po 3 sekundach.

Do śledzenia zdarzenia jako krytycznego można użyć następującego interfejsu API:

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.

Wstrzymywanie i wznawianie wysyłania dzienników

Wstrzymywanie transmisji zdarzeń może być przydatne w scenariuszach, gdy aplikacja musi kontrolować przepustowość sieci w celu uzyskania bardziej krytycznych potrzeb biznesowych. Możesz wstrzymać wysyłanie dzienników do zaplecza centrum aplikacji. Po wstrzymaniu zdarzenia mogą być nadal śledzone i zapisywane, ale nie są wysyłane od razu. Wszystkie zdarzenia śledzone przez aplikację podczas wstrzymania będą wysyłane tylko po wywołaniu metody resume.

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

Włączanie lub wyłączanie analizy centrum aplikacji w czasie wykonywania

Możesz włączać i wyłączać analizę centrum aplikacji w czasie wykonywania. Jeśli ją wyłączysz, zestaw SDK nie będzie zbierać dodatkowych informacji analitycznych dotyczących aplikacji.

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

Aby ponownie włączyć analizę usługi App Center, użyj tego samego interfejsu API, ale przekaż YES/true go jako parametr.

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

Stan jest utrwalany w magazynie urządzenia w przypadku uruchamiania aplikacji.

Uwaga

Ta metoda musi być używana tylko po Analytics uruchomieniu.

Sprawdzanie, czy usługa App Center Analytics jest włączona

Możesz również sprawdzić, czy usługa App Center Analytics jest włączona, czy nie.

[MSACAnalytics isEnabled];
Analytics.enabled

Uwaga

Ta metoda musi być używana tylko po Analytics uruchomieniu, zawsze będzie zwracać NO lub false przed rozpoczęciem.

Zarządzanie sesją początkową

Domyślnie identyfikator sesji zależy od cyklu życia aplikacji. Jeśli chcesz ręcznie kontrolować rozpoczęcie nowej sesji, wykonaj następujące kroki:

Uwaga

Zwróć uwagę, że każde wywołanie interfejsu API Analytics.StartSession() spowoduje wygenerowanie nowej sesji. Jeśli w trybie ręcznego śledzenia sesji ten interfejs API nie zostanie wywołany, wszystkie dzienniki wysyłające będą miały wartość sesji o wartości null.

Uwaga

Zwróć uwagę, że po uruchomieniu nowej aplikacji identyfikator sesji zostanie ponownie wygenerowany.

  • Przed uruchomieniem zestawu SDK wywołaj następującą metodę:
[MSACAnalytics enableManualSessionTracker];
Analytics.enableManualSessionTracker()
  • Następnie możesz użyć interfejsu API po wykonaniu startSession polecenia AppCenter.start:
[MSACAnalytics startSession];
Analytics.startSession()

Rozmiar magazynu lokalnego

Domyślnie zestaw SDK przechowuje wszystkie dzienniki do 10 MB. Deweloperzy mogą użyć interfejsu API, aby zwiększyć rozmiar magazynu , a zestaw SDK będzie przechowywać dzienniki do momentu zapełnienia magazynu.

Brak dostępu do Internetu

Jeśli nie ma łączności sieciowej, zestaw SDK zapisuje do 10 MB dzienników w magazynie lokalnym. Po zapełnieniu magazynu zestaw SDK zacznie odrzucać stare dzienniki, aby zapewnić miejsce na nowe dzienniki. Po powrocie łączności sieciowej zestaw SDK wysyła dzienniki w partii 50 lub po 6 sekundach (domyślnie).

Uwaga

Dzienniki starsze niż 25 dni zostaną odrzucone.

Przetwarzanie wsadowe dzienników zdarzeń

Zestaw SDK centrum aplikacji przekazuje dzienniki w partii 50, a jeśli zestaw SDK nie ma 50 dzienników do wysłania, nadal będzie wysyłać dzienniki po 6 sekundach (domyślnie). Może istnieć maksymalnie trzy partie wysyłane równolegle. Interwał transmisji można zmienić:

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

Wartość interwału transmisji musi wynosić od 6 sekund do 86400 sekund (jeden dzień), a ta metoda musi być wywoływana przed uruchomieniem usługi.

Ponów próbę i wycofywanie logiki

Zestaw SDK usługi App Center obsługuje ponawianie prób w przypadku błędów sieci możliwych do odzyskania. Poniżej znajduje się logika ponawiania prób:

  • Trzy próby maksymalne na żądanie.
  • Każde żądanie ma własną maszynę stanu ponawiania.
  • Wszystkie kanały transmisji są wyłączone (do następnego procesu aplikacji) po wyczerpaniu wszystkich ponownych prób przez jedno żądanie.

Logika wycofywania

  • 50% losowości, najpierw spróbuj ponownie z zakresu od 5 do 10 sekund, ponawianie próby z zakresu od 2,5 do 5 minut, ostatnia próba między 10 a 20 minutami.
  • Jeśli sieć wyłącza się do włączonej (lub z sieci wi-fi do urządzeń przenośnych), stany ponawiania prób są resetowane, a żądania są natychmiast ponawiane.