Этот документ содержит примечания к выпуску библиотеки платежей Google Play.
Выпуск библиотеки Google Play Billing 7.1.1 (03.10.2024)
Доступна версия 7.1.1 библиотеки Google Play Billing и расширений Kotlin.
Исправления ошибок
- Исправлена ошибка в Play Billing Library 7.1.0, связанная с тестированием кодов ответов
BillingResult
.
Выпуск библиотеки Google Play Billing 7.1.0 (19 сентября 2024 г.)
Теперь доступна версия 7.1.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
- Улучшена безопасность потоков, связанная с состоянием соединения и управлением.
- Внесены частичные изменения для тестирования кодов ответов
BillingResult
, которые полностью доступны в библиотеке платежей Play 7.1.1. Чтобы протестировать интеграцию с помощью этой функции, вам необходимо выполнить обновление до Play Billing Library 7.1.1. Существует ошибка, которая затронет только приложения с включенным тестированием переопределения биллинга и не повлияет на регулярное использование. Дополнительные сведения см. в разделе Тестовые коды ответовBillingResult
.
Выпуск библиотеки Google Play Billing 7.0.0 (14 мая 2024 г.)
Доступна версия 7.0.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое описание изменений
Добавлены API для поддержки подписки в рассрочку.
- Добавлен
ProductDetails.InstallmentPlanDetails
для базовых планов рассрочки, которые пользователи имеют право приобрести. Этот API помогает вашему приложению идентифицировать план рассрочки и настройку его обязательств, чтобы предоставить соответствующую информацию пользователю. Чтобы узнать больше, ознакомьтесь с нашим руководством по рассрочке подписки .
- Добавлен
Добавлены
PendingPurchasesParams
иBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
вместоBillingClient.Builder.enablePendingPurchases()
, который в этом выпуске устарел.- Устаревший метод
enablePendingPurchases()
функционально эквивалентенenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
- Устаревший метод
Добавлены API для поддержки ожидающих транзакций для планов предоплаты подписки:
- Используйте
PendingPurchasesParams.Builder.enablePrepaidPlans()
вместе сBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
чтобы включить ожидающие транзакции для планов предоплаты подписки. Добавляя поддержку, убедитесь, что ваше приложение также правильно управляет жизненным циклом подписки. Чтобы узнать больше, ознакомьтесь с нашим руководством по ожидающим покупкам . - Добавлены
Purchase.PendingPurchaseUpdate
иPurchase.getPendingPurchaseUpdate()
для получения ожидающего пополнения или обновления или понижения существующей подписки.
- Используйте
Удалены
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
иAlternativeChoiceDetails
.- Вместо этого разработчикам следует использовать
BillingClient.Builder.enableUserChoiceBilling()
сUserChoiceBillingListener
иUserChoiceDetails
в обратном вызове прослушивателя.
- Вместо этого разработчикам следует использовать
Удалены
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
иBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.- Вместо этого разработчикам следует использовать
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
сBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
. -
BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
. -
BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Вместо этого разработчикам следует использовать
Удален
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
.- Вместо этого разработчикам следует использовать
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
.
- Вместо этого разработчикам следует использовать
BillingClient.queryPurchaseHistoryAsync()
устарел и будет удален в будущем выпуске. Вместо этого разработчикам следует использовать следующие альтернативы:- Подтвержденные и ожидающие покупки: используйте
BillingClient.queryPurchasesAsync()
для получения активных покупок. - Потребляемые покупки. Разработчики должны отслеживать использованные покупки на своих собственных серверах.
- Отмененные покупки: используйте API разработчика аннулированных покупок .
- Более подробную информацию см. в разделе Запрос истории покупок.
- Подтвержденные и ожидающие покупки: используйте
BillingFlowParams.ProductDetailsParams.setOfferToken()
теперь выдает исключение, когда разработчики указывают пустойofferToken
.Обновлен
minSdkVersion
до 21 иtargetSdkVersion
до 34.
Выпуск библиотеки Google Play Billing 6.2.1 (16 апреля 2024 г.)
Доступна версия 6.2.1 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое описание изменений
- Исправлена ошибка в
BillingClient.showAlternativeBillingOnlyInformationDialog()
, из-за которойAlternativeBillingOnlyInformationDialogListener
не мог быть вызван в некоторых случаях после завершения диалога.
Выпуск библиотеки Google Play Billing 6.2.0 (06.03.2024)
Доступна версия 6.2.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое описание изменений
- Добавлены API для поддержки внешних предложений.
- Добавлен
BillingClient.Builder.enableExternalOffer()
чтобы включить возможность предоставления внешних предложений. - Добавлен
BillingClient.isExternalOfferAvailableAsync()
для проверки доступности предоставления функциональности внешних предложений. - Добавлен
BillingClient.showExternalOfferInformationDialog()
чтобы показывать пользователям информационное диалоговое окно перед тем, как вывести пользователей за пределы приложения. - Добавлен
BillingClient.createExternalOfferReportingDetailsAsync()
для создания полезных данных, необходимых для отчета о транзакциях, совершенных через внешние предложения.
- Добавлен
Выпуск библиотеки Google Play Billing 6.1.0 (14 ноября 2023 г.)
Теперь доступна версия 6.1.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
- Добавлены API для поддержки только альтернативного биллинга (т. е. без выбора пользователя).
- Добавлен
BillingClient.Builder.enableAlternativeBillingOnly()
, чтобы функционально включить возможность предлагать только альтернативное выставление счетов. - Добавлен
BillingClient.isAlternativeBillingOnlyAvailableAsync()
для проверки доступности предложения только альтернативного выставления счетов. - Добавлен
BillingClient.showAlternativeBillingOnlyInformationDialog()
для отображения информационного диалогового окна, информирующего пользователей, когда используется только альтернативное выставление счетов. - Добавлен
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
для создания полезных данных, необходимых для отчета о транзакциях, совершенных только посредством альтернативного выставления счетов.
- Добавлен
- Обновлены API биллинга по выбору пользователя.
- Добавлен
UserChoiceBillingListener
вместо AlternativeBillingListener , который был помечен как устаревший. - Добавлен
UserChoiceDetails
вместоAlternativeChoiceDetails
, который был помечен как устаревший. - Добавлен
BillingClient.Builder.enableUserChoiceBilling()
вместоBillingClient.Builder.enableAlternativeBilling()
который был помечен как устаревший.
- Добавлен
- Добавлен
BillingClient.getBillingConfigAsync()
для получения страны Google Play.
Выпуск библиотеки Google Play Billing Library 6.0.1 (22 июня 2023 г.)
Теперь доступна версия 6.0.1 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
Обновите библиотеку платежей Play, чтобы она была совместима с Android 14.
Выпуск библиотеки Google Play Billing Library 6.0 (10 мая 2023 г.)
Теперь доступна версия 6.0.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
Добавлено новое перечисление
ReplacementMode
для заменыProrationMode
.Обратите внимание, что
ProrationMode
по-прежнему доступен по соображениям обратной совместимости.Удален идентификатор заказа для
PENDING
покупок.Раньше идентификатор заказа создавался всегда, даже если покупка находилась в ожидании. Начиная с версии 6.0.0, идентификатор заказа не будет создаваться для ожидающих покупок, и для этих покупок идентификатор заказа будет заполнен после перевода покупки в состояние
PURCHASED
.Удалены методы
queryPurchases
иlaunchPriceConfirmationFlow
.Методы
queryPurchases
иlaunchPriceConfirmationFlow
, которые ранее были помечены как устаревшие, теперь удалены из библиотеки платежей Play 6.0.0. Разработчикам следует использоватьqueryPurchasesAsync
вместоqueryPurchases
. АльтернативыlaunchPriceConfirmationFlow
см. в разделе Изменения цен .Добавлен новый код ответа на сетевую ошибку.
Новый код ответа на сетевую ошибку
NETWORK_ERROR
был добавлен начиная с версии PBL 6.0.0. Этот код возвращается, когда возникает ошибка из-за проблемы с сетевым подключением. Эти ошибки сетевого подключения ранее обозначались какSERVICE_UNAVAILABLE
.Обновлены
SERVICE_UNAVAILABLE
иSERVICE_TIMEOUT
.Начиная с версии PBL 6.0.0, ошибки из-за тайм-аута обработки будут возвращаться как
SERVICE_UNAVAILABLE
вместо текущегоSERVICE_TIMEOUT
.Поведение не меняется в более ранних версиях PBL.
Удален
SERVICE_TIMEOUT
.Начиная с версии PBL 6.0.0,
SERVICE_TIMEOUT
больше не будет возвращаться. Предыдущие версии PBL по-прежнему будут возвращать этот код.Добавлен дополнительный лог.
Версия Play Billing Library 6 включает дополнительное ведение журнала, которое дает представление об использовании API (например, об успехах и сбоях) и проблемах с подключением к службам. Эта информация будет использоваться для повышения производительности библиотеки платежей Play и улучшения поддержки ошибок.
Выпуск библиотеки Google Play Billing 5.2.1 (22 июня 2023 г.)
Доступна версия 5.2.1 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое описание изменений
Обновите библиотеку платежей Play, чтобы она была совместима с Android 14.
Выпуск библиотеки Google Play Billing 5.2 (06.04.2023)
Доступна версия 5.2.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
- Добавлены классы для поддержки альтернативных потоков выставления счетов на мобильных устройствах и планшетах для пользователей из Южной Кореи:
- Добавлен метод
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
для указания идентификатора внешней транзакции исходной подписки. - Добавлен метод
BillingClient.Builder.enableAlternativeBilling()
позволяющий пользователям в Южной Корее выбирать альтернативный вариант выставления счетов.
Выпуск библиотеки Google Play Billing 5.1 (31 октября 2022 г.)
Доступна версия 5.1.0 библиотеки Google Play Billing и расширений Kotlin.
Эта версия содержит следующие изменения.
Краткое описание изменений
- Добавлен метод
ProductDetails.SubscriptionOfferDetails.getOfferId()
для получения идентификатора предложения. - Добавлен метод
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
для получения идентификатора базового плана. -
targetSdkVersion
обновлен до 31.
Выпуск библиотеки Google Play Billing 5.0 (11 мая 2022 г.)
Теперь доступна версия 5.0.0 библиотеки Google Play Billing и расширений Kotlin.
Эта версия содержит следующие изменения.
Краткое описание изменений
- Представлена новая модель подписок, включая новые сущности, которые позволяют создавать несколько предложений для одного продукта по подписке. Дополнительную информацию см. в руководстве по миграции .
- Добавлен
BillingClient.queryProductDetailsAsync()
вместоBillingClient.querySkuDetailsAsync()
. - Добавлен метод
setIsOfferPersonalized()
для требований к раскрытию персонализированных цен в ЕС. Подробнее о том, как использовать этот метод, читайте в разделе «Указание персонализированной цены» . - Удален
queryPurchases()
, который ранее устарел и заменен на queryPurchasesAsync, представленный в Библиотеке выставления счетов Google Play 4.0.0. -
launchPriceChangeFlow
устарел и будет удален в будущем выпуске. Дополнительные сведения об альтернативах см. в разделе Запуск потока подтверждения изменения цены . - Удален
setVrPurchaseFlow()
, который ранее использовался при создании экземпляра потока покупок. В предыдущих версиях этот метод перенаправлял пользователя для совершения покупки на его Android-устройстве. Как только вы удалите этот метод, пользователи смогут совершать покупку через стандартный процесс покупки.
Выпуск библиотеки Google Play Billing 4.1 (23 февраля 2022 г.)
Доступна версия 4.1.0 библиотеки Google Play Billing и расширений Kotlin.
Эта версия содержит следующие изменения.
Краткое описание изменений
- Добавлен
BillingClient.showInAppMessages()
для облегчения обработки отклонений платежей по подписке. Дополнительные сведения о том, как использовать обмен сообщениями в приложении для обработки отклонений платежей за подписку, см. в разделе Обработка отклонений платежей .
Выпуск библиотеки Google Play Billing 4.0 (18 мая 2021 г.)
Теперь доступна версия 4.0.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое описание изменений
Добавлен
BillingClient.queryPurchasesAsync()
вместоBillingClient.queryPurchases()
который будет удален в будущем выпуске.Добавлен новый режим замены подписки
IMMEDIATE_AND_CHARGE_FULL_PRICE
.Добавлен метод
BillingClient.getConnectionState()
для получения состояния подключения библиотеки платежей Play.Обновлена документация Javadoc и реализация, чтобы указать, в каком потоке может быть вызван метод и результаты какого потока публикуются.
Добавлен
BillingFlowParams.Builder.setSubscriptionUpdateParams()
как новый способ инициировать обновления подписки. Это заменяетBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
,BillingFlowParams.Builder#setOldSku
которые были удалены.Добавлены
Purchase.getQuantity()
иPurchaseHistoryRecord.getQuantity()
.Добавлены
Purchase#getSkus()
иPurchaseHistoryRecord#getSkus()
. Они заменяютPurchase#getSku
иPurchaseHistoryRecord#getSku
которые были удалены.Удалены
BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
иBillingFlowParams#getSkuType
.
Выпуск библиотеки Google Play Billing 3.0.3 (12 марта 2021 г.)
Теперь доступна версия 3.0.3 библиотеки Google Play Billing, расширение Kotlin и плагин Unity.
Исправления ошибок Java и Kotlin
- Исправлена утечка памяти при вызове
endConnection()
. - Исправлена проблема, когда библиотека биллинга Google Play используется приложениями, использующими режим запуска одной задачи. Обратный вызов
onPurchasesUpdated()
будет запущен, когда приложение будет возобновлено из панели запуска Android и диалоговое окно выставления счетов будет видно до его приостановки.
Исправления ошибок Unity
- Обновите Java до версии 3.0.3, чтобы устранить утечку памяти и решить проблему, препятствующую покупкам, когда приложение возобновляется из панели запуска Android и диалоговое окно оплаты было видно до его приостановки.
Выпуск библиотеки Google Play Billing 3.0.2 (24 ноября 2020 г.)
Версия 3.0.2 библиотеки Google Play Billing и расширения Kotlin теперь доступны.
Исправления ошибок
- Исправлена ошибка в расширении Kotlin, из-за которой сопрограмма завершалась с ошибкой «Уже возобновлено».
- Исправлены неразрешенные ссылки при использовании расширения Kotlin с библиотекой kotlinx.coroutines версии 1.4+.
Выпуск библиотеки Google Play Billing 3.0.1 (30 сентября 2020 г.)
Версия 3.0.1 библиотеки Google Play Billing и расширения Kotlin теперь доступны.
Исправления ошибок
- Исправлена ошибка, из-за которой, если приложение было закрыто и восстановлено во время выставления счета,
PurchasesUpdatedListener
не мог быть вызван с результатом покупки.
Выпуск библиотеки Google Play Billing 3.0 (08.06.2020)
Теперь доступна версия 3.0.0 библиотеки Google Play Billing, расширение Kotlin и плагин Unity.
Краткое описание изменений
- Удалена поддержка SKU за вознаграждение.
- Удалены параметры
ChildDirected
иUnderAgeOfConsent
. - Удалены устаревшие методы полезной нагрузки разработчика.
- Удалены устаревшие методы
BillingFlowParams.setAccountId()
иBillingFlowParams.setDeveloperId()
. - Удалены устаревшие методы
BillingFlowParams.setOldSkus(String oldSku)
иBillingFlowParams.addOldSku(String oldSku)
. - Добавлены аннотации об отсутствии значений.
Исправления ошибок
-
SkuDetails.getIntroductoryPriceCycles()
теперь возвращаетint
вместоString
. - Исправлена ошибка, из-за которой поток выставления счетов считался имеющим дополнительные параметры, даже если дополнительные параметры не были установлены.
Выпуск библиотеки Google Play Billing 2.2.1 (20 мая 2020 г.)
Доступна версия 2.2.1 библиотеки Google Play Billing.
Исправления ошибок
- Обновлена версия по умолчанию библиотеки Java Play Billing, от которой зависит расширение Kotlin.
Выпуск библиотеки Google Play Billing Library 2.2.0 и поддержка Unity (23 марта 2020 г.)
Версия 2.2.0 Google Play Billing предоставляет функции, которые помогают разработчикам гарантировать, что покупки будут отнесены к правильному пользователю. Эти изменения заменяют необходимость создания индивидуальных решений на основе полезной нагрузки разработчика. В рамках этого обновления функциональность полезной нагрузки для разработчиков устарела и будет удалена в будущем выпуске. Дополнительные сведения, включая рекомендуемые альтернативы, см. в разделе Полезная нагрузка разработчика .
Библиотека выставления счетов Google Play 2 для Unity
В дополнение к текущим версиям Google Play Billing Library 2 для Java и Kotlin мы выпустили версию библиотеки для использования с Unity. Разработчики игр, использующие API для покупок в приложениях Unity, могут выполнить обновление прямо сейчас, чтобы воспользоваться всеми функциями Google Play Billing Library 2 и упростить последующие обновления до будущих версий Google Play Billing Library.
Дополнительные сведения см. в разделе Использование биллинга Google Play с Unity .
Краткое описание изменений
- Платежная библиотека Google Play Java
- В
AcknowledgePurchaseParams
устаревшие методыsetDeveloperPayload()
иgetDeveloperPayload()
. - В
ConsumeParams
устаревшие методыsetDeveloperPayload()
иgetDeveloperPayload()
. - В
BillingFlowParams
setAccountId()
переименован вsetObfuscatedAccountId()
, а также задокументировано ограничение длины в 64 символа и ограничение, запрещающее использование личной информации (PII) в этом поле.setAccountId()
помечен как устаревший и будет удален в будущей версии библиотеки. - В
BillingFlowParams
добавленsetObfuscatedProfileId()
, который работает аналогичноsetObfuscatedAccountId()
. Дополнительные сведения см. в разделе Обновления полезных данных для разработчиков и альтернативы . - В
Purchase
добавлен методgetAccountIdentifiers()
для возврата запутанных идентификаторов учетных записей, установленных вBillingFlowParams
. - В
BillingClient
методloadRewardedSku()
помечен как устаревший в рамках прекращения поддержки вознагражденных SKU. Дополнительную информацию о прекращении поддержки можно найти в Справочном центре Play Console .
- В
Выпуск библиотеки Google Play Billing Library 2.1.0 и выпуск расширения Kotlin 2.1.0 (10 декабря 2019 г.)
Версия 2.1.0 библиотеки Google Play Billing и новое расширение Kotlin теперь доступны. Расширение Kotlin библиотеки биллинга Play предоставляет идиоматические альтернативы API для использования Kotlin, обеспечивая лучшую нулевую безопасность и сопрограммы. Примеры кода см. в разделе «Использование библиотеки платежей Google Play» .
Эта версия содержит следующие изменения.
Краткое описание изменений
- В
BillingFlowParams
устарелsetOldSku(String oldSku)
и заменен наsetOldSku(String oldSku, String purchaseToken)
, чтобы устранить неоднозначность, когда несколько учетных записей на устройстве владеют одним и тем же номером sku.
Выпуск библиотеки Google Play Billing 2.0.3 (05.08.2019)
Доступна версия 2.0.3 библиотеки Google Play Billing.
Исправления ошибок
- Исправлена ошибка, из-за которой
querySkuDetailsAsync()
иногда завершался с ошибкой с кодомDEVELOPER_ERROR
вместо возврата успешного результата.
Выпуск библиотеки Google Play Billing 2.0.2 (08.07.2019)
Доступна версия 2.0.2 библиотеки Google Play Billing. Этот выпуск содержит обновления справочной документации и не меняет функциональность библиотеки.
Выпуск библиотеки Google Play Billing 2.0.1 (06.06.2019)
Доступна версия 2.0.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Исправления ошибок
- Исправлена ошибка, из-за которой в некоторых случаях сообщения отладки возвращались как
null
. - Исправлена потенциальная проблема с утечкой памяти.
Выпуск библиотеки Google Play Billing 2.0 (07.05.2019)
Доступна версия 2.0 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Покупки должны быть подтверждены в течение трех дней.
Google Play поддерживает покупку продуктов внутри вашего приложения (внутри приложения) или за его пределами (вне приложения). Чтобы Google Play обеспечивал единообразный процесс покупок независимо от того, где пользователь покупает ваш продукт, вы должны подтверждать все покупки, полученные через Библиотеку выставления счетов Google Play, как можно скорее после предоставления права пользователю. Если вы не подтвердите покупку в течение трех дней, пользователь автоматически получит возврат средств, а Google Play отзовет покупку. Для ожидающих транзакций (новое в версии 2.0) трехдневное окно начинается, когда покупка переходит в состояние PURCHASED
, и не применяется, пока покупка находится в состоянии PENDING
.
Для подписок вы должны подтвердить любую покупку, имеющую новый токен покупки. Это означает, что все первоначальные покупки, изменения плана и повторную подписку необходимо подтверждать, но вам не нужно подтверждать последующие продления. Чтобы определить, требует ли покупка подтверждения, вы можете проверить поле подтверждения в покупке.
Объект Purchase
теперь включает метод isAcknowledged()
, который указывает, подтверждена ли покупка. Кроме того, API разработчика Google Play включает логические значения подтверждения для Purchases.products
и Purchases.subscriptions
. Прежде чем подтверждать покупку, обязательно используйте эти методы, чтобы определить, была ли покупка уже подтверждена.
Подтвердить покупку можно одним из следующих способов:
- Для расходных продуктов используйте
consumeAsync()
, который находится в клиентском API. - Для продуктов, которые не потребляются, используйте
acknowledgePurchase()
, который находится в клиентском API. - В API сервера также доступен новый метод
acknowledge()
.
BillingFlowParams.setSku() удален.
Ранее устаревший метод BillingFlowParams#setSku()
был удален в этом выпуске. Прежде чем отображать продукты в потоке покупок, теперь необходимо вызвать BillingClient.querySkuDetailsAsync()
, передав результирующий объект SkuDetails
в BillingFlowParams.Builder.setSkuDetails()
.
Примеры кода см. в разделе «Использование библиотеки платежей Google Play» .
Полезная нагрузка разработчика поддерживается
В версии 2.0 библиотеки Google Play Billing добавлена поддержка полезных данных разработчика — произвольных строк, которые можно прикреплять к покупкам. Вы можете прикрепить к покупке параметр полезной нагрузки разработчика, но только тогда, когда покупка подтверждена или использована. В этом отличие от полезных данных разработчика в AIDL, где полезные данные можно указать при запуске потока покупки. Поскольку покупки теперь можно инициировать за пределами вашего приложения , это изменение гарантирует, что у вас всегда будет возможность добавить полезную нагрузку к покупкам.
Для доступа к полезным данным в новой библиотеке объекты Purchase
теперь включают метод getDeveloperPayload()
.
Последовательные предложения
Когда вы предлагаете SKU со скидкой, Google Play теперь возвращает исходную цену SKU, чтобы вы могли показать пользователям, что они получают скидку.
SkuDetails
содержит два новых метода для получения исходной цены SKU:
-
getOriginalPriceAmountMicros()
— возвращает неформатированную исходную цену SKU до скидки. -
getOriginalPrice()
— возвращает исходную цену с дополнительным форматированием валюты.
Ожидающие транзакции
В версии 2.0 библиотеки Google Play Billing вы должны поддерживать покупки, в которых перед предоставлением права требуются дополнительные действия. Например, пользователь может выбрать покупку вашего продукта в приложении в обычном магазине за наличные. Это означает, что транзакция завершается вне вашего приложения. В этом сценарии вам следует предоставить право только после того, как пользователь завершит транзакцию.
Чтобы включить отложенные покупки, вызовите enablePendingPurchases()
в рамках инициализации вашего приложения.
Используйте Purchase.getPurchaseState()
чтобы определить, является ли состояние покупки PURCHASED
или PENDING
. Обратите внимание, что вам следует предоставлять право только в том случае, если состояние PURCHASED
. Вам следует проверить наличие обновлений статуса Purchase
, выполнив следующие действия:
- При запуске приложения вызовите
BillingClient.queryPurchases()
чтобы получить список непотребленных продуктов, связанных с пользователем. - Вызовите
Purchase.getPurchaseState()
для каждого возвращенного объектаPurchase
. - Реализуйте метод
onPurchasesUpdated()
для реагирования на изменения объектовPurchase
.
Кроме того, API разработчика Google Play включает состояние PENDING
для Purchases.products
. Ожидающие транзакции не поддерживаются для подписок.
В этом выпуске также представлен новый тип уведомлений для разработчиков в режиме реального времени — OneTimeProductNotification
. Этот тип уведомления содержит одно сообщение, значение которого — ONE_TIME_PRODUCT_PURCHASED
или ONE_TIME_PRODUCT_CANCELED
. Этот тип уведомления отправляется только для покупок, связанных с отложенной формой оплаты, например наличными.
Подтверждая ожидающие покупки, обязательно подтверждайте покупку только в том случае, если состояние покупки — PURCHASED
, а не PENDING
.
Изменения API
Версия 2.0 библиотеки Google Play Billing содержит несколько изменений API для поддержки новых функций и уточнения существующих функций.
потреблятьAsync
consumeAsync()
теперь принимает объект ConsumeParams
вместо purchaseToken
. ConsumeParams
содержит purchaseToken
, а также дополнительные полезные данные для разработчика.
Предыдущая версия consumeAsync()
была удалена в этом выпуске.
запросPurchaseHistoryAsync
Чтобы свести к минимуму путаницу, queryPurchaseHistoryAsync()
теперь возвращает объект PurchaseHistoryRecord
вместо объекта Purchase
. Объект PurchaseHistoryRecord
аналогичен объекту Purchase
, за исключением того, что он отражает только значения, возвращаемые queryPurchaseHistoryAsync()
, и не содержит полей autoRenewing
, orderId
и packageName
. Обратите внимание, что с возвращаемыми данными ничего не изменилось queryPurchaseHistoryAsync()
возвращает те же данные, что и раньше.
Возвращаемые значения BillingResult
API, которые ранее возвращали целочисленное значение BillingResponse
, теперь возвращают объект BillingResult
. BillingResult
содержит целое число BillingResponse
, а также строку отладки, которую можно использовать для диагностики ошибок. Строка отладки использует локаль en-US и не предназначена для показа конечным пользователям.
Исправления ошибок
-
SkuDetails.getIntroductoryPriceAmountMicros()
теперь возвращаетlong
вместоString
.
Выпуск библиотеки Google Play Billing 1.2.2 (07.03.2019)
Доступна версия 1.2.2 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Исправления ошибок
- Исправлена проблема с потоками, появившаяся в версии 1.2.1. Фоновые вызовы больше не блокируют основной поток.
Другие изменения
- Хотя использование основного потока по-прежнему рекомендуется, теперь вы можете создать экземпляр библиотеки Google Play Billing Library из фонового потока.
- Создание экземпляра полностью перенесено в фоновый поток, чтобы снизить вероятность возникновения ошибок ANR.
Выпуск Play Billing Library 1.2.1 (04.03.2019)
Доступна версия 1.2.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Основные изменения
- Добавлена поддержка бонусных продуктов . Дополнительную информацию о вариантах монетизации см. в разделе Добавление функций, специфичных для вознагражденных продуктов .
Другие изменения
- Добавлены общедоступные конструкторы
PurchasesResult
иSkuDetailsResult
чтобы упростить тестирование. - Объекты
SkuDetails
могут использовать новый методgetOriginalJson()
. - Все вызовы служб AIDL теперь обрабатываются фоновыми потоками.
Исправления ошибок
- Прослушиватели обратного вызова Null больше не передаются в общедоступные API.
Выпуск библиотеки Google Play Billing 1.2 (18 октября 2018 г.)
Доступна версия 1.2 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Краткое описание изменений
- Библиотека платежей Google Play теперь лицензируется в соответствии с Лицензионным соглашением об инструментах разработки программного обеспечения Android .
- Добавлен API
launchPriceChangeConfirmationFlow
, который предлагает пользователям просмотреть ожидающее изменение цены подписки. - Добавлена поддержка нового режима пропорционального распределения
DEFERRED
при обновлении или понижении подписки пользователя. - В классе
BillingFlowParams
setSku()
заменен наsetSkuDetails()
. - Исправлены мелкие ошибки и оптимизирован код.
Подтверждение изменения цены
Теперь вы можете изменить цену подписки в консоли Google Play и предложить пользователям просмотреть и принять новую цену при входе в ваше приложение.
Чтобы использовать этот API, создайте объект PriceChangeFlowParams
, используя skuDetails
продукта подписки, а затем вызовите launchPriceChangeConfirmationFlow()
. Реализуйте PriceChangeConfirmationListener
для обработки результата после завершения потока подтверждения изменения цены, как показано в следующем фрагменте кода:
Котлин
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Ява
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
Поток подтверждения изменения цены отображает диалоговое окно, содержащее новую информацию о ценах, в котором пользователям предлагается принять новую цену. Этот поток возвращает код ответа типа BillingClient.BillingResponse
.
Новый режим пропорционального распределения
При обновлении или понижении подписки пользователя вы можете использовать новый режим пропорционального распределения, DEFERRED
. В этом режиме подписка пользователя обновляется при ее следующем продлении. Дополнительные сведения о том, как установить этот режим пропорционального распределения, см. в разделе Установка режима пропорционального распределения .
Новый метод настройки деталей SKU
В классе BillingFlowParams
метод setSku()
объявлен устаревшим. Это изменение предназначено для оптимизации процесса выставления счетов в Google Play.
При создании нового экземпляра BillingFlowParams
в клиенте выставления счетов в приложении мы рекомендуем вместо этого работать с объектом JSON напрямую с помощью setSkuDetails()
, как показано в следующем фрагменте кода:
В классе BillingFlowParams
Builder метод setSku()
признан устаревшим. Вместо этого используйте метод setSkuDetails()
, как показано в следующем фрагменте кода. Объект, передаваемый в объект setSkuDetails()
поступает из метода querySkuDetailsAsync()
.
Котлин
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Ява
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Выпуск Play Billing Library 1.1 (07.05.2018)
Доступна версия 1.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.
Краткое описание изменений
- Добавлена поддержка указания режима пропорционального распределения в
BillingFlowParams
при обновлении/понижении существующей подписки. - Логический флаг
replaceSkusProration
вBillingFlowParams
больше не поддерживается. Вместо этого используйтеreplaceSkusProrationMode
. -
launchBillingFlow()
теперь запускает обратный вызов в случае неудачных ответов.
Изменения в поведении
Версия 1.1 библиотеки Google Play Billing содержит следующие изменения поведения.
Разработчики могут установить replaceSkusProrationMode
в классе BillingFlowParams
ProrationMode
предоставляет дополнительные сведения о типе пропорционального распределения при обновлении или понижении уровня подписки пользователя.
Котлин
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Ява
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
В настоящее время Google Play поддерживает следующие режимы пропорционального распределения:
IMMEDIATE_WITH_TIME_PRORATION | Замена вступает в силу немедленно, а новое время истечения срока действия будет пропорционально рассчитано и зачислено или снято с пользователя. Это текущее поведение по умолчанию. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE | Замена вступает в силу немедленно, а цикл выставления счетов остается прежним. Взимается плата за оставшийся период. Примечание . Эта опция доступна только для обновления подписки. |
IMMEDIATE_WITHOUT_PRORATION | Замена вступает в силу немедленно, и новая цена будет взиматься в следующий раз. Платежный цикл остается прежним. |
replaceSkusProration
больше не поддерживается в классе BillingFlowParams
.
Раньше разработчики могли устанавливать логический флаг для взимания пропорциональной суммы за запрос на обновление подписки. Учитывая, что мы поддерживаем ProrationMode
, который содержит более подробную пропорциональную инструкцию, этот логический флаг больше не поддерживается.
launchBillingFlow()
теперь запускает обратный вызов для неудачных ответов
Библиотека выставления счетов всегда будет вызывать обратный вызов PurhcasesUpdatedListener
и асинхронно вернет BillingResponse
. Синхронная возвратная стоимость BillingResponse
также сохраняется.
Исправления ошибок
- Правильно выходит рано в асинхронных методах, когда обслуживание отключена.
- Объекты
Builder
Param больше не мучут встроенные объекты. - Выпуск 68087141 :
launchBillingFlow()
теперь запускает обратный вызов для неудачных ответов.
Google Play Billing Library 1.0 Release (2017-09-19, объявление )
Версия 1.0 Библиотеки Google Play Billing теперь доступна. Эта версия содержит следующие изменения.
Важные изменения
- Встроенное счетное разрешение внутри Манифеста библиотеки. Больше не обязательно добавлять разрешение на
com.android.vending.BILLING
. - Новый строитель добавил в класс
BillingClient.Builder
. - Введен шаблон строителя для класса
SkuDetailsParams
, который будет использоваться в методах для запроса SKU. - Несколько методов API были обновлены для согласованности (те же имена аргументов и порядок возврата).
Поведение изменяется
Версия 1.0 библиотеки Billing Google Play содержит следующие изменения поведения.
BillingClient.Builder Class
BillingClient.Builder
теперь инициализируется с помощью шаблона NewBuilder:
Котлин
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Ява
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Метод LaunchBillingFlow теперь называется с помощью класса BillingFlowParamss
Чтобы инициировать поток выставления счетов для покупки или подписки, метод launchBillingFlow()
получает экземпляр BillingFlowParams
инициализированный с параметрами, специфичными для запроса:
Котлин
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Ява
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Новый способ запросить доступные продукты
Аргументы для методов queryPurchaseHistoryAsync()
и querySkuDetailsAsync()
были завернуты в схему строителя:
Котлин
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Ява
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Результат теперь возвращается с помощью кода результата и список объектов SkuDetails
вместо предыдущего класса обертки для вашего удобства и для того, чтобы быть последовательным в нашем API:
Котлин
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Ява
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Порядок параметров изменен на методе onConsumeResponse()
Заказ аргументов для onConsumeResponse
от интерфейса ConsumeResponseListener
изменился, чтобы быть последовательным для нашего API:
Котлин
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Ява
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Объект Unplated CoperSerSult
PurchaseResult
был неверен, чтобы быть последовательным по всему нашему API:
Котлин
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Ява
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Исправления ошибок
- Нет кода ответа в пакете покупок.
- Исправлена проксибиллинговитность и проблемы покупок в списке во время ротации устройства
Релиз Developer Preview 1 (2017-06-12, объявление )
Предварительный просмотр разработчика был запущен, нацеленный на упрощение процесса разработки, когда дело доходит до выставления счетов, что позволит разработчикам сосредоточить свои усилия на внедрении логики, специфичной для приложения Android, такой как архитектура приложений и структура навигации.
Библиотека включает в себя несколько удобных классов и функций, которые вы можете использовать при интеграции ваших приложений Android с API Google Play Billing. Библиотека также предоставляет уровень абстракции в верхней части сервиса языка определения интерфейса Android (AIDL), что облегчает разработчикам определение интерфейса между приложением и API Billing Billing Google.