Используйте библиотеку платежей Google Play с Unity

Плагин Google Play Billing расширяет встроенные сервисы и ресурсы Unity для покупок внутри приложения ( Unity IAP ), предоставляя вашей игре все новейшие функции библиотеки Google Play Billing. В этом руководстве объясняется, как настроить проект для использования плагина. Также в руководстве описывается, как реализовать функции библиотеки Google Play Billing в вашей игре на Unity.

Настройте плагин Google Play Billing

Чтобы настроить плагин, выполните действия, описанные в каждом из следующих разделов:

  1. Включить уровень абстракции Unity IAP .
  2. Загрузите и импортируйте плагин .
  3. Настройте параметры сборки плагина .
  4. Включите плагин .

Включить уровень абстракции Unity IAP

Плагин Google Play Billing построен на уровне абстракции, входящем в состав Unity IAP, поэтому перед загрузкой и импортом плагина необходимо включить этот уровень абстракции. Чтобы включить уровень абстракции Unity IAP, выполните следующие действия:

  1. Выполните все шаги в следующем руководстве Unity: Настройте свой проект для служб Unity .
  2. Выполните все шаги в следующем руководстве Unity: включите службу Unity IAP .

Загрузите и импортируйте плагин

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

  1. Загрузите последнюю версию плагинов Google Play для Unity со страницы релизов репозитория на GitHub .
  2. В строке меню Unity выберите Ресурсы > Импорт пакета > Пользовательский пакет .

  3. Найдите папку, куда вы загрузили файл .unitypackage , и выберите его.

  4. В диалоговом окне «Импорт пакета Unity» оставьте все активы выбранными и нажмите «Импорт» .

После импорта пакета в ресурсы вашего проекта добавляется новая папка GooglePlayPlugins (в корне папки Assets). Эта папка содержит все ресурсы Google Play Billing Library для плагина.

Настроить параметры сборки

Поскольку плагин расширяет Unity IAP, Unity столкнётся с конфликтами и не сможет собрать Android APK, если из сборки не будут удалены некоторые старые, перекрывающиеся зависимости Unity IAP. Плагин предоставляет автоматический способ удаления конфликтующих библиотек из вашего проекта. Чтобы разрешить эти конфликты, выполните следующие действия:

  1. В строке меню Unity выберите Google > Play Billing > Настройки сборки .

  2. В окне «Настройки сборки Play Billing» нажмите «Исправить» . Это разрешит конфликт и переместит конфликтующие файлы Unity IAP в резервную папку. После нажатия кнопки «Исправить » кнопка изменится на «Восстановить» , которую можно нажать для восстановления исходных конфликтующих файлов.

Включить плагин

Чтобы включить плагин, замените реализацию Google Play в Unity IAP на плагин Google Play Billing. Например, при использовании скрипта Unity IAP Purchaser Script необходимо изменить StandardPurchaseModule , передаваемый в конструктор IAP, на Google.Play.Billing.GooglePlayStoreModule :

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

Если ваша игра использует один и тот же скрипт покупателя для нескольких платформ, то вам следует добавить проверку платформы, чтобы убедиться, что Unity продолжит использовать собственное решение IAP для других платформ:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Если вы публикуете свою игру в других магазинах приложений Android, помимо Google Play Store, то вам следует заменить реализацию Unity IAP по умолчанию только при выборе Google Play Store:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Реализуйте функции Google Play Billing Library в своей игре

Плагин Google Play Billing расширяет возможности Unity IAP, позволяя использовать те же API Unity для управления общими процессами покупок. Обратите внимание на некоторые незначительные изменения в поведении API, связанные с различиями между библиотекой Google Play Billing Library и стандартной реализацией IAP Unity для других магазинов приложений. Если вы впервые работаете с API Unity IAP, см. раздел «Создание скрипта покупки» в руководстве по Unity IAP , где представлен пример реализации базовых процессов покупок.

Библиотека Google Play Billing Library также включает в себя ряд функций, уникальных для магазина Google Play. Доступ к ним осуществляется через расширенный интерфейс. Далее в этом разделе описывается, как реализовать эти уникальные функции Библиотеки Google Play Billing Library в вашей игре.

Включить отложенные покупки

Google Play поддерживает отложенные покупки (также называемые отложенными транзакциями или отложенными покупками), когда пользователи могут создать покупку и завершить ее позже, заплатив наличными в магазине.

Чтобы включить отложенные покупки, используйте конструктор IAP для изменения конфигурации вашего модуля, вызвав метод EnableDeferredPurchase() :

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

Далее реализуем обратный вызов отложенных покупок с помощью расширений Play Store:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Передача зашифрованных идентификаторов аккаунтов в Google Play

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

Чтобы передать зашифрованный идентификатор учетной записи, вызовите метод SetObfuscatedAccountId() из API расширений:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Передача зашифрованных идентификаторов профилей в Google Play

Вы можете передать замаскированный идентификатор профиля в Google Play для выявления мошенничества, например, для определения количества устройств, совершающих покупки с использованием одной и той же учётной записи за короткий промежуток времени. Это похоже на передачу замаскированного идентификатора учётной записи пользователя . В обоих случаях идентификатор представляет одного пользователя, но позволяет однозначно идентифицировать одного пользователя среди нескольких его профилей в одном приложении. После отправки замаскированного идентификатора профиля в Google Play вы можете получить этот идентификатор позже из чека о покупке.

Чтобы передать скрытый идентификатор профиля, используйте конструктор IAP для изменения конфигурации вашего модуля, вызвав метод SetObfuscatedProfileId() :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Подтвердите изменения цен на подписки

Google Play позволяет изменять цену активной подписки . Пользователи вашей игры должны подтвердить любое изменение цены, прежде чем оно вступит в силу. Чтобы запросить у пользователей подтверждение изменения цены подписки, вызовите метод ConfirmSubscriptionPriceChange() :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Изменения в поведении API Unity

При использовании плагина Google Play Billing большинство API ведут себя так же, как стандартная реализация IAP в Unity для других магазинов приложений. Однако в некоторых случаях поведение API может отличаться. В этом разделе описываются эти различия в поведении.

Полезная нагрузка разработчика не поддерживается

Google Play прекратил поддержку полезных данных разработчика и заменяет их альтернативными, более содержательными и контекстными. По этой причине полезные данные разработчика не поддерживаются. Подробнее об альтернативных вариантах см. на странице « Полезные данные разработчика» .

Вы можете продолжать использовать те же интерфейсы, которые определены стандартной реализацией IAP Unity для других магазинов приложений, включая IStoreController . При инициировании покупки вы по-прежнему можете использовать IStoreController и вызвать метод InitiatePurchase() :

public void InitiatePurchase(Purchasing.Product product, string payload);

Однако любая переданная вами полезная нагрузка не вступит в силу (не отобразится в итоговой квитанции).

SubscriptionManager не поддерживается

Unity IAP предоставляет класс SubscriptionManager для управления подписками. Поскольку стандартная реализация этого класса в Unity IAP использует полезную нагрузку разработчика, этот класс не поддерживается. Вы всё равно можете создать этот класс, но при использовании любого из методов-геттеров этого класса вы можете получить ненадёжные данные.

В UpdateSubscription есть небольшие изменения API.

Плагин Google Play Billing не поддерживает использование методов SubscriptionManager.UpdateSubscription() и SubscriptionManager.UpdateSubscriptionInGooglePlayStore() для повышения и понижения уровня подписки. Если ваша игра вызывает эти методы, возникает исключение GooglePlayStoreUnsupportedException .

Библиотека Google Play Billing Library предоставляет альтернативный API для использования вместо этих методов. Чтобы увеличить или уменьшить подписку, вызовите метод UpdateSubscription() используя режим пропорционального распределения:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

Вы можете либо обернуть этот вызов метода проверкой платформы, либо поместить его в блок catch при перехвате исключения GooglePlayStoreUnsupportedException .

Дополнительную информацию и примеры использования режима пропорционального распределения см. в разделе Установка режима пропорционального распределения .