Как подключить платежи в игре на Unity и Unreal: реальный гайд без воды

Как подключить платежи в игре на Unity и Unreal: реальный гайд без воды

Ты сделал игру. Она клёвая. Игроки приходят. Но вот беда — они не платят. Почему? Потому что ты не добавил удобный способ оплаты. Или добавил, но так, что игроки уходят с криками «где кнопка?».

Я не буду рассказывать, что такое SDK или как работает API. Я расскажу, как реально подключить платежи в Unity и Unreal так, чтобы игроки не ушли, а купили. Без лишних слов, без теории, только то, что работает.

Что тебе реально нужно

Ты не хочешь писать платёжную систему с нуля. Ты хочешь:

  • чтобы игроки могли купить монеты, скины, премиум за 10 секунд;
  • чтобы деньги приходили на твой счёт без задержек;
  • чтобы не было криков в чате: «Я заплатил, а предмет не пришёл!»;
  • чтобы всё работало на Android, iOS, PC и, желательно, консолях.

Всё это — задача платежного SDK. Он — мост между твоей игрой и платежными системами вроде Apple App Store, Google Play, Steam, Stripe, PayPal, Adyen и т.д.

Как это работает на практике

Представь, что игрок нажимает «Купить пакет за $4.99».

  1. Твоя игра (Unity или Unreal) вызывает SDK — например, Unity IAP или Unreal In-App Purchase.
  2. SDK открывает встроенную систему оплаты: на iOS — это App Store, на Android — Google Play, на PC — Steam или сторонний магазин.
  3. Игрок вводит пароль или использует Face ID — платёж проходит через платёжную систему, а не через твой сервер.
  4. Платёжная система отправляет тебе подтверждение (в виде подписи или токена).
  5. Твой сервер (да, он нужен!) проверяет подпись, чтобы убедиться, что это не фейк.
  6. Ты выдаёшь игроку предмет — и всё.

Важно: ты не обрабатываешь кредитку напрямую. Ты не хранить данные карты. Ты не отвечаешь за 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% проектов:

  1. Нет проверки подписи. Игрок крадёт токен подтверждения от другого пользователя и вставляет его в свою игру — и получает бесплатные монеты. Решение: проверяй подпись на своём сервере. Используй библиотеки от Apple и Google.
  2. Покупка не восстанавливается. Игрок сменил телефон — и потерял всё. Решение: хранить покупки по ID аккаунта, а не по устройству. Добавь кнопку «Восстановить покупки».
  3. Товары не прописаны в магазине. Ты в коде написал «premium_pack_1», а в App Store — «premium_pack_one». Игра не видит товар. Решение: копируй ID из магазина в код, не пиши вручную.
  4. Тестирование без sandbox. Ты тестируешь покупки на реальном аккаунте — и случайно заплатил $50. Решение: всегда используй тестовые аккаунты Apple/Google.
  5. Платёж не обрабатывается, если игра закрыта. Игрок нажал «Купить», закрыл игру, открыл — и ничего не пришло. Решение: при запуске игры всегда проверяй статус покупок через SDK — даже если ты не видел кнопку.

Как сделать правильно — пошагово

Вот рабочий алгоритм, который я использую в каждом проекте:

  1. Создай товары в магазине. В App Store Connect и Google Play Console. Используй понятные ID: coins_100, skin_firebird, premium_month.
  2. Подключи SDK. В Unity — через Window → Services → In-App Purchasing. В Unreal — через Plugins → In-App Purchasing.
  3. Создай скрипт инициализации. При запуске игры вызови InitializePurchasing(). Не делай это в Update — только один раз при старте.
  4. Создай обработчик покупок. Подпишись на событие OnPurchaseSucceeded. Не полагайся на UI — если игрок закрыл окно, событие всё равно придёт.
  5. Отправь токен на сервер. Получив подтверждение, отправь его на свой сервер. Не доверяй клиенту.
  6. Проверь подпись на сервере. Для Apple — используй App Store Receipt Validation. Для Google — Google Play Developer API. Для Steam — Steamworks.
  7. Выдай товар. Только после проверки. Не выдавай ничего, если сервер сказал «недействительно».
  8. Добавь «Восстановить покупки». Проверяй все покупки при запуске и выдавай их, если они есть в истории.

Что выбрать — в зависимости от твоей ситуации

Если ты:

  • Начинаешь с нуля и делаешь мобильную игру → 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, которые умеют работать с локальными платёжными системами.

Что делать, если всё сломалось

Игроки пишут: «Я заплатил, а ничего не пришло». Ты в панике.

Сделай так:

  1. Проверь логи сервера — пришёл ли токен от Apple/Google?
  2. Проверь, правильно ли ты его валидировал — не ошибка в ключе или сертификате?
  3. Проверь, есть ли у игрока доступ к аккаунту, на который была сделана покупка.
  4. Если токен пришёл, а товар не выдан — проверь, не упал ли твой сервер при обработке.
  5. Если токен не пришёл — проверь, вызвался ли InitializePurchasing() и не было ли ошибок в логах Unity/Unreal.

Если всё чисто — дай игроку вручную восстановить покупки. И спасибо ему за терпение. Люди ценят, когда ты помогаешь, а не игнорируешь.

Итог: что делать прямо сейчас

Если ты только начинаешь — сделай так:

  1. Выбери Unity.
  2. Создай в App Store Connect и Google Play Console 3 товара: «100 монет», «Премиум месяц», «Скин».
  3. Подключи Unity IAP через Editor.
  4. Скопируй ID товаров в скрипт.
  5. Напиши простой обработчик: при успешной покупке — вызови функцию GiveItem().
  6. На сервере добавь проверку подписи Apple/Google (используй готовые библиотеки).
  7. Добавь кнопку «Восстановить покупки».
  8. Протестируй на тестовом аккаунте — не на реальном.

Потратишь 2–3 дня. Не больше. И получишь рабочую систему, которая не ломается, не теряет деньги и не вызывает крики в чате.

Если ты уже в процессе — проверь, есть ли у тебя:

  • Проверка подписи на сервере?
  • Восстановление покупок?
  • Тестовые аккаунты?
  • Логи всех транзакций?

Если хотя бы один пункт — нет — исправляй. Сначала. До того, как запустишь игру.

Платежи в играх — это не про технологии. Это про доверие. Если игрок заплатил — он ожидает, что получит то, что обещали. И если ты не справляешься с этим — он уйдёт. Навсегда.

Информация в этой статье носит ознакомительный характер. Реальные требования магазинов (App Store, Google Play, Steam) меняются без предупреждения. Перед запуском проверяй актуальные правила у официальных источников и консультируйся с юристом, если твоя игра выходит на крупном рынке.

platejigid.ru — мир платежей и цифровых финансов