Плагин Google Play Billing расширяет встроенные службы и ресурсы Unity для покупок в приложении, называемых Unity IAP , чтобы предоставить вашей игре все новейшие функции Google Play Billing Library. В этом руководстве объясняется, как настроить ваш проект для использования плагина. В этом руководстве также описывается, как реализовать функции Google Play Billing Library в вашей игре в Unity.
Настройте плагин Google Play Billing
Чтобы настроить плагин, выполните действия, описанные в каждом из этих связанных разделов:
- Включите уровень абстракции Unity IAP .
- Загрузите и импортируйте плагин .
- Настройте параметры сборки плагина .
- Включите плагин .
Включить уровень абстракции Unity IAP
Плагин Google Play Billing построен на уровне абстракции, включенном в Unity IAP, поэтому вам необходимо включить этот уровень абстракции перед загрузкой и импортом плагина. Чтобы включить уровень абстракции Unity IAP, выполните следующие действия:
- Выполните все шаги в следующем руководстве по Unity: Настройка проекта для служб Unity .
- Выполните все шаги в следующем руководстве Unity: включите службу Unity IAP .
Загрузите и импортируйте плагин
Плагин поставляется как пакет Unity в формате .unitypackage
. Чтобы загрузить и импортировать плагин, выполните следующие действия:
- Загрузите последнюю версию плагинов Google Play для Unity со страницы релизов репозитория на GitHub .
В строке меню Unity выберите Ресурсы > Импортировать пакет > Пользовательский пакет .
Найдите папку, куда вы скачали файл
.unitypackage
, и выберите его.В диалоговом окне «Импорт пакета Unity» оставьте все выбранными ресурсы и нажмите «Импорт» .
После импорта пакета в ресурсы вашего проекта добавляется новая папка GooglePlayPlugins (в корне папки Assets). Эта папка содержит все ресурсы Google Play Billing Library для плагина.
Настройте параметры сборки
Поскольку плагин расширяет Unity IAP, Unity столкнется с конфликтами и не сможет собрать Android APK, если из сборки не будут удалены некоторые старые, перекрывающиеся зависимости в Unity IAP. Плагин предоставляет автоматический способ удаления конфликтующих библиотек из вашего проекта. Чтобы разрешить эти конфликты, выполните следующие действия:
В строке меню Unity выберите Google > Play Billing > Настройки сборки .
В окне Play Billing Build Settings нажмите Fix . Это разрешит конфликт и переместит конфликтующие файлы Unity IAP в резервную папку. После нажатия Fix кнопка изменится на Restore , которую вы можете нажать, чтобы восстановить исходные конфликтующие файлы.
Включить плагин
Чтобы включить плагин, замените реализацию 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
для управления подписками. Поскольку стандартная реализация IAP Unity этого класса использует полезную нагрузку разработчика, этот класс не поддерживается. Вы по-прежнему можете создать этот класс, но вы можете получить ненадежные данные при использовании любого из методов получения класса.
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
.
Дополнительную информацию и примеры использования режима пропорционального распределения см. в разделе Установка режима пропорционального распределения .