Реализация реферальной программы в мобильном приложении
Реферальная программа — это attribution на мобильной платформе, а не просто «поделись ссылкой». Главная техническая сложность: связать установку приложения с конкретным реферером, когда между переходом по ссылке и открытием приложения может пройти несколько дней и смена устройства.
Deep linking и deferred deep linking
Обычная deep link не работает: если приложение не установлено, пользователь попадает в App Store и ссылка теряется. Нужен deferred deep link — механизм, при котором ссылка «запоминается» и передаётся приложению при первом запуске после установки.
Инструменты: Branch.io, Firebase Dynamic Links (deprecated с 2025, не рекомендую для новых проектов), AppsFlyer OneLink, Adjust. Branch наиболее универсален.
// iOS — Branch SDK
Branch.getInstance().initSession(launchOptions: launchOptions) { params, error in
if let referrerID = params?["referrer_id"] as? String {
// Первый запуск с реферальным параметром
ServerAPI.attributeInstall(referrerID: referrerID, newUserID: currentUser.id)
}
}
Branch отслеживает клик по ссылке через fingerprinting (IP + User-Agent + время) и сопоставляет с установкой в 2-часовом окне. Точность ~85-95% — не 100%, но для бизнес-метрик достаточно.
Генерация реферальных ссылок
Каждый пользователь получает уникальную short link:
let linkProperties = BranchLinkProperties()
linkProperties.channel = "app_share"
linkProperties.feature = "referral"
let universalObject = BranchUniversalObject(canonicalIdentifier: "referral/\(userID)")
universalObject.contentMetadata.customMetadata["referrer_id"] = userID
universalObject.getShortUrl(with: linkProperties) { url, error in
self.referralLink = url
}
На Android — аналогично через Branch SDK для Android.
Attribution и начисление бонусов
После успешной attribution (новый пользователь установил и открыл приложение) — серверная логика:
- Проверяем, что
new_user_idдействительно новый (нет предыдущих сессий, нет совпадения по device fingerprint с существующими аккаунтами — для защиты от накруток через переустановку) - Создаём запись в
referral_attributions: referrer_id, referred_id, attributed_at, status=pending - Начисляем бонус рефереру только после выполнения условия — например, после первой покупки реферала или после 7 дней активности
Ранее начислять нельзя: пользователь установит приложение, получит бонус для реферера, удалит — это мусорный трафик.
Условия и антифрод
Базовые защиты: один реферальный бонус за одно устройство (device_id), ограничение на количество рефералов в месяц, минимальный возраст аккаунта реферера для участия в программе (например, 7 дней).
Для серьёзных объёмов — интеграция с антифрод-сервисом (Adjust Fraud Prevention, Branch Fraud Protection): они проверяют поведенческие паттерны и сигналы эмулятора.
Экраны в приложении
Страница реферальной программы: текущий баланс реферальных бонусов, количество приглашённых, история начислений, кнопка «Поделиться» с нативным share sheet.
Сроки — 3–5 дней: интеграция Branch SDK (iOS + Android), серверная attribution логика, антифрод базовый, UI экраны.







