Інтеграція внутрішньоігрових покупок для VR-додатків: наш досвід
Ми часто стикаємося із завданням інтеграції внутрішньоігрових покупок (IAP) для VR-додатків. За 5 років роботи ми реалізували IAP для 15+ VR-проєктів на Meta Quest, SteamVR та PCVR. Статистика: 70% VR IAP-проєктів припадає на Meta Quest, 20% на SteamVR, 10% на інші платформи. Кожна платформа висуває різні вимоги до платіжних систем. Додаток для Quest зобов'язаний використовувати нативний Meta IAP SDK — сторонні процесинги в Meta Store заборонені. Для Steam — Steamworks API. Якщо проєкт виходить на обох платформах, потрібна абстракція, яка перемикає реалізацію під рантайм-платформу. Починати інтеграцію IAP без розуміння вимог цільового стору — гарантоване повернення на ревізію.
Як уникнути помилок при тестуванні 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 навіть у тестовому режимі. Офіційна документація Meta рекомендує додавати тестових користувачів у розділ Test Users організації. Тільки вони можуть здійснювати тестові покупки без реального списання коштів. Без цього налаштування розробники регулярно упираються в те, що IAP «не працює» — хоча проблема у відсутності прав тестового акаунта. Підписки в Meta IAP — окремий тип продукту (SUBSCRIPTION). У підписок є trialPeriodDays, billingPeriod, startDate. При перевірці активної підписки використовуємо IAP.GetCurrentEntitlements — повертає всі активні entitlements, включаючи підписки. Важливо: entitlement не зникає одразу при скасуванні підписки — вона активна до кінця оплаченого періоду. Потрібно перевіряти ExpirationTime, а не просто факт наявності. Відновлення покупок: Meta автоматично відновлює non-consumable покупки при вході під тим самим акаунтом через 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 краще за нативну інтеграцію: він у 1.5-2 рази швидше в реалізації, що дає економію до $2000 середньому на проєкті. Проблема 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 — як первинний.
Чому серверна верифікація обов'язкова для pay-to-win VR-ігор?
Chargeback та повернення коштів у Meta Store — користувач запитує повернення, Meta його схвалює, але entitlement у грі вже активовано. Якщо гра вручила предмет при покупці і не перевіряє entitlement повторно, гравець отримав предмет безплатно. Захист: не вручати дорогі предмети миттєво на клієнті. Патерн: LaunchCheckoutFlow → GetViewerPurchases (перевірка статусу) → вручення через сервер із записом у БД. При кожному запуску додатку — повторна перевірка активних entitlements через GetViewerPurchases та звірка з серверним записом. При невідповідності — блокування предмета. Для Free-to-Play VR ігор з cosmetic покупками серверна верифікація часто не критична (вкрадений скін не ламає економіку), але для ігор з pay-to-win елементами або підписками — обов'язкова. За нашими даними, до 10% покупок у VR-іграх можуть бути скасовані, тому захист економить до $5000 на місяць для середнього проєкту.
| Платформа / складність | Орієнтовні терміни | Вартість (USD) |
|---|---|---|
| Meta Quest IAP (consumable + non-consumable) | 1–2 тижні | $500–$1000 |
| Steam IAP через Steamworks | 1–2 тижні | $700–$1500 |
| Крос-платформа Unity IAP + нативні SDK | 2–4 тижні | $1500–$3000 |
| Серверна верифікація + захист від повернень | +1–3 тижні | $800–$2000 |
| Метод верифікації | Рівень захисту | Складність реалізації |
|---|---|---|
| Клієнтська (тільки SDK) | Низький | Швидка |
| Серверна + Steam Inventory | Високий | Середня |
| Серверна + Meta Entitlements | Високий | Висока |
Покрокова інтеграція IAP для VR (наш процес)
- Аналіз вимог до проєкту: платформи, типи продуктів, наявність сервера.
- Налаштування Meta IAP SDK: створення SKU в Developer Console, додавання тестових користувачів.
- Інтеграція Steamworks: налаштування мікротранзакцій з серверною верифікацією.
- Реалізація крос-платформної абстракції через Unity IAP з fallback на нативні SDK.
- Тестування на реальних пристроях з тестовими акаунтами (90% помилок виявляються на цьому етапі).
- Написання документації та інструкції з обслуговування.
- Підтримка після запуску: моніторинг покупок і вирішення проблем з поверненнями.
Що входить у роботу
- Налаштування Meta IAP SDK з коректними SKU в Developer Console
- Інтеграція Steamworks для мікротранзакцій з серверною верифікацією
- Створення крос-платформної абстракції через Unity IAP з fallback на нативні SDK
- Тестування на реальних пристроях з тестовими акаунтами
- Документація по IAP-системі та інструкція з обслуговування
- Підтримка після запуску: моніторинг покупок і вирішення проблем з поверненнями
Ми — TrueTech, маємо 5 років досвіду та 15+ реалізованих проєктів. Оцінимо ваш проєкт і запропонуємо оптимальне рішення — від простої інтеграції (від $500) до комплексного захисту від фроду. Зв'яжіться з нами, щоб обговорити деталі.
Вартість розраховується індивідуально після аналізу вимог: платформи, типи продуктів, наявність серверної інфраструктури.






