Допустим, у вас готова игра. Механики работают, графику поправили, и вот он момент — пора думать о том, как на этом заработать. Первая мысль, которая приходит в голову большинству разработчиков: «Платёжная система — это сложно, долго, нужно договариваться с банками, писать свой бэкенд и вот это всё». Это правда, если вы пытаетесь всё делать с нуля.
Но в реальном мире инди-разработки и студий среднего размера никто не пишет свои процессинги. Мы используем готовые инструменты — платежные SDK. Это специальные библиотеки, которые встраиваются прямо в движок (Unity или Unreal), берут на себя всю «грязную» работу с деньгами, а вам отдают только результат: «Игрок купил», «Игрок отменил», «Ошибка».
Сегодня мы разберем именно это — как технически и правильно организовать приём платежей через SDK в двух самых популярных движках. Без воды про то, «что такое деньги», а конкретно про то, как не слить бюджет на интеграцию и не получить бан за нарушение правил сторов.
- С чего начать: понимание архитектуры запуска
- Почему именно SDK, а не просто ссылка на сайт?
- Интеграция в Unity: плавный вход через плагины
- Шаг 1. Выбор SDK и установка
- Шаг 2. Настройка продуктов (SKU)
- Шаг 3. Привязка к UI
- Особенности компиляции (Build)
- Интеграция в Unreal Engine: Blueprint и C++
- Шаг 1. Установка плагина
- Шаг 2. Настройка через Blueprint
- Шаг 3. Работа с C++ (для продвинутых)
- Сравнение подходов: Unity vs Unreal
- Типичные ошибки, которые убивают продажи
- 1. Доверие клиенту
- 2. Отсутствие обработки статусов
- 3. Неверные ID товаров
- 4. Игнорирование подписок
- Сценарии выбора: что лучше в вашей ситуации?
- Как лучше сделать: пошаговый чек-лист
- Итог: что делать дальше?
С чего начать: понимание архитектуры запуска
Прежде чем открывать Unity или Unreal Engine, нужно чётко понять, что именно вы делаете. Вы не просто подключаете кнопку «Купить». Вы встраиваетесь в экосистему, которая строго регулирует финансовые потоки.
Есть два принципиально разных сценария, и от них зависит, какой SDK вы будете искать:
- Нативные внутриигровые покупки (IAP — In-App Purchases). Это когда игрок покупает алмазы, скины или уровни прямо внутри приложения, а деньги списывает App Store, Google Play или консольный магазин. Здесь вы обязаны использовать их официальные SDK (StoreKit для Apple, Google Play Billing Library для Android). Платёжный шлюз тут — сам магазин.
- Донаты и прямые платежи (Web/SDK). Это когда вы хотите принимать оплату картами напрямую на сайте или через сторонний агрегатор внутри игры (например, для PC-версий, где нет строгого диктата Apple/Google, или для донатов, которые вы хотите монетизировать без комиссии сторов 30%). Здесь используются SDK платежных агрегаторов (YooKassa, Stripe, Unity IAP, GameAnalytics и другие).
В этой статье мы сосредоточимся на практической стороне: как интегрировать сторонние платежные SDK (агрегаторы) в Unity и Unreal Engine, чтобы принимать деньги напрямую или через кроссплатформенные решения, которые упрощают работу со сторами.
Почему именно SDK, а не просто ссылка на сайт?
Можно ведь просто вывести кнопку «Купить» и открыть браузер со ссылкой на ваш сайт? Технически — да. Но с точки зрения бизнеса и удержания игроков — это плохой путь.
Когда вы используете SDK внутри движка, вы получаете:
- Прозрачность процесса. Окно оплаты открывается как модалка внутри игры, фон затемняется, интерфейс не пугает игрока переходом в браузер.
- Автоматическую валидацию. Хороший SDK сам проверяет, прошла ли оплата, и возвращает в игру статус «Успех» или «Ошибка». Вам не нужно писать сложный парсинг ответов от банка.
- Поддержку множества методов. SDK агрегатора уже умеет работать с картами, Apple Pay, Google Pay, бонусными системами и криптовалютой. Вам не нужно подключать их по одному.
- Безопасность. Данные карт не проходят через ваш сервер, они обрабатываются защищёнными токенами самого платежного провайдера.
Интеграция в Unity: плавный вход через плагины
Unity — это царство Component-based архитектуры. Здесь всё строится на компонентах и скриптах на C#. Работа с платежными SDK здесь максимально стандартизирована благодаря Asset Store.
Шаг 1. Выбор SDK и установка
В Unity редко подключают SDK вручную через jar/aar файлы, если это не критично для специфических банков. Гораздо проще найти готовый плагин.
Заходим в Asset Store или на GitHub поставщика (например, Unity IAP, или плагины от конкретных шлюзов вроде YooKassa, CloudPayments и др.). Скачиваем `.unitypackage` и импортируем его в проект. Важно проверить зависимости: часто платежный SDK требует наличия специфических библиотек для Android (Google Play Services) или iOS (StoreKit).
Шаг 2. Настройка продуктов (SKU)
Перед тем как писать код, нужно создать продукты. В платежных системах это называется SKU (Stock Keeping Unit) или Product ID. Это уникальные идентификаторы товара: `premium_bundle_100`, `monthly_subscription_gold`.
В Unity вы создаете скрипт, который инициализирует SDK. Обычно это делается в методе `Start()` или `Awake()` главного контроллера оплаты.
// Примерная структура кода на C#
void Start() {
PaymentManager.Initialize("YOUR_API_KEY");
PaymentManager.SubscribeOnPurchaseCompleted(OnPurchaseSuccess);
}
void OnPurchaseSuccess(string productId) {
if (productId == "diamond_pack_100") {
PlayerInventory.AddDiamonds(100);
ShowNotification("Спасибо за покупку!");
}
}
Шаг 3. Привязка к UI
Создаете кнопку в Unity UI (Canvas). В инспекторе кнопки на событие `OnClick()` вешаете вызов метода из вашего скрипта.
Здесь важно не забыть про обработку ошибок. Игрок может нажать «Купить», а интернет отвалится. Ваш код должен ловить событие `OnPurchaseFailed` и показывать понятное сообщение, а не крашиться.
Особенности компиляции (Build)
Самая частая боль в Unity при интеграции платежей — проблемы с плагинами при билде для разных платформ. Android ждет Jar-файлы, iOS — Obj-C библиотеки. Хорошие SDK предоставляют «префабы», которые сами настраивают импорты. Но если вы собираете билд под iOS, обязательно проверьте настройки `Player Settings` -> `iOS` -> `Capabilities`, нужно ли добавлять подписи и права доступа к платежным шлюзам.
Интеграция в Unreal Engine: Blueprint и C++
Unreal Engine (UE) — это немного другой мир. Здесь акцент на Blueprint (визуальное программирование), но для сложных финансовых логики настоящие разработчики часто пишут на C++. Платежные SDK для UE обычно приходят в виде плагинов, которые нужно установить в папку `Plugins` проекта.
Шаг 1. Установка плагина
В отличие от Unity, в UE вы не всегда можете просто перетащить файл в редактор. Часто нужно:
- Скачать архив с плагинами от поставщика.
- Распаковать его в папку `YourProject/Plugins` (если папки нет, создайте).
- Открыть проект. Unreal Engine спросит, нужно ли сгенерировать новые файлы проекта (генерация `.uproject` файлов). Соглашайтесь — это критически важно, чтобы движок увидел новые библиотеки.
Шаг 2. Настройка через Blueprint
Большинство SDK для Unreal предоставляют готовые ноды (узлы) в палитре Blueprint. Вы ищете категорию с названием плагина (например, `PaymentSDK`) и видите ноды типа `Initialize`, `BuyProduct`, `VerifyReceipt`.
Логика выглядит так:
- Создаете BluePrint класса (например, `BP_PaymentHandler`).
- В `EventBeginPlay` вешаете ноду `Initialize`. Туда передаете API-ключи (лучше хранить их в Constance Variables или настройках проекта, а не хардкодить).
- При клике на кнопку в интерфейсе вызываете ноду `BuyProduct`, передавая ID товара.
Шаг 3. Работа с C++ (для продвинутых)
Если вам нужна высочайшая производительность или специфическая логика валидации, лучше написать обертку на C++. В UE это делается через классы, наследующиеся от `UObject`. Платежный SDK обычно предоставляет свой класс-обертку, который вы подключаете через заголовочные файлы (`#include «PaymentSDK/Public/PaymentManager.h»`).
Главный плюс C++ в UE — это строгая типизация. Вы сразу видите ошибки компиляции, если неправильно передали аргумент, тогда как в Blueprint ошибка может проявиться только в момент запуска игры.
Сравнение подходов: Unity vs Unreal
Давайте посмотрим, где вам будет проще и быстрее, а где придется попотеть.
| Критерий | Unity | Unreal Engine |
|---|---|---|
| Скорость интеграции | Высокая. Asset Store полон готовых решений, которые «работают из коробки». | Средняя. Часто требует настройки путей к плагинам и пересборки проекта. |
| Поддержка SDK | Огромная. Почти любой платежный сервис сразу делает плагин для Unity. | Хорошая, но для мелких шлюзов может не быть готового плагина, придется делать самому. |
| Язык программирования | C#. Проще для веб-разработчиков и новичков. | C++ (тяжелый) или Blueprint. Требует понимания структуры движка. |
| Настройка билдов | Сложная для iOS (подписи), проще для Android. | Сложная для Android (Gradle), проще для PC/Web. |
| Особенности UI | Кнопки привязываются к событиям UI системы Unity. | Кнопки UMG вызывают ноды в Blueprint, которые передают данные в C++. |
Типичные ошибки, которые убивают продажи
Я видел кучу проектов, которые работали отлично, но теряли 30-40% выручки из-за банальных ошибок в коде платежей. Вот список того, чего делать нельзя.
1. Доверие клиенту
Самая грубая ошибка — проверять оплату только на стороне клиента (в игре). Если вы написали код: «Получил событие от SDK — начислить монеты», хакер может подделать это событие и получить валюту бесплатно.
Как надо: Всегда делать Server-Side Validation. Игра отправляет референс транзакции (Transaction ID) на ваш сервер. Ваш сервер сам связывается с API платежной системы и спрашивает: «Эй, этот ID — реальный?». Только если сервер получил «Да», он начисляет валюту игроку.
2. Отсутствие обработки статусов
Игрок нажал «Купить», деньги списались, но игра зависла или у игрока пропал интернет. Скрипт не получил ответ «Успех». Игрок остался без товара.
Как надо: Реализовать систему ретраев (повторных попыток). Если оплата прошла, а ответа нет, при следующем входе в игру игра должна спрашивать у сервера статус последней неоплаченной покупки.
3. Неверные ID товаров
Вы создали товар в панели разработчика Apple под названием `com.mygame.sword`, а в коде Unity написали `sword`. SDK не найдет товар, выдаст ошибку.
Как надо: Использовать константы (строковые константы) для ID товаров. Не писать ID вручную в каждом скрипте, а вынести в один файл настроек, чтобы при ошибке править в одном месте.
4. Игнорирование подписок
Если вы делаете подписку, важно правильно обрабатывать её отмену. Если пользователь отменил подписку в настройках телефона, а ваша игра продолжает давать премиум-доступ, это нарушение правил и риск бана.
Как надо: Регулярно (раз в день или при входе) проверять статус подписки через API или Webhook.
Сценарии выбора: что лучше в вашей ситуации?
Давайте разберем конкретные кейсы, чтобы вы могли принять решение прямо сейчас.
Сценарий 1: Вы делаете мобильную игру (iOS/Android) и планируете продавать валюту.
Решение: Используйте официальные SDK сторов (Unity IAP или нативные плагин Unreal StoreKit/Google Billing).
Почему: Если вы попытаетесь подключить прямой эквайринг (принимать карты напрямую) внутри мобильного приложения, Apple и Google вас заблокируют. Они требуют, чтобы цифровые товары шли только через их систему, забирая 15-30% комиссии. Это закон, а не рекомендация.
Сценарий 2: Вы делаете PC-игру (Steam, Epic, свой сайт) или браузерную игру.
Решение: Используйте агрегаторы (Direct SDK). Подключайте то, что удобно вам: Stripe, YooKassa, PayPal.
Почему: На PC нет жесткого диктата Apple. Вы можете принимать деньги напрямую и экономить огромные комиссии. Здесь SDK агрегатора — идеальный выбор.
Сценарий 3: Вы хотите кроссплатформенность (мобилка + PC).
Решение: Используйте кроссплатформенный SDK, например, Unity IAP (он умеет переключаться между StoreKit, Google Billing и прямыми API в зависимости от платформы).
Почему: Это позволит вам писать один код для всех платформ, не мучаясь с разными библиотеками под разные ОС.
Сценарий 4: У вас инди-разработка, бюджет 0, команда 1 человек.
Решение: Ищите готовые бесплатные плагины на GitHub или Asset Store. Не пишите свои обертки для платежных систем, если в этом нет острой необходимости. Потратьте время на геймдизайн, а не на отладку SSL-соединений с банком.
Как лучше сделать: пошаговый чек-лист
Если вы готовы к внедрению, следуйте этому алгоритму, чтобы не потеряться в деталях.
1. Подготовка на стороне платежной системы.
Зарегистрируйтесь, пройдите верификацию. Создайте продукты. Скопируйте их ID (SKU). Найдите в личном кабинете раздел «Документация» или «API Keys». Вам понадобятся публичный ключ (Public Key) и секретный ключ (Secret Key). Никогда не передавайте секретный ключ в код игры! Он нужен только вашему серверу.
2. Настройка проекта в движке.
Скачайте плагин. Установите. Вставьте ключи в настройки плагина (обычно есть поле для Secret Key, которое вы заполняете на сервере, а в плагин вставляете Public Key).
3. Рисование интерфейса.
Сделайте кнопку «Купить». Сделайте лоадер (индикатор загрузки) и модалку с сообщением об успехе/ошибке. Без этого игрок будет кликать 10 раз, пока деньги спишутся.
4. Написание логики (Client Side).
Напишите скрипт: «При нажатии -> Вызвать SDK -> Показать лоадер -> Подождать ответа -> Скрыть лоадер -> Показать результат».
5. Написание логики (Server Side).
Ваш бэкенд должен принимать данные от клиента. Он делает запрос к платежной системе: «Действителен ли этот ID?».
6. Тестирование.
Это критический этап. Используйте тестовые карты. В Google Play и App Store есть специальные тестовые аккаунты и карты с номерами `4242 4242…` и т.д., которые проходят оплату, но не списывают реальных денег. Протестируйте:
- Успешную покупку.
- Отмену покупки (Refund).
- Нехватку средств.
- Отсутствие интернета во время нажатия кнопки.
Итог: что делать дальше?
Прием платежей в играх — это не магия, а инженерная задача. Если вы делаете мобильную игру, ваша главная задача — правильно настроить нативные магазины через SDK, чтобы не нарушить правила. Если вы делаете PC-игру или сайт, ваш выбор — агрегаторы, которые дадут гибкость и низкие комиссии.
Главный совет: не изобретайте велосипед. Используйте готовые SDK, которые поддерживают разработчики движков. Сосредоточьте усилия не на том, «как соединиться с банком», а на том, «как сделать процесс оплаты максимально удобным для игрока». Чем меньше кликов между желанием купить и получением товара, тем больше денег вы заработаете.
Проверьте свою текущую игру: если у вас нет удобной кнопки оплаты внутри, если обработка ошибок выдает сырые сообщения или если вы не проверяете покупки на сервере — исправляйте это в первую очередь. Это те точки роста, которые окупаются быстрее всего.
Информация в статье носит ознакомительный характер. При выборе платежных решений и настройке финансовых потоков рекомендуется проконсультироваться с профильными специалистами и учитывать актуальное законодательство вашей страны и правила платформ (Apple App Store, Google Play).
