Будет ли относиться метка к каналу установки приложения если пользователь запустит сессию через 3 дня или через 40 дней после установки?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Будет ли относиться метка к каналу установки при отложенной сессии
Краткий ответ
Да, пользователь будет относиться к тому же каналу установки, независимо от того, запустит он сессию через 3 дня или 40 дней после установки. Метка канала привязана к мобильному устройству/рекламному идентификатору (IDFA/AAID), а не к времени активации.
Подробное объяснение
Как работает атрибуция канала установки
Стандартный процесс:
-
Момент установки (t=0):
- Пользователь кликает на рекламу (Facebook, Google, TikTok и т.д.)
- ОС фиксирует source/channel в install referrer (Android) или Apple SKAdNetwork (iOS)
- При первом запуске приложение передаёт эту информацию на сервер
- БД сохраняет:
user_id,channel,install_date,idfa/aaid
-
Последующие сессии:
- Мобильное приложение содержит persistent identifier (IDFA/AAID)
- Этот identifier остаётся постоянным на устройстве
- При каждой сессии система определяет пользователя по этому ID
- Обращается в БД: находит исходную запись о канале установки
- Атрибуция полностью детерминирована
Структура данных в БД
CREATE TABLE users (
user_id UUID PRIMARY KEY,
idfa_or_aaid VARCHAR(50) UNIQUE, -- постоянный ID
install_date TIMESTAMP,
install_channel VARCHAR(50), -- Facebook, Google, Organic и т.д.
first_session_date TIMESTAMP,
-- остальные поля
);
-- При каждой сессии:
-- SELECT install_channel FROM users WHERE idfa_or_aaid = ?;
-- Результат будет ВСЕГДА одинаковый
Физика процесса
День 1 (установка):
- Клик на рекламу → install referrer = "Facebook"
- Пользователь устанавливает, но не открывает
- На сервере: ничего, ждём первой сессии
День 3 (первая сессия):
- Пользователь открывает приложение
- SDK обращается к OS, читает install referrer = "Facebook"
- Отправляет на сервер:
{idfa: "xyz...", channel: "Facebook", install_date: "День 1"} - БД сохраняет
- Атрибуция: Facebook
День 40 (вторая сессия):
- Пользователь открывает приложение снова
- SDK находит в памяти IDFA = "xyz..."
- Обращается к БД: "Кто это?"
- БД возвращает:
{channel: "Facebook", install_date: "День 1"} - Атрибуция: Facebook (та же!)
Почему это работает?!
1. Install referrer (Android)
Операционная система запоминает информацию о том, из какого источника была установка:
// В Android:
InstallReferrerClient client = InstallReferrerClient.newBuilder(context).build();
ReferrerDetails response = client.getInstallReferrer();
String referrer = response.getInstallReferrer();
// Результат: "utm_source=facebook&utm_medium=cpc"
// Это значение СОХРАНЯЕТСЯ в ОС и не меняется
2. SKAdNetwork (iOS 14.3+)
Apple использует более сложный механизм, но принцип тот же:
- После клика Apple запоминает атрибуцию
- Посылает в приложение через
postbackURL - Это не меняется со временем
3. Persistent Device ID (IDFA/AAID)
-- За 40 дней IDFA не меняется (если пользователь не переустанавливает):
SELECT user_id, idfa_or_aaid, install_channel, DATEDIFF(DAY, install_date, current_session_date) as days_since_install
FROM users
WHERE idfa_or_aaid = 'ABC123XYZ';
-- Результат:
user_id | idfa_or_aaid | install_channel | days_since_install
---------|--------------|-----------------|-------------------
uuid123 | ABC123XYZ | Facebook | 3
---------|--------------|-----------------|-------------------
uuid123 | ABC123XYZ | Facebook | 40 <- ОДНО И ТО ЖЕ!
Исключения и edge cases
Когда атрибуция МОжет потеряться:
-
Переустановка приложения:
- Install referrer очищается
- Если нет интернета при переустановке → новый user_id, потеря атрибуции
- Решение: использовать универсальные ссылки (деепов) для привязки
-
Смена устройства:
- IDFA/AAID привязан к конкретному устройству
- На новом устройстве → новый user_id
- Решение: привязка по аккаунту (если есть логин)
-
Очистка памяти (iOS):
- На iOS 14+ пользователь может явно очистить IDFA
- Приложение потеряет информацию
- Решение: использовать server-side matching по email/аккаунту
-
Проблемы с интернетом:
- День 1: установка, но нет интернета
- День 3: первый запуск с интернетом
- Обычно SDK хранит локально install referrer → отправляет при появлении интернета
- Результат: атрибуция всё равно сохранится
Время жизни install referrer
-- В Google Play Services install referrer хранится ДО ПЕРВОГО запуска приложения
SELECT install_date, 'install referrer доступен' FROM users WHERE install_date < NOW() - INTERVAL 90 DAY;
-- Через 90 дней пустого приложения install referrer может очиститься (по политике Google)
-- Но если хотя бы раз открыли → он будет сохранён на сервере
Лучшие практики
1. Сохраняй на сервере
# При первой сессии:
user.install_channel = get_install_referrer() # Один раз!
user.install_date = now()
db.save(user)
# При последующих сессиях:
# Просто ищем пользователя по IDFA, не пытаемся переопределить канал
user = db.find_by_idfa(request.idfa)
return user.install_channel # Всегда вернёт исходный канал
2. Документируй исходный канал
CREATE TABLE user_attribution (
user_id UUID,
install_date TIMESTAMP,
install_channel VARCHAR(50),
source VARCHAR(100), -- utm_source
medium VARCHAR(50), -- utm_medium (cpc, organic, push и т.д.)
campaign VARCHAR(100), -- utm_campaign
creative_id VARCHAR(100), -- для конкретного объявления
PRIMARY KEY (user_id)
);
-- Сохраняй полный UTM, не только канал
-- Для анализа через 40 дней
3. Проверяй данные
-- Вероятный вопрос: а если у пользователя разные каналы в разные дни?
SELECT idfa_or_aaid, COUNT(DISTINCT install_channel) as unique_channels
FROM users
GROUP BY idfa_or_aaid
HAVING COUNT(DISTINCT install_channel) > 1;
-- Если вернулись результаты → есть проблема в трекинге
-- Обычно не должно быть результатов (один IDFA = один канал)
Ответ на конкретный вопрос
День 3: Пользователь откроет приложение → сессия будет отнесена к Facebook ✅ День 40: Пользователь откроет приложение снова → сессия будет отнесена к Facebook ✅
Метка канала привязана к устройству, а не ко времени сессии. Поэтому через 3 дня, 40 дней или даже спустя год (если пользователь не переустанавливал приложение) — канал будет одинаковый.
Это базовый принцип мобильной атрибуции, и он работает во всех ведущих платформах (Firebase, Amplitude, AppsFlyer, Branch и т.д.).