Интеграция внутриигровых покупок для VR приложений

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Интеграция внутриигровых покупок для VR приложений
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

tags: [vr-ar]

Интеграция внутриигровых покупок для VR приложений

Meta Quest Store, SteamVR и PCVR имеют разные требования к IAP. Приложение для Quest должно использовать нативный Meta IAP SDK — сторонние платёжные процессоры в приложениях Meta Store запрещены. Для Steam — Steamworks API. Если приложение выходит на обеих платформах, нужна абстракция, которая переключает реализацию под рантайм-платформу.

Начинать интеграцию IAP без понимания требований целевого стора — гарантированный возврат на ревизию.

Meta Platform SDK: IAP для Quest

Meta Platform SDK (com.meta.xr.sdk.platform) предоставляет IAP через IAP.GetProductsBySKU и IAP.LaunchCheckoutFlow. Все SKU заводятся заранее в Meta Developer Console под конкретным App ID. Без этого SDK при вызове LaunchCheckoutFlow будет возвращать ошибку PURCHASE_NOT_ALLOWED даже в тестовом режиме.

Тестирование IAP на Quest: в Developer Console нужно добавить тестовых пользователей в Test Users раздел организации. Только они могут совершать тестовые покупки без реального списания средств. Без этой настройки разработчики регулярно упираются в то, что IAP «не работает» — хотя проблема в отсутствии прав тестового аккаунта.

Подписки в Meta IAP отдельный тип продукта (SUBSCRIPTION). У подписок есть trialPeriodDays, billingPeriod, startDate. При проверке активной подписки используем IAP.GetCurrentEntitlements — возвращает все активные entitlements включая подписки. Важно: entitlement не исчезает сразу при отмене подписки — она активна до конца оплаченного периода. Нужно проверять ExpirationTime, а не просто факт наличия.

Восстановление покупок: Meta автоматически восстанавливает non-consumable покупки при входе в приложение под тем же Meta-аккаунтом через IAP.GetViewerPurchases. Consumable покупки (монеты, расходники) не восстанавливаются — они должны быть списаны через IAP.ConsumePurchase после вручения игроку.

Steamworks и PCVR

Для Steam используем Steamworks.NET — C# обёртка над Steamworks API. Микротранзакции через Steam работают через SteamUser.GetSteamID + серверную верификацию через Steam Web API. В отличие от Meta, Steam рекомендует серверную проверку покупок: клиент инициирует покупку → Steam возвращает OrderID → сервер игры верифицирует через ISteamMicroTxn/FinalizeTxn → вручаем предмет. Без серверной верификации покупки можно подделать через memory editing.

Для VR-only игр на Steam, где нет выделенного сервера (синглплеер или P2P), верификация ведётся через Steam Inventory Service — Steam сам хранит предметы инвентаря, и читы на клиентской стороне не влияют на Steam Inventory.

Unity IAP как кроссплатформенная абстракция

Unity In-App Purchasing (com.unity.purchasing) поддерживает Meta Store через Meta Appstore IAP и Steam через Steam IAP в одном API. IStoreController.InitiatePurchase(product) одинаково работает на обеих платформах при правильной конфигурации Builder.

Проблема Unity IAP на Meta Quest: пакет Unity IAP использует Google Play Billing как основу для Android. Quest — тоже Android-based платформа, и Unity IAP по умолчанию может попытаться использовать Google Play Store вместо Meta Store. Нужно явно задать StandardPurchasingModule.useFakeStoreAlways = false и добавить Meta Store через builder.AddStoreConfiguration.

Ограничение: Unity IAP не поддерживает все возможности нативных SDK — например, Meta-специфичные подписки с trialing требуют дополнительного кода вне Unity IAP. Если проект требует нативных фич, Unity IAP используется только как fallback, а Meta SDK — как первичный.

Серверная верификация и защита от возвратов

Chargeback и возврат средств в Meta Store — пользователь запрашивает возврат, Meta его одобряет, но entitlement в игре уже активирован. Если игра вручила предмет при покупке и не проверяет entitlement повторно, игрок получил предмет бесплатно.

Защита: не вручать дорогие предметы мгновенно на клиенте. Паттерн: LaunchCheckoutFlowGetViewerPurchases (проверка статуса) → вручение через сервер с записью в БД. При каждом запуске приложения — повторная проверка активных entitlements через GetViewerPurchases и сверка с серверной записью. При несоответствии — блокировка предмета.

Для Free-to-Play VR игр с cosmetic покупками серверная верификация часто не критична (украденный скин не ломает экономику), но для игр с pay-to-win элементами или подписками — обязательна.

Платформа / сложность Ориентировочные сроки
Meta Quest IAP (consumable + non-consumable) 1–2 недели
Steam IAP через Steamworks 1–2 недели
Кроссплатформа Unity IAP + нативные SDK 2–4 недели
Серверная верификация + защита от возвратов +1–3 недели

Стоимость рассчитывается после анализа требований: платформы, типы продуктов, наличие серверной инфраструктуры.