Розробка мобільного додатку для кешбек-сервісу
Кешбек-сервіс—це посередник між користувачем, магазином та партнерською мережею. Технічно: додаток трекає переходи користувача в магазини (через deeplink або трекінгові ссилки), партнерська мережа підтверджує покупку, сервіс нараховує вознаграждення. Головна технічна складність—атрибуція: довести, що користувач совершив покупку саме через додаток, а не напрямую.
Трекінг партнерських переходів
Для стеження переходів використовуються трекінгові ссилки партнерських мереж (Admitad, CJ, Impact, власні). Схема роботи:
- Додаток відкриває трекінгову ссилку:
https://trk.admitad.com/g/xxxxx?uid={userId} - Трекер редиректит в магазин, встановлює cookie
- Користувач робить покупку
- Магазин відправляє конверсію в мережу з
uid - Мережа присилає постбек на сервер сервісу
- Сервер нараховує кешбек користувачу з даним
uid
Перехід в магазин—через SFSafariViewController (iOS) або Custom Tabs (Android). Не можна використовувати вбудований WKWebView—cookie з нього ізольовані та не передаються в Safari. Саме це часта причина «втрати» атрибуції.
import SafariServices
func openShopWithTracking(shop: Shop) {
guard let trackingUrl = buildTrackingUrl(shop: shop, userId: currentUser.id) else { return }
let safariVC = SFSafariViewController(url: trackingUrl)
safariVC.preferredControlTintColor = .systemBlue
present(safariVC, animated: true)
// Фіксуємо перехід локально для статистики
analyticsService.track(.shopOpened(shopId: shop.id))
}
// Android: Chrome Custom Tabs для трекінгу
val customTabsIntent = CustomTabsIntent.Builder()
.setShowTitle(true)
.setColorScheme(CustomTabsIntent.COLOR_SCHEME_LIGHT)
.build()
customTabsIntent.launchUrl(this, trackingUri)
Нарахування та виведення кешбеку
Кешбек зберігається як внутрішній баланс користувача. Статусы нарахування:
| Статус | Опис |
|---|---|
PENDING |
Перехід зафіксований, покупка не підтверджена |
CONFIRMED |
Магазин підтвердив покупку (зазвичай 30–90 днів) |
AVAILABLE |
Доступний для виведення |
WITHDRAWN |
Виведено |
CANCELLED |
Покупка повернута, кешбек скасовано |
Виведення коштів—через СБП, перевід на картку або конвертація в промокод. Інтеграція з виплатними провайдерами: YooKassa Payouts, Tinkoff Payouts API, МТС Pay.
Пошук та фільтрування магазинів
Список магазинів—основний екран додатку. Фільтри: категорія, розмір кешбеку, тип (фіксований % або фіксована сума), нові / популярні.
На бекенді—повнотекстовий пошук по PostgreSQL з tsvector або Elasticsearch. Клієнт дебаунсирує пошукові запити:
// iOS: пошук з debounce через Combine
@Published var searchQuery = ""
init() {
$searchQuery
.debounce(for: .milliseconds(300), scheduler: RunLoop.main)
.removeDuplicates()
.filter { $0.count >= 2 }
.sink { [weak self] query in
self?.loadShops(query: query)
}
.store(in: &cancellables)
}
Повідомлення про акції
Підвищений кешбек на обмежений період—головний інструмент утримання користувачів. Додаток показує в ленті акції з таймером зворотного відліку. Push-повідомлення про початок акцій—через FCM/APNs з сегментацією за категоріями інтересів користувача.
Ориентири по терміне
Базова версія (каталог магазинів, трекінг, історія нараховань): 4–6 тижнів. Виведення коштів через СБП/картку—ще 1–2 тижні. Вартість розраховується індивідуально.







