Реализация реферальной геймификации (пригласи друга и получи бонус) в мобильном приложении
Реферальная программа выглядит просто — поделился ссылкой, друг установил, оба получили бонус. На практике две трети реализаций имеют баги в атрибуции или выплате бонуса. Самая частая проблема: друг установил приложение, но бонус не зачислился. Пользователи злятся, пишут в поддержку. Атрибуция установки к реферальной ссылке — технически нетривиальная задача.
Атрибуция установки
Deferred Deep Link — ключевой механизм. Пользователь нажимает реферальную ссылку на iOS, попадает в App Store (приложение не установлено), устанавливает, открывает — приложение должно «вспомнить», что открылось по реферальной ссылке конкретного пользователя.
Нативный iOS Universal Link и Android App Link не сохраняют контекст при прохождении через Store. Нужен deferred deep link SDK:
-
Branch.io — отраслевой стандарт для refrerrals. SDK на iOS и Android при первом открытии запрашивает Branch API, который матчит установку с ранее перешедшей по ссылке сессией по device fingerprint (IP + device model + OS version + timestamp correlation). Возвращает
referrer_idиcampaign_data. - Firebase Dynamic Links — бесплатная альтернатива, но Google объявил о deprecation (2024). Требует миграции.
- Adjust / AppsFlyer — MMP (mobile measurement partners), более точная атрибуция через probabilistic fingerprinting + deterministic (IDFA/GAID при согласии).
На клиенте при первом запуске: BranchUniversalObject.getFirstReferringParams() → если содержит referrer_id → POST на сервер /referrals/activate с {referrer_id, new_user_id}.
Серверная валидация
Сервер не просто начисляет бонус при /referrals/activate. Проверяет:
-
new_user_idещё не активировал реферал (один реферальный бонус на аккаунт). -
referrer_id— реальный пользователь. - Условие выполнения (если бонус начисляется не за установку, а за первую покупку — ждём события
first_purchase). - Anti-fraud: IP нового пользователя не совпадает с IP реферера (самореферал).
Бонус начисляется через LedgerService.credit() — атомарно, с transaction_type: referral_reward.
UI: реферальный экран
Реферальная ссылка — https://app.example.com/r/{referral_code} — копируется в буфер одним тапом или шарится через UIActivityViewController / ShareCompat.IntentBuilder. QR-код реферальной ссылки — CIFilter(name: "CIQRCodeGenerator") на iOS, ZXing или ML Kit Barcode на Android для генерации.
Прогресс реферальной программы: сколько друзей приглашено, сколько активировались, сколько бонусов заработано. Список друзей с их статусом — invited / installed / activated / rewarded. Это мотивирует шарить больше.
Анимация начисления бонуса при открытии приложения после успешного реферала — Lottie, confetti через CAEmitterLayer, с суммой бонуса в центре.
Геймификация уровней реферальной программы
Базовая схема: пригласи 1 → получи бонус X. Геймифицированная: достигни уровней. Например:
| Уровень | Приглашений | Бонус за каждого |
|---|---|---|
| Bronze | 1–4 | 50 монет |
| Silver | 5–14 | 75 монет |
| Gold | 15+ | 100 монет |
Прогресс-бар к следующему уровню виден на реферальном экране. Уведомление «Тебе осталось пригласить 2 друга до Gold» — push через FCM/APNS с deep link на реферальный экран.
Двусторонний бонус (и реферер, и новый пользователь получают награду) конвертирует лучше одностороннего — обязательно показывать обе суммы в шаринговом сообщении: «Приходи, получишь 100 монет, я тоже получу 100».
Процесс работы
Выбор и интеграция deferred deep link SDK → серверная логика валидации реферала → UI реферального экрана + анимации → push-уведомления о статусе → QA (тест установки по реферальной ссылке на реальных устройствах) → публикация.
Ориентиры по срокам
Реализация с Branch.io, реферальным экраном, серверной валидацией и базовыми анимациями — 2–3 рабочих дня при готовом API. С геймифицированными уровнями и аналитикой реферальной программы — 4–5 дней.







