Інтеграція внутрішньоігрових покупок для VR додатків

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

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

Відвідати персоналізований сайт
Показано 1 з 1Усі 242 послуг
Інтеграція внутрішньоігрових покупок для VR додатків
Середній
~1-2 тижні
Часті запитання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    696
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    879
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    504
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    543

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: пакет використовує 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-специфічні підписки з trial вимагають додаткового коду поза 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 тижні

Вартість розраховується після аналізу вимог: платформи, типи продуктів, наявність серверної інфраструктури.