---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://appmetrica.yandex.by/docs/en/sdk/ios/analytics/ios-listen.md
  - https://appmetrica.yandex.by/docs/ru/sdk/ios/analytics/ios-listen.md
  - href: ru/sdk/ios/analytics/ios-listen.md
    type: text/markdown
    title: Markdown version
  - href: ../../../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://appmetrica.yandex.by/docs/ru/llms.txt

# Отслеживание активности пользователей

<!-- source: ru/sdk/_includes/listen-intro.md -->
Сессия в AppMetrica — период взаимодействия пользователя с приложением.

**Фоновая сессия**

Фоновая сессия начинается с инициализации AppMetrica SDK.

Если во время фоновой сессии AppMetrica получила системное событие [`onResume()`](https://developer.android.com/guide/components/activities/activity-lifecycle#onresume) для Android или [`UIApplicationDidBecomeActiveNotification`](https://developer.apple.com/documentation/uikit/uiapplicationdidbecomeactivenotification) для iOS, то начинается пользовательская сессия.

Все события, которые были отправлены до системных событий, относятся к фоновой сессии.

Примеры фоновой сессии:
  
- Период от нажатия на иконку приложения до отображения интерфейса.
- Запуск сервисов, принимающих push-уведомления.

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

Пользовательская сессия начинается, когда AppMetrica получает системные события:

- Для Android: [`onResume()`](https://developer.android.com/guide/components/activities/activity-lifecycle#onresume).
- Для iOS: [`UIApplicationDidBecomeActiveNotification`](https://developer.apple.com/documentation/uikit/uiapplicationdidbecomeactivenotification).

Пользовательская сессия заканчивается, когда истекает таймаут сессии. Таймаут сессии отсчитывается с момента сворачивания приложения.

Все события, которые были отправлены после системных событий, относятся к пользовательской сессии.

По умолчанию AppMetrica считает сессию новой, если пользователь вернулся в приложение через [продолжительный промежуток](*timeout-session) времени после того, как приложение переключилось в фоновый режим (пользователь свернул приложение, открыл системные настройки).
<!-- endsource: ru/sdk/_includes/listen-intro.md -->

## Установка длительности таймаута сессии {#timeout}

<!-- source: ru/sdk/_includes/timeout-notify-listen.md -->
Длительность таймаута — период, который должен пройти с момента сворачивания приложения до его следующего открытия. Длительность таймаута настраивается в SDK.

- Если приложение будет открыто заново до истечения таймаута — продолжится текущая сессия.
- Если приложение будет открыто заново после истечения таймаута — начнется новая сессия.
<!-- endsource: ru/sdk/_includes/timeout-notify-listen.md -->

{% list tabs group=instructions %}

  - Swift

    Чтобы изменить длительность таймаута, передайте значение в секундах в свойство `sessionTimeout` конфигурации `AppMetricaConfiguration`.

    По умолчанию длительность таймаута сессии равна 10 секундам. Это минимально допустимое значение свойства `sessionTimeout`.

    ```swift translate=no
    // Creating an extended library configuration.
    let configuration = AppMetricaConfiguration(apiKey: "API key")
    // Setting the session timeout.
    configuration?.sessionTimeout = 15
    // Initializing the AppMetrica SDK.
    AppMetrica.activate(with: configuration!)
    ```

 - Objective-C
  
    Чтобы изменить длительность таймаута, передайте значение в секундах в свойство `sessionTimeout` конфигурации `AMAAppMetricaConfiguration`.

    По умолчанию длительность таймаута сессии равна 10 секундам. Это минимально допустимое значение свойства `sessionTimeout`.

    ```obj-c translate=no
    // Creating an extended library configuration.
    AMAAppMetricaConfiguration *configuration = [[AMAAppMetricaConfiguration alloc] initWithAPIKey:@"API key"];
    // Setting the session timeout.
    configuration.sessionTimeout = 15;
    // Initializing the AppMetrica SDK.
    [AMAAppMetrica activateWithConfiguration:configuration];
    ```

{% endlist %}

## Отслеживание сессий вручную {#listen}

По умолчанию AppMetrica отслеживает жизненный цикл приложения в автоматическом режиме. Чтобы отслеживать сессии вручную:

1. Инициализируйте библиотеку с выключенным автоматическим отслеживанием сессий `sessionsAutoTracking`.

   {% list tabs group=instructions %}

   - Swift

     ```swift translate=no
     // Creating an extended library configuration.
     if let configuration = AppMetricaConfiguration(apiKey: "API key") {
        // Disabling automatic tracking user activity.
        configuration.sessionsAutoTracking = false
        // ...
        // Initializing the AppMetrica SDK.
        AppMetrica.activate(with: configuration)
     }
     ```

   - Objective-C

     ```obj-c translate=no
     // Creating an extended library configuration.
     AMAAppMetricaConfiguration *configuration = [[AMAAppMetricaConfiguration alloc] initWithAPIKey:@"API key"];
     // Disabling automatic tracking user activity.
     configuration.sessionsAutoTracking = NO;
     // ...
     // Initializing the AppMetrica SDK.
     [AMAAppMetrica activateWithConfiguration:configuration];
     ```

   {% endlist %}

2. Настройте контроль сессий с помощью методов `resumeSession` и `pauseSession`.

   {% list tabs group=instructions %}

   - Swift

     ```swift translate=no
     AppMetrica.resumeSession()
     // ...
     AppMetrica.pauseSession()
     ```

   - Objective-C

     ```obj-c translate=no
     [AMAAppMetrica resumeSession];
     // ...
     [AMAAppMetrica pauseSession];
     ```

   {% endlist %}

При использовании ручного отслеживания убедитесь, что активная сессия всегда завершается вызовом метода `pauseSession`. Если вы не вызовете метод `pauseSession`, сессия будет завершена при следующем запуске приложения.

## Отслеживание сессий для репортеров {#reporter-listen}

Для корректного отслеживания сессий репортеров необходимо вручную настроить отправку событий о начале и приостановке сессии для каждого репортера:

{% list tabs group=instructions %}

- Swift

  ```swift translate=no
  guard let reporter = AppMetrica.reporter(for: "API key") else {
      print("AppMetrica reporter initialization failed.")
      return // or return someDefaultValue or throw someError
  }
  reporter.resumeSession()
  // ...
  reporter.reportEvent(name: "Updates installed", onFailure: { (error) in
      print("REPORT ERROR: \(error.localizedDescription)")
  })
  // ...
  reporter.pauseSession()
  ```

- Objective-C

  ```obj-c translate=no
  id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:@"API key"];
  [reporter resumeSession];
  // ...
  [reporter reportEvent:@"Updates installed" onFailure:^(NSError *error) {
      NSLog(@"REPORT ERROR: %@", [error localizedDescription]);
  }];
  // ...
  [reporter pauseSession];
  ```

{% endlist %}

## Сессии для App Extension

По умолчанию AppMetrica SDK не отслеживает сессии для App Extension и вся активность будет считаться в фоновых сессиях. При необходимости можно использовать методы из раздела [отслеживание сессий вручную](#listen).

<!-- source: ru/_includes/feedback-button-3.md -->
Если вы не нашли ответ на свой вопрос, то вы можете задать его через форму обратной связи. Пожалуйста, опишите возникшую проблему как можно подробнее. Если возможно, приложите скриншот.

<a href="../../../troubleshooting/feedback-new">
  <span class="button">Написать в службу поддержки</span>
</a>

<a href="../../../troubleshooting/feedback-docs">
  <span class="button">Предложить улучшение для документации</span>
</a>
<!-- endsource: ru/_includes/feedback-button-3.md -->

[*timeout-session]: Таймаут сессии, который настраивается в SDK.