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

Важно!

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

Узнайте больше о сроках поддержки и альтернативных вариантах.

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

Примечание

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

Примечание

4.0.0 В версии Центра приложений были введены критические изменения. Чтобы перенести Центр приложений с предыдущих версий, следуйте инструкциям в разделе Миграция в пакет SDK для Центра приложений 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 свойств , чтобы узнать, что происходит в приложении, понять действия пользователей и просмотреть статистические выражения на портале Центра приложений.

После запуска пакета 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 на мобильное устройство), состояния повторных попыток сбрасываются, и запросы немедленно повторяются.