Розроблення мобільного застосунку для ставок на спорт
Букмекерське застосунок — це real-time система з тисячами одночасно оновлюваних котировок, строгими вимогами до геолокаційного контролю та складною інфраструктурою платежів. Затримка оновлення коефіцієнтів у 3–5 секунд — користувачі ставлять по застарілих даних, оператор несе збитки. Центральна технічна задача — актуальність даних.
Real-time котировки: не polling, а push
WebSocket — єдиний розумний підхід для live-котировок. REST polling кожні 3 секунди при 500 відкритих матчах створює неприйнятну навантаження та все одно не дає real-time. Схема: одне WebSocket-з'єднання, підписки на события (SUBSCRIBE {market_ids: [...]}), сервер присилає дифф ({market_id: 123, outcomes: [{id: 1, odds: 2.45}]}), клієнт застосовує дифф до локального state.
На iOS: URLSessionWebSocketTask + Combine publisher для розповсюджування оновлень по ViewModels. На Android: OkHttp WebSocket + StateFlow / SharedFlow через BettingRepository. При втраті з'єднання — переподключення з exponential backoff та перепідписка на ті ж markets. Візуально — мікроанімація зміни коефіцієнта (зелений/червоний flash при зростанні/падінні через animate() у Compose або UIView.animate у UIKit).
Suspended markets. Перед крупним события або при технічних проблемах матч йде в suspend — ставки заблоковані. Застосунок отримує {market_id: 123, status: "suspended"} та немедленно блокує кнопку «Поставити» без переходу на інший екран. Якщо користувач вже у процесі заповнення купону — показуємо inline передупередження.
Купон ставки та betslip
Betslip — технічно найскладніший UI-компонент у betting-застосунку. Користувач додає кілька вибірок — застосунок рахує accumulator (експрес) odds у реальному часі: total_odds = outcome_1_odds × outcome_2_odds × ... × outcome_n_odds. При зміні будь-яких коефіцієнтів поки betslip відкритий — оновлення з анімацією та пропозицією прийняти нові умови (Accept Changes).
Bet placement flow:
- Користувач нажимає «Поставити» → локальна валідація (баланс, мін/макс ставка).
- POST
/betsз{selections, stake, idempotency_key}→ сервер резервує суму. - Сервер повертає
{bet_id, status: "accepted"/"pending"/"rejected", actual_odds}. - Якщо
actual_oddsзмінилися — показуємо діалог «Коефіцієнт змінився з 2.50 на 2.45. Прийняти?».
idempotency_key (UUID, генерується на клієнті) — обов'язковий. Дублікований POST при проблемах з мережею не повинен створювати дві ставки.
Геолокаційний контроль
Ліцензійні вимоги більшості юрисдикцій — ставки тільки з дозволеної території. На мобілці: запитуємо CLLocationManager (requestWhenInUseAuthorization) або LocationManager (Android FusedLocationProviderClient) при відкритті застосунку. Координати відправляємо на сервер, сервер через GeoIP + device location приймає рішення.
VPN detection: порівнюємо IP-геолокацію з device GPS. Істотне розходження (IP у іншій країні) — флаг для додаткової верифікації, не немедленний бан.
Платежи та вивід
Поповнення/вивід у betting-застосунках працює через платіжні провайдери (Stripe, Adyen, PayOp, локальні PSP). Нативний UI для введення карти: Stripe iOS SDK (STPPaymentCardTextField) / Stripe Android SDK — дані карти ніколи не проходять через наш сервер, тільки токен. Для виводу — верифікація особистості (KYC) через Sumsub або аналог.
Apple Pay / Google Pay — стандартні для швидкого депозиту: PKPaymentRequest / PaymentRequest через Google Pay API. Інтеграція за 1–2 дні при готовому бекенді.
Стек та архітектура
Нативна iOS + Android розроблення переважніша для перформанс-критичних live-котировок. Flutter — допустимий при єдиній flutter-team. React Native — тільки з JSI для WebSocket без JS thread bottleneck.
Clean Architecture: BettingRepository (WebSocket + REST), BetSlipViewModel (accumulator calculation, validation), PaymentRepository (PSP integration), GeoLocationService. Локальна БД: відкриті ставки, історія — Room/Core Data з міграціями.
Процес роботи
Аудит ліцензійних вимог та вибір юрисдикції → проектування API + WebSocket контракту → розроблення real-time котировок та betslip → платіжна інтеграція → KYC → геолокаційний контроль → QA (нагрузкове тестування WebSocket при 1000+ одночасних оновлень) → публікація.
App Store: gambling-категорія вимагає спеціального entitlement та доведення ліцензії. Google Play — аналогічно, Gambling policy з регіональними обмеженнями.
Ориентири по срокам
MVP (live та prematch котировки, одиночні та експрес ставки, базові платежи): 8–12 тижнів. Повнофункціональна платформа з live streaming, cash out, багатовалютністю та мобільним застосунком для обох платформ: 3–5 місяців.







