Розроблення мобільного застосунку для лотереї
Лотерейне застосунок виглядає простіше букмекерського — немає real-time котировок, немає live dealer. Але у нього своя специфіка: розиграші зі строгим часовим вікном, верифікація білетів, мгновенні розиграші (scratch cards) з вимогою на анімацію, та піковими навантаженнями перед дедлайном продажу білетів.
Основні технічні сценарії
Продажа білетів з дедлайном. Лотерея закриває продажи білетів у момент розиграшу (або за N хвилин до). Застосунок повинен точно відображати countdown та заблокувати покупку ровно у момент дедлайна. Проблема: Date() на пристрої можна перевести — сервер має бути джерелом правди часу. Отримуємо server time при відкритті застосунку, вичісляємо зміщення від Date(), використовуємо скорегований час для countdown (serverNow + (Date() - syncedAt)). Дедлайн перевіряється і на сервері при кожній спробі покупки.
Номери білета. Користувач вибирає числа (як у Keno або Powerball аналозі) або отримує Quick Pick (випадковий набір). Quick Pick на клієнті — CSPRNG (SecRandomCopyBytes на iOS, SecureRandom на Android), але фінальний вибір валідується та зберігається на сервері. Інтерфейс вибору чисел — grid з N ячейок з multi-select, анімацією вибору через withAnimation (SwiftUI) / animateContentChange (Compose).
Мгновенні лотереї (scratch cards). Візуально — шар срібла поверх зображення, який стирається жестом. Реалізація: Metal або SpriteKit на iOS, Canvas з PorterDuff.Mode.DST_OUT на Android. Поріг стирання (70% площі = розкрити весь приарт) з SKTexture mask або через Path coverage calculation. Результат визначається сервером при покупці білета та передається зашифрованим — клієнт розшифровує тільки після повного стирання, запобігаючи перегляду результату до анімації.
Push-уведомлення про результати
Уведомлення «Ви виграли!» або «Результати розиграшу» має приходити одразу після розиграшу. Схема: сервер проводить розиграш → перевіряє winning білети → відправляє персоналізовані push через FCM/APNS. UNNotificationServiceExtension на iOS дозволяє додати rich notification — зображення виграшних чисел прямо у уведомленні. Deep link з уведомлення → екран результатів конкретного білета.
Проблема пикових пушей: якщо 1 мільйон користувачів отримують push одночасно після крупного розиграшу — FCM batch sending. Сервер відправляє не одним запитом, а через Firebase Admin SDK sendEach() батчами по 500 токенів, обробляючи InvalidRegistration (застарілі токени) для чищення бази.
Верифікація фізичних білетів
Якщо оператор має та розничні точки — потрібна QR/barcode scanning для верифікації паперових білетів через застосунок. AVFoundation (AVCaptureSession + AVMetadataObjectTypeQRCode) на iOS, ML Kit Barcode Scanning на Android — швидше та надійніше ніж ZXing. Сканований код → API запит → відображення статусу білета (winner/loser, prize amount).
Платежи
Покупка білетів: Apple Pay (PKPaymentRequest) та Google Pay для UX без friction. Card через Stripe/Braintree hosted fields. У ряді юрисдикцій лотерейні білети — предмет державного регулювання, застосунок обов'язаний показувати responsible gambling warnings та дозволяти встановити ліміти на траты.
Стек
Flutter або React Native — оправдані тут, так як немає жорстких вимог до real-time WebSocket перформансу. Scratch card анімація — нативний модуль (Platform Channel / Native Module) для Metal/Canvas операцій. Core Data / Room для історії білетів та локального кеша результатів. Firebase для push.
Процес роботи
Аналіз лотерейної механіки та регуляторних вимог → дизайн білетного flow → розроблення (покупка, scratch cards, результати, історія) → платіжна інтеграція → push-уведомлення → QA (включаючи deadline edge cases, оффлайн сценарії) → публікація.
Ориентири по срокам
Застосунок з продажею числових лотерей, історією білетів, push про результати та платежами: 4–8 тижнів. З мгновенними scratch card лотереями, фізичним сканером та responsible gambling інструментами: 2–3 місяця.







