Клиенты приходят с запросом "сделать мобильное крипто-казино" — и сразу упираются в стену: 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 недели
Свяжитесь с нами для оценки вашего проекта. Получите консультацию по стратегии публикации и стеку.







