Клиенты приходят с запросом "сделать мобильное крипто-казино" — и сразу упираются в стену: AppStore и Google Play блокируют gambling-приложения, Web3-кошелёк на телефоне работает иначе, а UX на маленьком экране требует перепроектирования. Мы набили шишек на десятке проектов и теперь предлагаем проверенные архитектурные решения. Один из клиентов, запуская PWA, обошёл модерацию за две недели — тогда как нативное приложение у конкурентов висело на ревью три месяца.
Почему мобильное крипто-казино сложнее веб-версии?
Apple и Google строго регулируют азартные игры. Документация Apple по гемблингу допускает gambling только в юрисдикциях с лицензией, требует геоблокировки и ручного рецензирования. Google Play — аналогично. Добавьте криптовалюту: in-app покупки за токены запрещены. В результате стандартный путь через магазины приложений часто закрыт. На мобильных устройствах дополнительно усложняется управление ключами: seed-фразы нельзя хранить в UserDefaults, а биометрия обязательна для транзакций выше порога.
Альтернативы магазинам приложений: PWA устанавливается с браузера, обходит модерацию (минус: на iOS нет push-уведомлений); WebView обёртка прошла через AppStore только при соблюдении лицензий; прямая установка APK для Android снижает доверие, но работает; нативные iOS/Android — только с лицензией Мальты, Великобритании и т.д.
Как мы обходим ограничения App Store и Google Play?
Используем комбинацию подходов. Чаще всего выбираем PWA для быстрого старта с охватом обеих платформ. Для клиентов, которым принципиально нативное приложение, настраиваем геотаргетинг — приложение видно только в разрешённых странах. Также внедряем WebView с крипто-функциями, обёрнутыми в легальный контент (например, приложение как "образовательная игра"). PWA сокращает время выхода на рынок в два раза по сравнению с нативным приложением.
Технический стек и ключевые решения
Фреймворк и Web3
Используем React Native + Expo как основу. Это даёт быстрый выход на обе платформы. Для крипто-взаимодействия — WalletConnect v2 + embedded-кошелёк Privy.
import { WalletConnectModal, useWalletConnectModal } from "@walletconnect/modal-react-native"; import { useProvider, useSigner } from "@web3modal/ethers-react-native"; function CasinoApp() { const { open, isConnected, address } = useWalletConnectModal(); const provider = useProvider(); return ( <NavigationContainer> <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Dice" component={DiceGame} /> <Stack.Screen name="Crash" component={CrashGame} /> <Stack.Screen name="Wallet" component={WalletScreen} /> </Stack.Navigator> {!isConnected && ( <ConnectWalletButton onPress={() => open()} /> )} <WalletConnectModal projectId="YOUR_PROJECT_ID" providerMetadata={{ name: "Casino App", description: "Crypto Casino", url: "https://casino.com", icons: ["https://casino.com/icon.png"], }} /> </NavigationContainer> ); } Embedded Wallet для онбординга
Для пользователей без Metamask встроили кошелёк Privy — регистрация по email или SMS. Это подняло конверсию на 35% в одном из проектов.
import { usePrivy, useWallets } from "@privy-io/expo"; function WalletManager() { const { login, user, isReady } = usePrivy(); const { wallets } = useWallets(); const embeddedWallet = wallets.find(w => w.walletClientType === "privy"); if (!user) { return ( <View style={styles.container}> <Button title="Play with Email" onPress={() => login({ type: "email" })} /> <Button title="Connect MetaMask" onPress={() => login({ type: "wallet" })} /> </View> ); } return <WalletDashboard address={embeddedWallet?.address} />; } Мобильный UX: Crash Game и биометрия
Вертикальный layout и крупные кнопки (не менее 44pt) — обязательное требование. Для Cash Out в Crash game мы добавили встряску (shake gesture) — это повышает вовлечение.
function CrashGame() { const [multiplier, setMultiplier] = useState(1.0); const [isCashedOut, setIsCashedOut] = useState(false); useShakeGesture(() => { if (!isCashedOut && multiplier > 1.5) { handleCashout(); } }); return ( <SafeAreaView style={styles.container}> <MultiplierDisplay multiplier={multiplier} /> <CrashGraph history={gameHistory} currentMultiplier={multiplier} style={styles.graph} /> <BetPanel style={styles.bottomPanel}> <BetInput /> <AutocashoutInput /> <BigButton onPress={isCashedOut ? undefined : handleCashout} disabled={isCashedOut} style={styles.cashoutButton} > CASHOUT {(betAmount * multiplier).toFixed(4)} ETH </BigButton> </BetPanel> </SafeAreaView> ); } Для транзакций выше порога (например, 0.5 ETH) применяем биометрическую аутентификацию — Face ID или Touch ID. Это и безопасность, и соответствие регуляторам.
Push-уведомления и Real-time
Уведомляем о джекпотах, начислении кэшбэка и статусе депозитов через Expo Notifications. Для игр реального времени (Crash, Jackpot) держим WebSocket-соединение с авто-восстановлением.
Сравнение подходов
| Критерий | PWA | React Native (APK/TestFlight) | Native iOS/Android |
|---|---|---|---|
| Установка | Браузер | Прямая | Магазины приложений |
| Модерация | Не требуется | Частично | Требуется лицензия |
| Push-уведомления | iOS — нет | Да | Да |
| Производительность | Средняя | Высокая | Максимальная |
| Стоимость | От $20,000 | От $40,000 | От $60,000 |
Сравнение встроенных кошельков
| Критерий | Privy | Dynamic | Magic Link |
|---|---|---|---|
| Регистрация | Email/SMS | Email/SMS/OAuth | Email/Phone |
| Поддержка EVM | Да | Да | Да |
| Некастодиальный | Да | Да | Нет |
| Конверсия в тестах | +35% | +30% | +25% |
| Цена за MAU | ~$0.10 | ~$0.08 | ~$0.12 |
Пример архитектуры push-уведомлений
Используем Expo Notifications для доставки. На iOS для PWA push не работают, поэтому для таких проектов настраиваем FCM через Webpush. Сервер отправляет нотификации через Expo Push API с очередью и ретраями.
Что входит в результат?
- Архитектурная документация (схема интеграций, decision log)
- Исходный код с комментариями на TypeScript
- Скрипты деплоя смарт-контрактов и веб-сервисов
- Документация по запуску и администрированию
- Поддержка в течение 1 месяца после запуска (баги, мониторинг)
Наши компетенции
- Более 7 лет в Web3-разработке
- Более 40 реализованных проектов для крипто-гемблинга
- Команда из senior Solidity- и React Native-разработчиков
Процесс и сроки
- Анализ юрисдикции и лицензирования — 1 неделя
- Проектирование архитектуры — 1-2 недели
- Разработка PWA или React Native — 4-14 недель в зависимости от сложности
- Интеграция кошельков и биометрии — 2-3 недели
- Тестирование и деплой — 2-4 недели
Свяжитесь с нами для оценки вашего проекта. Получите консультацию по стратегии публикации и стеку.







