- Как подключить платежи в игре на Unity и Unreal: реальный гайд без воды
- Что тебе реально нужно
- Как это работает на практике
- Что выбрать: Unity IAP или Unreal IAP?
- Что делать, если хочешь PayPal, Stripe или Bitcoin?
- Что ломается чаще всего
- Как сделать правильно — пошагово
- Что выбрать — в зависимости от твоей ситуации
- Как не попасть в ловушку
- Что делать, если всё сломалось
- Итог: что делать прямо сейчас
Как подключить платежи в игре на Unity и Unreal: реальный гайд без воды
Ты сделал игру. Она клёвая. Игроки приходят. Но вот беда — они не платят. Почему? Потому что ты не добавил удобный способ оплаты. Или добавил, но так, что игроки уходят с криками «где кнопка?».
Я не буду рассказывать, что такое SDK или как работает API. Я расскажу, как реально подключить платежи в Unity и Unreal так, чтобы игроки не ушли, а купили. Без лишних слов, без теории, только то, что работает.
Что тебе реально нужно
Ты не хочешь писать платёжную систему с нуля. Ты хочешь:
- чтобы игроки могли купить монеты, скины, премиум за 10 секунд;
- чтобы деньги приходили на твой счёт без задержек;
- чтобы не было криков в чате: «Я заплатил, а предмет не пришёл!»;
- чтобы всё работало на Android, iOS, PC и, желательно, консолях.
Всё это — задача платежного SDK. Он — мост между твоей игрой и платежными системами вроде Apple App Store, Google Play, Steam, Stripe, PayPal, Adyen и т.д.
Как это работает на практике
Представь, что игрок нажимает «Купить пакет за $4.99».
- Твоя игра (Unity или Unreal) вызывает SDK — например,
Unity IAPилиUnreal In-App Purchase. - SDK открывает встроенную систему оплаты: на iOS — это App Store, на Android — Google Play, на PC — Steam или сторонний магазин.
- Игрок вводит пароль или использует Face ID — платёж проходит через платёжную систему, а не через твой сервер.
- Платёжная система отправляет тебе подтверждение (в виде подписи или токена).
- Твой сервер (да, он нужен!) проверяет подпись, чтобы убедиться, что это не фейк.
- Ты выдаёшь игроку предмет — и всё.
Важно: ты не обрабатываешь кредитку напрямую. Ты не хранить данные карты. Ты не отвечаешь за PCI-DSS. Это всё — задача Apple, Google, Steam. Твоя задача — просто получить подтверждение и выдать товар.
Что выбрать: Unity IAP или Unreal IAP?
Оба движка имеют встроенные SDK для покупок. Но они работают по-разному.
| Критерий | Unity IAP | Unreal In-App Purchase |
|---|---|---|
| Поддержка платформ | iOS, Android, PC (Steam, Windows Store), macOS, tvOS | iOS, Android, PC (Steam, Epic Store), macOS, Xbox, PlayStation (через SDK) |
| Сложность подключения | Проще: всё в Editor, нужен только ID товара | Сложнее: требует настройки в Unreal Editor + плагин + конфигурация на стороне магазина |
| Поддержка подписок | Да, но только через Apple/Google | Да, но с ограничениями на консолях |
| Проверка подлинности | Требует ручной настройки серверной верификации | Есть примеры, но нужно самому реализовывать проверку подписи |
| Документация | Хорошая, но с кучей устаревших примеров | Плохая. Много «сделай так, как в примере» — но примеры не работают |
| Поддержка сторонних платёжных систем (Stripe, PayPal) | Только через плагины (например, Unity IAP + Stripe) |
Тоже через плагины — но в Unreal их меньше |
Если ты начинающий разработчик — выбирай Unity. Там проще. Если ты делаешь игру на консолях или хочешь глубокий контроль — Unreal, но готовься к костылям.
Что делать, если хочешь PayPal, Stripe или Bitcoin?
Apple и Google не позволяют использовать сторонние платежи в играх, если ты продаёшь цифровые товары внутри приложения. Это правило — закон. Нарушение = бан в магазине.
Но есть обходы:
- Физические товары — например, печать футболки с персонажем. Ты можешь направить игрока на сайт с PayPal.
- Подписки на контент вне игры — например, эксклюзивные миссии на твоём сайте. Ты не продаёшь внутри игры — ты продаёшь доступ к сайту.
- Игры на PC без магазинов — если ты выкладываешь игру через свой сайт, а не через Steam, ты можешь использовать Stripe, Adyen, PayPal прямо в игре. Но тогда ты сам отвечаешь за безопасность.
Если ты хочешь Stripe в Unity — используй плагин Unity Stripe от официального партнёра. В Unreal — плагин Unreal Stripe Plugin от Steam или Unreal Marketplace. Но помни: они не работают на iOS/Android — только на PC и консолях, если ты не через магазин.
Что ломается чаще всего
Вот реальные ошибки, которые я видел в 80% проектов:
- Нет проверки подписи. Игрок крадёт токен подтверждения от другого пользователя и вставляет его в свою игру — и получает бесплатные монеты. Решение: проверяй подпись на своём сервере. Используй библиотеки от Apple и Google.
- Покупка не восстанавливается. Игрок сменил телефон — и потерял всё. Решение: хранить покупки по ID аккаунта, а не по устройству. Добавь кнопку «Восстановить покупки».
- Товары не прописаны в магазине. Ты в коде написал «premium_pack_1», а в App Store — «premium_pack_one». Игра не видит товар. Решение: копируй ID из магазина в код, не пиши вручную.
- Тестирование без sandbox. Ты тестируешь покупки на реальном аккаунте — и случайно заплатил $50. Решение: всегда используй тестовые аккаунты Apple/Google.
- Платёж не обрабатывается, если игра закрыта. Игрок нажал «Купить», закрыл игру, открыл — и ничего не пришло. Решение: при запуске игры всегда проверяй статус покупок через SDK — даже если ты не видел кнопку.
Как сделать правильно — пошагово
Вот рабочий алгоритм, который я использую в каждом проекте:
- Создай товары в магазине. В App Store Connect и Google Play Console. Используй понятные ID:
coins_100,skin_firebird,premium_month. - Подключи SDK. В Unity — через Window → Services → In-App Purchasing. В Unreal — через Plugins → In-App Purchasing.
- Создай скрипт инициализации. При запуске игры вызови
InitializePurchasing(). Не делай это в Update — только один раз при старте. - Создай обработчик покупок. Подпишись на событие
OnPurchaseSucceeded. Не полагайся на UI — если игрок закрыл окно, событие всё равно придёт. - Отправь токен на сервер. Получив подтверждение, отправь его на свой сервер. Не доверяй клиенту.
- Проверь подпись на сервере. Для Apple — используй
App Store Receipt Validation. Для Google —Google Play Developer API. Для Steam —Steamworks. - Выдай товар. Только после проверки. Не выдавай ничего, если сервер сказал «недействительно».
- Добавь «Восстановить покупки». Проверяй все покупки при запуске и выдавай их, если они есть в истории.
Что выбрать — в зависимости от твоей ситуации
Если ты:
- Начинаешь с нуля и делаешь мобильную игру → Unity + Unity IAP. Проще, быстрее, меньше ошибок.
- Делаешь игру на консолях (PS5, Xbox) → Unreal + собственная интеграция через Sony/Xbox SDK. Unity там хуже поддерживается.
- Выкладываешь игру на своём сайте (PC) → Unity + Stripe. Ты свободен от магазинов, но должен сам обеспечить безопасность.
- Хочешь подписки и монетизацию через рекламу → Unity + Unity IAP + AdMob. Они хорошо интегрируются.
- Игра на Android с китайскими платёжными системами (Alipay, WeChat) → Используй сторонний SDK, например,
Applovin MAXилиTapJoy. Unity IAP их не поддерживает.
Как не попасть в ловушку
Если ты хочешь выйти на рынок за пределами США и Европы — будь готов к тому, что:
- В Китае — нет Google Play. Только Huawei AppGallery и локальные магазины.
- В России — Apple и Google блокируют платежи. Используй
QIWI,Сбербанк,ЮMoneyчерез сторонние SDK. - В Индии — игроки не любят кредитки. Нужны платежи через USSD, баланс телефона, Paytm.
Если ты хочешь продавать в этих регионах — не используй только Unity IAP. Ищи специализированные SDK, например, AppLovin MAX или AdColony, которые умеют работать с локальными платёжными системами.
Что делать, если всё сломалось
Игроки пишут: «Я заплатил, а ничего не пришло». Ты в панике.
Сделай так:
- Проверь логи сервера — пришёл ли токен от Apple/Google?
- Проверь, правильно ли ты его валидировал — не ошибка в ключе или сертификате?
- Проверь, есть ли у игрока доступ к аккаунту, на который была сделана покупка.
- Если токен пришёл, а товар не выдан — проверь, не упал ли твой сервер при обработке.
- Если токен не пришёл — проверь, вызвался ли
InitializePurchasing()и не было ли ошибок в логах Unity/Unreal.
Если всё чисто — дай игроку вручную восстановить покупки. И спасибо ему за терпение. Люди ценят, когда ты помогаешь, а не игнорируешь.
Итог: что делать прямо сейчас
Если ты только начинаешь — сделай так:
- Выбери Unity.
- Создай в App Store Connect и Google Play Console 3 товара: «100 монет», «Премиум месяц», «Скин».
- Подключи Unity IAP через Editor.
- Скопируй ID товаров в скрипт.
- Напиши простой обработчик: при успешной покупке — вызови функцию
GiveItem(). - На сервере добавь проверку подписи Apple/Google (используй готовые библиотеки).
- Добавь кнопку «Восстановить покупки».
- Протестируй на тестовом аккаунте — не на реальном.
Потратишь 2–3 дня. Не больше. И получишь рабочую систему, которая не ломается, не теряет деньги и не вызывает крики в чате.
Если ты уже в процессе — проверь, есть ли у тебя:
- Проверка подписи на сервере?
- Восстановление покупок?
- Тестовые аккаунты?
- Логи всех транзакций?
Если хотя бы один пункт — нет — исправляй. Сначала. До того, как запустишь игру.
Платежи в играх — это не про технологии. Это про доверие. Если игрок заплатил — он ожидает, что получит то, что обещали. И если ты не справляешься с этим — он уйдёт. Навсегда.
Информация в этой статье носит ознакомительный характер. Реальные требования магазинов (App Store, Google Play, Steam) меняются без предупреждения. Перед запуском проверяй актуальные правила у официальных источников и консультируйся с юристом, если твоя игра выходит на крупном рынке.
