Поделиться через


Аналитика Центра приложений (iOS)

Это важно

Центр приложений Visual Studio был прекращен 31 марта 2025 г., за исключением функций аналитики и диагностики, которые будут поддерживаться до 30 июня 2026 г. Подробнее.

Аналитика Центра приложений помогает понять поведение пользователей и взаимодействие с клиентами для улучшения приложения. Пакет SDK автоматически записывает количество сеансов и свойства устройства, такие как модель, версия ОС и т. д. Вы можете определить собственные пользовательские события для измерения важных для вас элементов. Все данные, полученные на портале Центра приложений, доступны для анализа данных.

Замечание

Устройства iOS без SIM-карты не отправляют отчет с кодом страны оператора на портал Центра приложений. Если вы хотите указать значение страны, используйте метод setCountryCode, чтобы переопределить код страны на основе местоположения устройства.

Замечание

В версии 4.0.0 Центра приложений были введены критические изменения. Ознакомьтесь с разделом Миграция на SDK App Center 4.0.0 и выше для переноса Центра приложений с предыдущих версий.

Следуйте разделу "Начало работы ", если вы еще не настроили пакет SDK в приложении.

Сведения о сеансе и устройстве

После добавления Аналитики Центра приложений в приложение и запуска пакета SDK он автоматически отслеживает сеансы и свойства устройства, включая версию ОС, модель и т. д. без дополнительного кода.

Замечание

В приложениях Mac Catalyst количество сеансов может быть ниже, чем в приложениях iOS. События жизненного цикла, используемые для отслеживания сеансов в Mac Catalyst, ведут себя иначе, чем в iOS.

Пакет SDK автоматически сообщает код страны пользователя, если на устройстве установлен модем мобильных данных и SIM-карта. Устройства, доступные только для Wi-Fi, по умолчанию не сообщают код страны. Чтобы задать код страны этих пользователей, необходимо получить расположение пользователя самостоятельно и использовать setCountryCode: этот метод в пакете SDK. Наш совет заключается в том, чтобы помнить об отслеживании расположений пользователей и использовать низкое разрешение расположения. В примере ниже используется kCLLocationAccuracyKilometer.

  • Убедитесь, что на устройстве включена служба расположения .
  • Получение текущего расположения устройства с помощью CLLocationManager.
  • Преобразуйте расположение в код страны ISO с помощью CLGeocoder.
  • Переопределите код страны оператора с помощью метода в SDK setCountryCode.

Используйте следующий код, чтобы получить расположение устройства и переопределить код страны оператора в приложении:

Добавьте протокол CLLocationManagerDelegate в AppDelegate и добавьте свойство locationManager:

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

В методе didFinishLaunchingWithOptions: настройте менеджер местоположения:

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

Замечание

Метод requestWhenInUseAuthorization недоступен для macOS. Удалите вызовы этого метода при разработке для macOS.

Добавьте методы делегата:

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

Пользовательские события

Вы можете отслеживать собственные пользовательские события с до 20 свойств, чтобы узнать, что происходит в вашем приложении, понять действия пользователей и просмотреть сводные данные в портале App Center.

После запуска пакета SDK используйте trackEvent:withProperties метод для отслеживания событий с помощью свойств. Вы можете отправлять до 200 различных имен событий. Кроме того, существует максимальное ограничение в 256 символов на имя события и 125 символов на имя свойства события и значение свойства события.

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

Свойства событий являются полностью необязательными. Если вы просто хотите отслеживать событие, используйте этот пример.

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

Приоритет событий и сохраняемость

Вы можете отслеживать критически важные для бизнеса события, которые имеют более высокую важность, чем другие события.

  • Разработчики могут задать приоритет событий как обычные (FlagsNormal в API) или критически важные (FlagsCritical в API).
  • События с заданным приоритетом в качестве критического будут получены из хранилища в первую очередь и отправлены до обычных событий.
  • Когда локальное хранилище заполнено, а новые события должны храниться. Самые старые события с наименьшим приоритетом удаляются сначала, чтобы освободить место для новых.
  • Если хранилище заполнено журналами с критическим приоритетом, отслеживание события с обычным приоритетом завершится ошибкой, так как пакет SDK не сможет освободить место в этом случае.
  • Если вы также используете службу сбоев, журналы сбоев задаются как критические и используют то же хранилище, что и события.
  • Интервал передачи применяется только к обычным событиям, критические события будут отправляться через 3 секунды.

Для отслеживания события как критического можно использовать следующий 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.

Приостановка и возобновление отправки журналов

Приостановка передачи событий может оказаться полезной в сценариях, когда приложению необходимо контролировать пропускную способность сети для более критически важных бизнес-потребностей. Вы можете приостановить отправку журналов в серверную часть Центра приложений. При приостановке события по-прежнему можно отслеживать и сохранять, но они не отправляются сразу. Все события, которые ваше приложение отслеживает во время приостановки, отправляются только после вызова resume.

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

Включение или отключение аналитики Центра приложений во время выполнения

Вы можете включить и отключить Аналитику Центра приложений во время выполнения. Если отключить его, пакет SDK больше не собирает аналитические сведения для приложения.

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

Чтобы снова включить аналитику Центра приложений, используйте тот же API, но передайте YES/true его в качестве параметра.

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

Состояние сохраняется в хранилище устройства во время запуска приложения.

Замечание

Этот метод должен использоваться только после того, как Analytics был запущен.

Проверьте, включена ли аналитика Центра приложений

Вы также можете проверить, включена ли аналитика Центра приложений.

[MSACAnalytics isEnabled];
Analytics.enabled

Замечание

Этот метод должен использоваться только после того как Analytics был запущен, до запуска всегда вернёт NO или false.

Управление начальным сеансом

По умолчанию идентификатор сеанса зависит от жизненного цикла приложения. Если вы хотите управлять началом нового сеанса вручную, выполните следующие действия:

Замечание

Обратите внимание, что каждый вызов API Analytics.StartSession() создаст новый сеанс. Если в режиме ручного отслеживания сеансов этот API не будет вызываться, то все журналы отправки будут иметь значение сеанса null.

Замечание

Обратите внимание, что после запуска нового приложения идентификатор сеанса будет повторно создан.

  • Вызовите следующий метод перед запуском пакета SDK:
[MSACAnalytics enableManualSessionTracker];
Analytics.enableManualSessionTracker()
  • Затем вы можете использовать startSession API после AppCenter.start.
[MSACAnalytics startSession];
Analytics.startSession()

Размер локального хранилища

По умолчанию пакет SDK сохраняет все журналы до 10 МБ. Разработчики могут использовать API для увеличения размера хранилища , и пакет SDK будет хранить журналы до тех пор, пока хранилище не будет заполнено.

Нет доступа к Интернету

Если сетевое подключение отсутствует, пакет SDK сохраняет до 10 МБ журналов в локальном хранилище. После полного завершения хранилища пакет SDK начинает удалять старые журналы, чтобы освободить место для новых журналов. По умолчанию после возврата сетевого подключения SDK отправляет журналы партиями по 50 или каждые 6 секунд.

Замечание

Журналы старше 25 дней будут удалены.

Журналы событий пакетной обработки

SDK Центра приложений загружает журналы пакетами по 50, и если SDK не имеет 50 журналов для отправки, он по-прежнему будет отправлять журналы через 6 секунд (по умолчанию). В параллельном режиме может быть отправлено не более трех пакетов. Интервал передачи можно изменить:

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

Значение интервала передачи должно составлять от 6 секунд до 86400 секунд (один день), и этот метод должен вызываться до запуска службы.

Логика повторной попытки и постепенного отступления

Пакет SDK для Центра приложений поддерживает повторные попытки восстановления при возникновении ошибок сети, доступных для восстановления. Ниже приведена логика повторных попыток:

  • Максимум три попытки на каждую заявку.
  • Каждый запрос имеет собственный компьютер состояния повтора.
  • Все каналы передачи отключены (до следующего процесса приложения) после того, как один запрос исчерпывает все его повторные попытки.

Логика резервного копирования

  • 50% рандомизация, первая повторная попытка в диапазоне от 5 до 10 секунд, вторая повторная попытка от 2,5 до 5 минут, последняя попытка от 10 до 20 минут.
  • Если сетевые переключатели переключаются с выключенного состояния на включенное (или с wi-fi на мобильные устройства), состояния повторных попыток сбрасываются, и запросы повторяются немедленно.