Создание магазина в Unity пошаговое руководство

Как сделать магазин unity

Как сделать магазин unity

Магазин в Unity позволяет монетизировать ваше приложение через внутриигровые покупки. Для интеграции используется Unity IAP, который поддерживает платформы iOS, Android и Windows. Перед подключением важно проверить совместимость версии Unity с последней версией пакета IAP и убедиться, что проект настроен под целевую платформу.

Процесс создания магазина включает регистрацию товаров с уникальными идентификаторами, настройку методов покупки и обработку результатов транзакций. Для корректной работы на мобильных устройствах необходимо учитывать sandbox-среду для тестирования и ограничения платформенных платежных методов.

При проектировании магазина важно заранее определить типы товаров: одноразовые, подписки или внутриигровая валюта. Это влияет на структуру кода и хранение данных о покупках. Рекомендуется создавать отдельные классы для управления товарами, транзакциями и сохранением состояния, чтобы избежать дублирования и ошибок.

Тестирование является критическим этапом: без проверки на редакторе и реальном устройстве возможны ошибки при авторизации, отмене транзакций или восстановлении покупок. Использование логирования всех шагов покупки помогает выявлять и исправлять ошибки до релиза.

Настройка проекта и подключение Unity IAP

Для начала откройте Unity Hub и убедитесь, что проект использует версию Unity 2021.3 или выше, поскольку старые версии могут некорректно работать с последними пакетами IAP. Перейдите в Window → Package Manager и установите пакет In-App Purchasing. Проверяйте, чтобы версия пакета совпадала с рекомендуемой для вашей версии Unity, указанной в документации Unity IAP.

После установки включите Unity IAP через Services → In-App Purchasing → Enable. Если проект ещё не связан с Unity Services, создайте организацию и подключите проект к облаку Unity. Это требуется для автоматической синхронизации настроек магазина и получения корректных идентификаторов продуктов.

Далее настройте платформенные параметры. Для Android включите Google Play Billing в настройках Player Settings и добавьте SHA1 ключ проекта. Для iOS активируйте Apple App Store и убедитесь, что Bundle Identifier совпадает с идентификатором приложения в App Store Connect. Без точного соответствия идентификаторов покупки не будут обрабатываться.

Создайте скрипт инициализации IAP. В нём зарегистрируйте все товары через IAPButton или вручную через ConfigurationBuilder, задавая уникальные идентификаторы и типы товаров: Consumable, Non-Consumable, Subscription. Это позволит Unity корректно обрабатывать покупки и восстановление транзакций на разных платформах.

Создание скрипта для обработки покупок

Создание скрипта для обработки покупок

Создайте новый C# скрипт, например StoreManager.cs, и подключите пространство имён UnityEngine.Purchasing. Класс должен реализовывать интерфейсы IStoreListener для обработки транзакций и IExtensionProvider для доступа к дополнительным возможностям платформ.

В методе InitializePurchasing создайте экземпляр ConfigurationBuilder и зарегистрируйте товары через AddProduct, указывая уникальные идентификаторы и тип продукта: Consumable, Non-Consumable или Subscription. Убедитесь, что идентификаторы совпадают с настройками в Unity Services и платформенных магазинах.

Реализуйте метод OnPurchaseComplete для обработки успешных транзакций. В нём обновляйте баланс пользователя, активируйте приобретённые функции и сохраняйте состояние через PlayerPrefs или внешнюю систему хранения. Для ошибок используйте метод OnPurchaseFailed с логированием причины отказа и идентификатора товара.

Добавьте проверку IsInitialized перед любой попыткой покупки, чтобы предотвратить вызовы до завершения инициализации. Это особенно важно при запуске приложения и восстановлении покупок, иначе транзакции могут завершаться с ошибкой.

Для удобства создайте публичные методы BuyProduct(string productId) и RestorePurchases(), чтобы другие компоненты игры могли инициировать покупку или восстановление без прямого доступа к внутренней логике IAP.

Добавление товаров и настройка их идентификаторов

Добавление товаров и настройка их идентификаторов

Для корректной работы магазина каждому товару нужно присвоить уникальный идентификатор, который совпадает с настройками в Unity IAP и в соответствующем магазине платформы.

Рекомендуется использовать следующую структуру идентификаторов:

  • Для одноразовых покупок (Consumable) – com.companyname.gameitem.consumable
  • Для постоянных товаров (Non-Consumable) – com.companyname.gameitem.nonconsumable
  • Для подписок (Subscription) – com.companyname.subscription.monthly

Добавление товаров выполняется через скрипт или редактор Unity Services. В скрипте регистрация выглядит так:

  1. Создайте ConfigurationBuilder.
  2. Вызовите AddProduct для каждого товара с идентификатором и типом.
  3. Сохраните конфигурацию и инициализируйте IAP через UnityPurchasing.Initialize.

Важно, чтобы идентификаторы точно совпадали с платформенными настройками. Любое различие приведёт к ошибкам при попытке покупки. Для массового добавления товаров используйте массивы или списки, чтобы минимизировать дублирование кода и упростить поддержку.

Для подписок дополнительно настройте период и цену в магазине платформы. В скрипте используйте те же идентификаторы, чтобы Unity могла корректно обрабатывать автоматическое продление и восстановление подписок.

Реализация интерфейса магазина в Canvas

Для отображения магазина создайте отдельный UI Panel в сцене и разместите на нём элементы управления для каждого товара. Используйте Button для покупки, Text для отображения названия и цены, а также Image для иконок товаров.

Рекомендуется структурировать интерфейс следующим образом:

  • Создать Scroll View для списка товаров.
  • Внутри Scroll View добавить Vertical Layout Group для автоматического выравнивания элементов.
  • Использовать Content Size Fitter для подгонки размеров под количество товаров.

Привяжите кнопки к методам скрипта StoreManager, например BuyProduct(productId). Каждый элемент интерфейса должен хранить идентификатор товара через Inspector или скрипт-компонент, чтобы при нажатии выполнялась правильная транзакция.

Для динамического обновления интерфейса используйте цикл по массиву товаров из StoreManager и создавайте элементы через Instantiate. Это позволяет добавлять новые товары без изменения сцены и минимизирует ручную работу.

Добавьте визуальные индикаторы статуса покупки, например, текст «Куплено» или иконку галочки. Для подписок отображайте дату окончания или состояние активации, чтобы игрок сразу видел, какие товары уже доступны.

Обработка успешных и неудачных транзакций

Обработка успешных и неудачных транзакций

Для корректной обработки покупок реализуйте методы OnPurchaseComplete и OnPurchaseFailed в скрипте StoreManager. Каждый товар должен передавать уникальный идентификатор и тип транзакции, чтобы обновить баланс или активировать функцию.

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

Пример структуры обработки транзакций:

Состояние Действие Рекомендации
Успешная покупка Активировать товар, обновить баланс Сохранять идентификатор в PlayerPrefs и логировать сумму транзакции
Ошибка авторизации Показать уведомление игроку Не инициировать повторную транзакцию автоматически, сохранять код ошибки
Отмена пользователем Прервать процесс покупки Сохранять факт отмены для статистики, не блокировать интерфейс
Проблемы сети Повторная попытка покупки через StoreManager Добавить таймаут и ограничение числа повторов

Все действия должны выполняться в главном потоке Unity, чтобы избежать ошибок с обновлением UI и сохранением состояния. Логирование ошибок и статусов помогает выявлять проблемы на разных устройствах и платформах до релиза.

Тестирование покупок на редакторе и устройстве

Тестирование покупок на редакторе и устройстве

Для проверки работы магазина на редакторе используйте Unity IAP Simulator, который позволяет имитировать успешные и неудачные транзакции без подключения к реальному магазину. Настройте список товаров в конфигурации и создайте тестовые сценарии: покупка одного товара, несколько покупок подряд, отмена транзакции.

На Android включите Google Play Billing Test Account и загрузите приложение через Internal Test Track. Используйте тестовые карты и проверяйте корректное срабатывание методов OnPurchaseComplete и OnPurchaseFailed для каждого типа товара.

На iOS подключите Sandbox Account в App Store Connect. Проверяйте покупки на реальном устройстве, так как симулятор iOS не всегда отражает поведение подписок и автоматического продления.

Рекомендуется тестировать следующие сценарии:

  • Успешная покупка Consumable и Non-Consumable товаров.
  • Отмена транзакции пользователем.
  • Проблемы сети и повторные попытки.
  • Восстановление предыдущих покупок через RestorePurchases.
  • Обновление статуса подписок и проверка даты окончания.

Используйте Debug.Log для фиксации идентификаторов товаров, состояний транзакций и ошибок, чтобы быстро выявлять несоответствия между редактором и устройством.

Сохранение и восстановление приобретённых товаров

Сохранение и восстановление приобретённых товаров

Для хранения информации о купленных товарах используйте PlayerPrefs, локальные файлы или внешние базы данных. Для одноразовых товаров достаточно сохранять идентификатор и статус покупки в виде ключ-значение: productId=true. Это позволяет быстро проверять наличие товара при запуске игры.

Для подписок рекомендуется сохранять дату последней успешной транзакции и период действия. Это помогает корректно отображать активные подписки при запуске и восстанавливать их после переустановки приложения или смены устройства.

Метод восстановления покупок реализуется через RestorePurchases() в скрипте StoreManager. На iOS вызов обязателен для всех Non-Consumable товаров и подписок. На Android восстановления обычно выполняются автоматически, но рекомендуется добавить кнопку «Восстановить покупки» для надёжности.

При восстановлении транзакций:

  • Проверяйте идентификаторы товаров и обновляйте локальное хранилище.
  • Обновляйте интерфейс магазина, отмечая уже приобретённые товары.
  • Логируйте все успешные и неудачные восстановленные покупки для отладки и аналитики.

Рекомендуется объединять сохранение и восстановление с обработкой транзакций в одном классе StoreManager, чтобы централизовать управление состоянием товаров и минимизировать вероятность ошибок.

Вопрос-ответ:

Как правильно подключить Unity IAP к существующему проекту?

Для подключения Unity IAP откройте Package Manager и установите пакет In-App Purchasing. После установки перейдите в Services → In-App Purchasing → Enable. Если проект ещё не связан с Unity Services, создайте организацию и подключите проект к облаку Unity. Затем настройте платформенные параметры: для Android укажите SHA1 ключ и включите Google Play Billing, для iOS убедитесь, что Bundle Identifier совпадает с идентификатором приложения в App Store Connect.

Как лучше всего структурировать идентификаторы товаров для магазина?

Каждый товар должен иметь уникальный идентификатор, совпадающий с настройками Unity IAP и платформенного магазина. Рекомендуется использовать формат com.companyname.gamename.producttype. Для одноразовых товаров (Consumable) добавить «.consumable», для постоянных товаров (Non-Consumable) — «.nonconsumable», для подписок — «.subscription». Такой подход облегчает добавление новых товаров и предотвращает дублирование.

Какие ошибки могут возникнуть при обработке транзакций и как их контролировать?

Чаще всего возникают ошибки авторизации, отмены пользователем или проблемы сети. В методе OnPurchaseFailed необходимо логировать идентификатор товара и код ошибки. Для сетевых ошибок стоит реализовать повторную попытку с ограничением по количеству попыток и таймаутом. Успешные покупки обрабатываются в OnPurchaseComplete, где обновляется баланс и сохраняется состояние товара в локальном хранилище.

Как проверить работу магазина на мобильных устройствах до релиза?

На Android используйте Internal Test Track с тестовыми аккаунтами Google и проверочными картами. На iOS создайте Sandbox Account через App Store Connect. Проверяйте сценарии успешной покупки, отмены транзакции, проблемы сети и восстановление предыдущих покупок. Важно фиксировать через Debug.Log идентификаторы товаров и статусы транзакций, чтобы выявлять расхождения между редактором и устройством.

Каким образом лучше сохранять и восстанавливать покупки в проекте?

Для одноразовых товаров используйте локальное хранилище, например PlayerPrefs, сохраняя идентификатор и статус покупки. Для подписок сохраняйте дату последней транзакции и период действия. Восстановление реализуется через метод RestorePurchases() в StoreManager. После восстановления обновляйте локальное хранилище и интерфейс, отмечая купленные товары, а также логируйте все успешные и неудачные операции для отладки.

Как правильно реализовать восстановление покупок для подписок и одноразовых товаров в Unity?

Для восстановления покупок используйте метод RestorePurchases() внутри скрипта StoreManager. На iOS этот вызов обязателен для всех Non-Consumable товаров и подписок. Для Android большинство покупок восстанавливаются автоматически, но рекомендуется добавить отдельную кнопку для ручного восстановления. После вызова метода проверяйте идентификаторы товаров и обновляйте локальное хранилище, например PlayerPrefs, чтобы сохранялось состояние покупки. Также обновляйте интерфейс магазина, отмечая купленные товары, и фиксируйте все успешные и неудачные транзакции в логах для анализа и исправления возможных ошибок.

Ссылка на основную публикацию