Реалізація реферальної геймифікації (запроси друга та отримай бонус) у мобільному застосунку
Реферальна програма виглядає просто — поділився ссилкою, друг встановив, обидва отримали бонус. На практиці дві третини реалізацій мають баги в атрибуції або виплаті бонусу. Найчастіша проблема: друг встановив застосунок, але бонус не зачислився. Користувачі злятися, пишуть у підтримку. Атрибуція установки до реферальної ссилки — технічно нетривіальна задача.
Атрибуція установки
Deferred Deep Link — ключовий механізм. Користувач нажимає реферальну ссилку на iOS, потрапляє в App Store (застосунок не встановлений), встановлює, відкриває — застосунок повинен «вспомнити», що відкрилось по реферальній ссилці конкретного користувача.
Нативний iOS Universal Link та Android App Link не зберігають контекст при проходженні через Store. Потрібен deferred deep link SDK:
-
Branch.io — відраслевий стандарт для referrals. 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 днів.







