Используйте библиотеку платежей 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 Services .
  2. Выполните все шаги, описанные в следующем руководстве по Unity: Включите службу Unity IAP .

Скачайте и импортируйте плагин.

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

  1. Загрузите последнюю версию плагинов Google Play для Unity со страницы релизов репозитория на GitHub .
  2. В строке меню Unity выберите Assets > Import Package > Custom Package .

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

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

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

Настройка параметров сборки

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

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

  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 продолжит использовать собственное решение для внутриигровых покупок на других платформах:

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 по умолчанию следует только при выборе 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.

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

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

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

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 работают так же, как и стандартная реализация внутриигровых покупок 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 предоставляет альтернативный API для использования вместо этих методов. Для повышения или понижения уровня подписки вызовите метод UpdateSubscription() в режиме пропорционального распределения:

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

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

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