Реализация системы виртуальной валюты (баллы/монеты) в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация системы виртуальной валюты (баллы/монеты) в мобильном приложении
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    864
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация системы виртуальной валюты (баллы/монеты) в мобильном приложении

Виртуальная валюта — это не просто счётчик в базе данных. Это экономическая система внутри приложения, у которой есть инфляция, читерство и требования к транзакционности. Баги в начислении монет — это либо пустые кошельки пользователей (злые отзывы), либо переполнение (убытки для бизнеса).

Транзакционность — основа

Каждая операция с балансом — это транзакция с debit/credit записью в ledger таблице, не просто UPDATE balance = balance + N. Причина: атомарность. Если начислить 100 монет и одновременно списать 50 за покупку — при гонке двух запросов к полю баланса получаем некорректный результат. Ledger + SELECT FOR UPDATE или оптимистичная блокировка (UPDATE balance WHERE balance = :expected) на сервере.

Клиент при любой транзакции получает полный ответ: {balance: 1250, delta: +100, transaction_id: "uuid", reason: "daily_bonus"}. Никогда не пересчитываем баланс на клиенте — только отображаем значение с сервера.

Защита от читерства

Отладочный прокси. Charles Proxy или mitmproxy позволяет пересылать запросы и изменять ответы. Если ответ /rewards/daily-bonus возвращает {"coins": 100} без подписи сервера — клиент может показать «получил 100 монет», но сервер в это время должен самостоятельно начислять и не доверять значению из ответа. Баланс на клиенте — только для отображения.

SSL Pinning. Базовая защита от MITM: TrustKit (iOS) / OkHttp CertificatePinner (Android). Не абсолютная защита — Frida или root + SSL Kill Switch обходят pinning. Но отсекает 90% script-kiddie попыток.

Rate limiting операций. Двойное нажатие кнопки «Собрать бонус» — debounce на клиенте (250ms throttle) плюс серверная защита через idempotency_key (UUID от клиента). Сервер игнорирует повторный запрос с тем же ключом в течение 60 секунд.

UI: анимация начисления монет

Монеты «летят» к счётчику — стандартная анимация для reward. Реализация: частицы через CAEmitterLayer (iOS) или Jetpack Compose Canvas с кастомным анимированным Modifier. Несколько монет-иконок вылетают из источника (позиция кнопки/иконки события), летят по кривой Безье к виджету баланса, при каждом «попадании» счётчик инкрементируется на 1. Плавный нарастающий эффект через CAKeyframeAnimation с path.

Счётчик баланса при обновлении — number rolling animation: цифры прокручиваются сверху вниз как одометр. На iOS через UILabel с CATransition или кастомный AnimatedNumberView в SwiftUI. На Android — ValueAnimator с TextSwitcher.

Покупка монет через IAP

Consumable продукты в StoreKit 2: «100 монет за $0.99», «550 монет за $4.99» и т.д. Product.purchase()Transaction.finish() после начисления серверного баланса — важный порядок: сначала зачисляем монеты через сервер (серверная валидация чека), потом завершаем транзакцию. Если завершить транзакцию до зачисления и приложение упадёт — пользователь заплатил, монеты не получил.

На Android: BillingClient.launchBillingFlow()Purchase.getPurchaseState() == PURCHASED → серверная валидация через Google Play Developer API → BillingClient.consumeAsync() (consumable должен быть consumed, иначе недоступен для повторной покупки).

Pending transactions (отложенные покупки на Android через семейный Google Pay или банковское подтверждение) — обрабатываем через BillingClient.PurchasesUpdatedListener, ждём подтверждения до начисления монет.

История транзакций

Пользователь хочет понять, куда ушли монеты. TransactionHistory — пагинированный список (cursor-pagination) с типами: earned_daily_bonus, earned_referral, spent_purchase, spent_unlock, purchased_iap. Фильтр по типу. Локальный кеш последних 50 операций в Core Data / Room для мгновенного отображения без сетевого запроса.

Процесс работы

Проектирование схемы ledger и защиты от читерства → разработка IAP (consumable) + серверная валидация → UI баланса + анимации → история транзакций → QA (включая тест parallel requests, pending transactions) → публикация.

Ориентиры по срокам

Полная реализация системы виртуальной валюты с IAP, анимациями и историей транзакций — 3–5 рабочих дней при готовом серверном API. Если включает проектирование серверного ledger — 1–2 недели.