← Назад к вопросам

Как попасть клиенту в приложение чтобы определить источник сессии?

2.0 Middle🔥 121 комментариев
#Аналитика мобильных приложений#Атрибуция и маркетинг

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как попасть клиенту в приложение чтобы определить источник сессии?

Отслеживание источников трафика в мобильном приложении

Этот вопрос о Attribution (атрибуции) - как определить, откуда пришел пользователь. В мобильных приложениях это сложнее чем в веб, потому что нет встроенного механизма (как UTM параметры). Я расскажу о разных способах отслеживания.

1. Deep Links - основной способ

Deep Link это специальная ссылка, которая открывает приложение и передает информацию о том, откуда пришел пользователь.

Пример:

Обычная ссылка на веб: https://myapp.com/products/123

Deep Link в приложение: myapp://products/123?utm_source=instagram&utm_campaign=summer_sale

Когда пользователь кликает deep link:

  1. Если приложение установлено → открывается приложение
  2. Если не установлено → редирект в App Store (this is called "Deferred Deep Link")
  3. После установки → приложение открывается на нужной странице с параметрами

Структура Deep Link

myapp://screen_name?param1=value1&param2=value2

Примеры:
myapp://product?id=123&utm_source=email
myapp://offer?code=SUMMER20&utm_campaign=promo
myapp://feed?tab=recommendations&utm_source=push

2. UTM параметры в Deep Links

Чтобы отслеживать источник, использую стандартные UTM параметры:

Обязательные:

  • utm_source - источник трафика (google, facebook, email, partner_site)
  • utm_medium - тип канала (organic, cpc, email, push, social)
  • utm_campaign - название кампании (summer_sale, black_friday)

Опциональные:

  • utm_content - А/B вариант (button_v1, banner_v2)
  • utm_term - ключевое слово

Примеры:

Из Instagram рекламы:
myapp://product?id=123&utm_source=instagram&utm_medium=social&utm_campaign=summer2025

Из Email кампании:
myapp://offer?code=WELCOME&utm_source=email&utm_medium=email&utm_campaign=onboarding

Из Google Play поиска:
myapp://search&utm_source=google&utm_medium=organic&utm_campaign=appstore

3. Реализация отслеживания в приложении

На уровне ОС (iOS + Android)

iOS (Swift):

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        guard let url = userActivity.webpageURL else { return }
        
        // Парсим deep link
        let components = URLComponents(url: url, resolvingAgainstBaseURL: true)
        let params = components?.queryItems
        
        // Извлекаем utm параметры
        let utm_source = params?.first(where: { $0.name == "utm_source" })?.value
        let utm_campaign = params?.first(where: { $0.name == "utm_campaign" })?.value
        
        // Отправляем в аналитику
        Analytics.logSessionStart(source: utm_source, campaign: utm_campaign)
    }
}

Android (Kotlin):

fun handleDeepLink(intent: Intent) {
    val deepLink = intent.data
    
    if (deepLink != null) {
        val utm_source = deepLink.getQueryParameter("utm_source")
        val utm_campaign = deepLink.getQueryParameter("utm_campaign")
        
        Analytics.logSessionStart(source = utm_source, campaign = utm_campaign)
    }
}

На уровне аналитики (Firebase Analytics, Amplitude)

Основная реализация обычно идет через SDK аналитики:

// Firebase Analytics (iOS)
Analytics.logEvent(AnalyticsEventViewItem, parameters: [
    AnalyticsParameterSource: utm_source ?? "unknown",
    AnalyticsParameterCampaign: utm_campaign ?? "organic",
    AnalyticsParameterMedium: utm_medium ?? "direct"
])

// Amplitude
Amplitude.instance().logEvent("app_open", withEventProperties: [
    "utm_source": utm_source,
    "utm_campaign": utm_campaign,
    "utm_medium": utm_medium
])

4. Сложность с Deferred Deep Links

Проблема: Пользователь кликает deep link, но приложение не установлено. Его перенаправляет в App Store. После установки - как узнать, откуда он пришел?

Решение: Деferred Deep Link сервис

Использую сервисы вроде:

  • Branch.io
  • AppsFlyer
  • Adjust
  • Firebase Dynamic Links

Как работает:

1. Пользователь кликает deep link из Instagram
   myapp://product?id=123&utm_source=instagram

2. Branch.io перехватывает и сохраняет параметры
   (сохраняет в cloud)

3. Если приложение не установлено → редирект в App Store

4. Пользователь устанавливает приложение

5. Приложение запускается → звонит в Branch API
   "Я новый пользователь, дайте мне мой deep link"

6. Branch.io возвращает сохраненные параметры
   {utm_source: "instagram", id: "123"}

7. Приложение открывает нужный product и логирует source

5. Отслеживание других источников

Push-уведомления

Когда я отправляю push, включаю параметры:

{
  "title": "Летняя распродажа!",
  "body": "Скидка 50% на все товары",
  "deeplink": "myapp://offer?utm_source=push&utm_campaign=summer_sale"
}

Email

В каждом email использую unique ссылку:

<a href="https://myapp.com/offer?code=USER123&utm_source=email&utm_campaign=onboarding">
  Получить оффер
</a>

Если пользователь уже установил приложение, браузер автоматически перенаправляет на deep link.

Партнёрские ссылки

https://myapp.com/ref?partner_id=123&utm_source=partner&utm_medium=affiliate

App Store Search

Когда пользователь находит приложение в App Store поиском (organic), параметры:

  • utm_source=appstore
  • utm_medium=organic
  • utm_campaign=app_search

Это автоматически логируется через AppStore Connect.

6. Хранение и анализ данных

Как я сохраняю информацию о источнике

При first install или first app launch, я сохраняю:

CREATE TABLE user_acquisition (
    user_id UUID,
    utm_source VARCHAR,
    utm_medium VARCHAR,
    utm_campaign VARCHAR,
    utm_content VARCHAR,
    utm_term VARCHAR,
    install_date TIMESTAMP,
    first_session_date TIMESTAMP,
    ip_address VARCHAR,
    device_model VARCHAR,
    os VARCHAR,
    app_version VARCHAR
);

Анализ:

-- Какой источник дает больше всего пользователей?
SELECT utm_source, COUNT(*) as installs
FROM user_acquisition
WHERE install_date >= NOW() - INTERVAL '30 days'
GROUP BY utm_source
ORDER BY installs DESC;

-- ROI по источникам (сколько потратили на каждый источник?)
SELECT 
    u.utm_source,
    COUNT(u.user_id) as users,
    SUM(ad_cost.cost) / COUNT(u.user_id) as CAC,  -- Customer Acquisition Cost
    SUM(revenue.amount) / COUNT(u.user_id) as LTV  -- Lifetime Value
FROM user_acquisition u
JOIN ad_cost ON u.utm_campaign = ad_cost.campaign
JOIN revenue ON u.user_id = revenue.user_id
GROUP BY u.utm_source;

-- Какой источник дает лучший retention?
SELECT 
    u.utm_source,
    COUNT(DISTINCT u.user_id) as total_users,
    COUNT(DISTINCT CASE WHEN s.session_date > u.install_date + INTERVAL '7 days' THEN u.user_id END) as d7_active,
    ROUND(100.0 * COUNT(DISTINCT CASE WHEN s.session_date > u.install_date + INTERVAL '7 days' THEN u.user_id END) / COUNT(DISTINCT u.user_id), 2) as d7_retention_pct
FROM user_acquisition u
LEFT JOIN sessions s ON u.user_id = s.user_id
GROUP BY u.utm_source
ORDER BY d7_retention_pct DESC;

7. Сложности и edge cases

Проблема 1: Attribution Last-click

Если пользователь видел рекламу в Facebook, потом гуглил приложение, потом установил через Google Play - какой источник считать?

Решение: Отслеживать весь путь (multi-touch attribution):

{
  "user_id": "123",
  "touchpoints": [
    {"source": "facebook", "date": "2025-01-10", "type": "impression"},
    {"source": "google", "date": "2025-01-11", "type": "click"},
    {"source": "appstore", "date": "2025-01-11", "type": "install"}
  ],
  "first_touch": "facebook",
  "last_touch": "appstore"
}

Проблема 2: Отсутствие параметров

Не все пользователи приходят по deep link (например, поиск в App Store). Для них использую:

utm_source: "organic" или "direct"
utm_medium: "organic" или "direct"

Проблема 3: IDFA в iOS

В iOS 14.5+ Apple требует разрешение пользователя на отслеживание (IDFA). Много пользователей отказывают. Решение:

  • Использовать SKAdNetwork (Apple's attribution)
  • Использовать Fingerprinting (Device properties)
  • Работать с aggregate данными

8. Лучшие практики

DO:

  • Всегда включать utm параметры в deep links
  • Использовать сервис deferred deep links (Branch, AppsFlyer)
  • Логировать источник при первом запуске
  • Анализировать retention и LTV по источникам
  • Использовать A/B тесты для разных источников

DON'T:

  • Не доверять только Last-touch attribution
  • Не забывать про privacy regulations (GDPR, CCPA)
  • Не смешивать web UTM с app tracking (разные системы)
  • Не забывать обновлять параметры при новых кампаниях

Заключение

Отслеживание источников в мобильном приложении - это ключевой инструмент для понимания customer acquisition. Правильная атрибуция позволяет:

  • Определить, какие каналы дают качественных пользователей
  • Оптимизировать маркетинговый бюджет
  • Рассчитать CAC и ROI
  • Улучшать retention по источникам

Без правильного отслеживания все решения - это просто гадание.