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

Плагин Google Play Billing расширяет встроенные сервисы и ресурсы Unity для покупок в приложении, называемые Unity IAP , чтобы предоставить вашей игре все новейшие функции библиотеки Google Play Billing. В этом руководстве объясняется, как настроить проект для использования плагина. В этом руководстве также описывается, как реализовать функции библиотеки Google Play Billing Library в вашей игре на 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 выберите «Ресурсы» > «Импортировать пакет» > «Пользовательский пакет» .

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

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

Чтобы включить плагин, замените реализацию Google Play Unity IAP на плагин Google Play Billing. Например, при использовании сценария покупателя Unity IAP вы должны изменить 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 в свою игру.

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

Библиотека платежей Google Play также включает в себя некоторые функции, уникальные для магазина 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.
    });

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

Когда вы используете плагин 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 для управления подписками. Поскольку стандартная реализация IAP этого класса в Unity использует полезную нагрузку разработчика, этот класс не поддерживается. Вы по-прежнему можете создать этот класс, но можете получить ненадежные данные при использовании любого из методов получения класса.

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

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

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

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

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

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