Session в мобильной аналитике — это период непрерывного взаимодействия пользователя с приложением, ограниченный по времени. Метрика служит базой для расчёта удержания, вовлечённости и LTV. По данным Adjust, 2025, медианная длина сессии в приложениях составляет 4–7 минут, но сильно варьируется между категориями. Понимание сессионных метрик критично для оценки качества пользовательского опыта.
Главное
Сессия — это временной отрезок, в течение которого пользователь активно взаимодействует с приложением. Сессия начинается с момента открытия приложения (или возвращения из background) и заканчивается после периода бездействия или закрытия.
Разные аналитические платформы по-разному определяют границы сессии. Firebase Analytics считает сессию завершённой после 30 минут бездействия, AppsFlyer — после 60 минут, Amplitude — после 5 минут или по событию session_end. Единого стандарта не существует.
Метрики на основе сессий — основа для расчёта удержания (Retention Rate), глубины вовлечённости (Stickiness Ratio) и распределения пользователей по частоте использования (Session Frequency). Без корректного определения сессии все производные метрики будут неверными.
По данным Mixpanel (2024), приложения, улучшившие Session Duration на 15%, демонстрируют рост LTV на 22% в течение квартала. Это прямая корреляция между временем в приложении и монетизацией.
Измерение сессии базируется на событиях жизненного цикла приложения: open (session_start) и close (session_end). В перерыве между ними регистрируются все пользовательские действия.
// Простейший трекер сессий для Android
class SessionTracker {
private var sessionStart: Long = 0L
private val SESSION_TIMEOUT = 30 * 60 * 1000L
fun onAppOpened() {
sessionStart = System.currentTimeMillis()
Analytics.logEvent("session_start")
}
fun onAppClosed() {
val duration = System.currentTimeMillis() - sessionStart
Analytics.logEvent("session_end") {
param("duration_ms", duration)
}
}
fun isNewSession(lastActive: Long): Boolean {
return (System.currentTimeMillis() - lastActive) > SESSION_TIMEOUT
}
}
Код отслеживает начало и конец сессии через системные колбэки. Параметр SESSION_TIMEOUT (30 минут) определяет, когда возврат из фона считается новой сессией, а не продолжением предыдущей.
| Платформа | Timeout сессии | Способ определения |
|---|---|---|
| Firebase Analytics | 30 мин | Автоматически, без кастомизации |
| Amplitude | 5 мин (по умолчанию) | Настраивается через SDK |
| AppsFlyer | 60 мин | Фиксированный интервал |
| Mixpanel | 30 мин | Настраивается через опцию minimumSessionDuration |
| Adjust | 60 мин | Автоматически, привязан к жизненному циклу |
Выбор timeout влияет на метрики: короткий timeout (5 мин) создаёт больше сессий, длинный (60 мин) — объединяет взаимодействия. Главное — зафиксировать правило и не менять его при сравнении периодов.
Анализ сессий опирается на четыре базовые метрики. Каждая раскрывает определённый аспект поведения пользователя.
Длительность сессии — среднее время, которое пользователь проводит в приложении за один визит. Для новостных приложений норма — 2–4 минуты, для игр — 8–15 минут, для стриминговых сервисов — 20+ минут. Если Session Duration падает, это сигнал проблем с контентом или производительностью.
Интервал между сессиями — время между окончанием предыдущей сессии и началом следующей. Короткий интервал (минуты или часы) указывает на высокую вовлечённость. Длинный интервал (дни) — на низкий интерес или утилитарный сценарий использования, когда приложение нужно редко.
Число сессий на пользователя за период (день, неделю, месяц) — индикатор Stickiness. Формула: DAU / MAU (Day Active Users / Monthly Active Users). Значение выше 20% считается хорошим, выше 50% — отличным для большинства категорий приложений.
Глубина сессии — количество экранов или действий за одну сессию. Показывает, насколько пользователь погружается в функционал приложения. Низкая глубина при высокой длительности указывает на проблемы с навигацией.
Платформенные различия в жизненном цикле приложения напрямую влияют на определение сессии. iOS и Android по-разному обрабатывают background-состояния и уведомления.
На Android сессия начинается при вызове onStart() первого Activity и заканчивается при onStop() последнего Activity. Однако система может убить процесс в фоне, что ложно завершит сессию. Рекомендуется использовать Application.ActivityLifecycleCallbacks для надёжного отслеживания.
class AnalyticsApp : Application() {
private var activityReferences = 0
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityStarted(act: Activity) {
if (++activityReferences == 1) {
Analytics.trackSessionStart()
}
}
override fun onActivityStopped(act: Activity) {
if (--activityReferences == 0) {
Analytics.trackSessionEnd()
}
}
})
}
}
Счётчик activityReferences определяет, видит ли пользователь хотя бы один экран. Когда активность становится 0 — приложение ушло в фон, сессия завершена.
На iOS сессия привязана к методам applicationDidBecomeActive и applicationDidEnterBackground. Уведомления о нажатии на push-уведомление могут искусственно поднимать счётчик сессий — это нужно учитывать при аналитике.
Swift пример:
import UIKit
class AppDelegate: UIResponder, UIApplicationDelegate {
func applicationDidBecomeActive(_ application: UIApplication) {
Analytics.trackSessionStart()
}
func applicationDidEnterBackground(_ application: UIApplication) {
Analytics.trackSessionEnd()
}
}
Обратите внимание: на iOS переключение между приложениями (App Switcher) не завершает сессию — срабатывает только уход в глубокий фон или свайп закрытия.
Анализ сессий выходит за рамки простого подсчёта. Сегментация и когортный анализ раскрывают паттерны вовлечённости, которые нельзя увидеть на агрегированных данных.
Группируйте пользователей по неделе установки и смотрите среднее число сессий за первые 7 дней. Если у когорты последних установок Sessions Per User ниже, чем у старых, это сигнал ухудшения онбординга или качества трафика.
Аномалии в сессионных метриках — ранние индикаторы проблем. Внезапный рост Short Sessions (до 5 секунд) после релиза указывает на баг при запуске. Падение Session Duration на 30% за день — возможный сбой сервера или смена API. Настройте мониторинг с порогами: если средняя Session Duration упала более чем на 2 стандартных отклонения от 7-дневного скользящего среднего — алерт в систему.
Используйте сегментацию по версии приложения в сессионных отчётах. Версия 3.2.0 показывает Session Duration 4 минуты, версия 3.2.1 — 2 минуты. Причина — изменение в онбординге. Откат версии восстанавливает метрику. Без сегментации по версии вы бы увидели среднее падение, но не нашли бы причину.
Power Users (5+ сессий в день) — ваша ключевая аудитория. Casual Users (1–2 сессии в неделю) — группа для реактивации. Dormant Users (0 сессий за 30 дней) — кандидаты на ретаргетинг или отписку от пушей.
Для каждого сегмента считайте отдельные метрики: Session Duration для Power Users покажет глубину использования, а для Casual — барьеры входа. По данным Amplitude (2024), приложения, персонализирующие контент под сегмент сессий, увеличивают Session Duration на 18% в среднем за месяц.
Retention считается через сессии: пользователь удержан на Day N, если у него была хотя бы одна сессия. Однако разные продукты требуют разного определения. Для социальных сетей сессия может быть 1 секунда (просто открыл проверить уведомления), для стримингового сервиса — 15 минут.
Используйте Uninstall-сессии как индикатор качества: если после обновления выросло число коротких сессий (менее 10 секунд), пользователи не находят нужный функционал. Это ранний сигнал UX-проблемы до роста деинсталлов.
Свяжите сессии с источником трафика: пользователи из платных каналов должны иметь больше сессий и большую Session Duration. Если органический трафик показывает Session Duration на 40% выше платного, проблема в качестве таргетинга. Сессионная атрибуция помогает оптимизировать бюджет на привлечение.
Часто задаваемые вопросы
Средняя длительность сессии зависит от категории: игры — 8–15 минут, соцсети — 5–10 минут, утилиты — 1–3 минуты. Важнее тренд: если Session Duration падает на 20% за месяц, нужен аудит UX.
Многие аналитические SDK не фиксируют end-событие при сворачивании — они ждут timeout. Если пользователь свернул приложение на 1 минуту и вернулся, это считается одной сессией. Только после timeout (30–60 мин) начинается новая сессия.
Retention пользователя на Day N рассчитывается как доля установивших, у кого была хотя бы одна сессия в этот день. Если сессии не отслеживаются корректно, удержание будет систематически занижено или завышено.
Да, background-активность (плейбек музыки, навигация, синхронизация) может удерживать приложение в активном состоянии. Лучше отделять foreground-сессии (пользователь видит экран) от processor-сессий (работа в фоне без UI).
Для подписочных сервисов (стриминг, фитнес, обучение) рекомендуется timeout 5–10 минут. Пользователи часто возвращаются после короткого перерыва — и каждая пауза должна считаться новой сессией, чтобы не искажать Session Duration.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также