Розробка мобільного додатку для купонів та знижок
Ми спеціалізуємося на створенні мобільних додатків для програм лояльності: від MVP до масштабованих рішень. Додаток для купонів та знижок здається простим, але реальні складнощі починаються з інтеграції геолокації («знижки поруч зі мною»), push-сповіщень («ти в торговому центрі — ось знижка»), партнерських API торгових мереж та системи погашення купонів без шахрайства. За 5+ років на ринку ми реалізували понад 30 проектів у цій ніші, тому знаємо кожну нетривіальну деталь. Один із ключових викликів — захист від скріншотів та повторного використання купонів. Наш підхід поєднує токенізацію та dynamic QR, що зводить фрод до мінімуму.
Геолокаційні пропозиції
Чому геолокація критична для конверсії?
«Знижки поруч» — це або простий запит до API з поточними координатами, або proximity marketing через геофенсинг. Без геолокації ви втрачаєте до 40% кліків — користувач не хоче вводити адресу. Реалізація має бути безшовною та енергоефективною.
Простий варіант: користувач відкриває додаток → поточні координати → GET /offers?lat=55.75&lng=37.61&radius=1000. Працює лише при відкритому додатку.
Геофенсинг: додаток реєструє геофенси навколо торгових точок-партнерів. При вході — push-сповіщення з актуальними знижками цього магазину. На iOS — CLCircularRegion, ліміт 20 регіонів одночасно (див. Documentation Apple Core Location). Якщо партнерів 500 — потрібна динамічна реєстрація найближчих 20 при зміні місцезнаходження.
Алгоритм: при значній зміні місцезнаходження (startMonitoringSignificantLocationChanges()) — запит 20 найближчих магазинів, перереєстрація геофенсів. На Android — аналогічно, але через GeofencingClient з лімітом 100 геофенсів.
BLE-beacon proximity (Eddystone, iBeacon): додаток виявляє маяки в магазині — push з персоналізованою пропозицією. CoreBluetooth / Android BluetoothLeScanner. Вимагає від партнера встановлення маяків, що ускладнює B2B-продаж. Зате точність — метри, не сотні метрів.
Як налаштувати геофенсинг за 3 кроки?
- Отримайте список координат усіх магазинів-партнерів.
- На iOS зареєструйте до 20
CLCircularRegionз радіусом 100–500 метрів. На Android використовуйтеGeofencingClientз радіусом від 50 метрів. - В обробнику входу в регіон (iOS:
CLLocationManagerDelegate, Android:GeofencingEvent) відправте push-сповіщення з персоналізованим купоном.
Відображення та фільтрація купонів
Список купонів — RecyclerView (Android) / LazyVStack (SwiftUI). Картка купона: зображення, назва магазину, розмір знижки, термін дії, відстань. Skeleton loading поки завантажується.
Фільтри: категорія, відстань, відсоток знижки, онлайн/офлайн. Сортування: за відстанню, за розміром знижки, за терміном закінчення. Все на сервері — клієнт лише передає параметри фільтрації.
Картковий flip-анімація для розкриття умов купона — CATransform3DMakeRotation (UIKit) / .rotation3DEffect (SwiftUI). Не обов'язкова, але виглядає живо.
Як захистити купони від шахрайства?
Це ключове технічне завдання. Купон не можна зробити статичним QR-кодом — його можна сфотографувати та використовувати багаторазово.
Одноразовий токен: при натисканні «використати» — запит до сервера, сервер генерує JWT з exp: now + 300sec та used: false. QR-код з токеном показується 5 хвилин. Касир сканує → сервер позначає used: true. Повторне сканування — помилка «купон вже використано». Токен безпечніший за статичний QR у 100 разів.
Динамічний QR: QR змінюється кожні 30 секунд (TOTP-підхід). Сервер знає поточне значення, касир бачить актуальний код. Складніший у реалізації, захист від скріншоту.
Штрих-код магазину: користувач показує номер картки лояльності, знижка застосовується на касі автоматично. Потребує інтеграції з касовим ПЗ партнера.
Для більшості кейсів достатньо одноразового токена з 5-хвилинним lifetime.
| Метод | Безпека | Складність | Час життя |
|---|---|---|---|
| Статичний QR | Низька | Дуже низька | Нескінченно |
| Одноразовий токен | Висока | Середня | 5 хвилин |
| Динамічний QR (TOTP) | Дуже висока | Висока | 30 секунд |
Деталі реалізації push-сповіщень
Для iOS використовуємо APNs через UNUserNotificationCenter, для Android — FCM з FirebaseMessagingService. Для гео-тригерів на iOS потрібен дозвіл requestAlwaysAuthorization. На Android — ACCESS_BACKGROUND_LOCATION. Без явної згоди користувача push не прийдуть.
Як персоналізувати пропозиції для користувачів?
Історія купонів користувача → ML-рекомендації (опціонально). Простий варіант без ML: категорії інтересів у профілі, push лише за цікавими категоріями. Користувач вибрав «кафе» та «спорт» — не отримує купони на одяг.
Обрані магазини: підписка на знижки конкретного партнера. При появі нового купона — push-сповіщення з deep link на картку купона.
| Підхід | Персоналізація | Складність |
|---|---|---|
| Категорії інтересів | Середня | Низька |
| ML-рекомендації | Висока | Висока |
| Підписка на магазини | Середня | Низька |
Інтеграція з партнерами
Партнерський кабінет (веб) — окрема тема. Мобільна частина лише споживає API. Але API має підтримувати різні моделі купонів: відсоткова знижка, фіксована сума, «купи N отримай M», бонусні бали.
Кешбек — якщо користувач показав купон, касир підтвердив через партнерський термінал → додаток нараховує бали. Баланс балів у додатку, історія нарахувань, виведення або обмін на купони.
Стек: Flutter або React Native, Google Maps SDK для карти з магазинами, Firebase Cloud Messaging для push, Mapbox для геофенсингу (або нативні API), CoreBluetooth / BLE для beacon.
Що входить в роботу
- Аналітика та прототипування: UX-дослідження, user stories, прототип у Figma.
- Дизайн: UI/дизайн-система, адаптивні екрани під iOS та Android.
- Розробка: Backend (API, адмінка), мобільний додаток (iOS/Android/Flutter/RN), інтеграція з партнерськими API.
- Тестування: функціональне, навантажувальне, на реальних пристроях (iOS/Android).
- Деплой: публікація в App Store та Google Play, налаштування push-сповіщень (APNs/FCM).
- Документація: архітектурна, API, інструкції для партнерів.
- Навчання: тренінг для адміністраторів партнерського кабінету.
- Підтримка: гарантійне обслуговування 1 місяць, далі за SLA.
Термін: від 8 до 14 тижнів. Вартість розраховується індивідуально.
Отримайте консультацію по вашому проекту — напишіть нам. Замовте розробку під ключ з гарантією якості.







