В этом документе содержатся заметки о выпуске библиотеки Google Play Billing Library.
Выпуск библиотеки Google Play Billing 8.0.0 (30.06.2025)
Теперь доступна версия 8.0.0 библиотеки Google Play Billing и расширений Kotlin.
Краткое изложение изменений
Элементы внутри приложения теперь будут называться одноразовыми продуктами .
Множество вариантов покупки и предложений для разовых продуктов.
Теперь у вас может быть несколько вариантов покупки и предложений для ваших одноразовых продуктов. Это обеспечивает вам гибкость в том, как вы продаете свои продукты, и снижает сложность управления ими.
Улучшен метод
queryProductDetailsAsync()
.До PBL 8.0.0 метод
queryProductDetailsAsync()
не возвращал продукты, которые не удалось получить. Это могло произойти по таким причинам, как отсутствие продукта или отсутствие доступных пользователю предложений. С PBL 8.0.0 невыбранные продукты возвращаются с новым кодом статуса на уровне продукта, который предоставляет информацию о невыбранных продуктах. Обратите внимание, что в сигнатуреProductDetailsResponseListener.onProductDetailsResponse()
произошли изменения, которые требуют внесения изменений в ваше приложение. Для получения дополнительной информации см. раздел обработать результат .Автоматическое повторное подключение услуги.
Новый параметр конструктора
BillingClient.Builder.enableAutoServiceReconnection()
позволяет разработчикам включить автоматическое повторное подключение к сервису, что упрощает управление подключением, автоматически обрабатывая повторные подключения к Play Billing Service и устраняя необходимость вручную вызыватьstartConnection()
в случае отключения сервиса. Для получения дополнительной информации см. Автоматическое повторное установление соединения .Коды подответов для метода
launchBillingFlow()
.BillingResult , возвращаемый из
launchBillingFlow()
, теперь будет включать поле кода подответа. Это поле будет заполняться только в некоторых случаях, чтобы предоставить более конкретную причину сбоя. С PBL 8.0.0 возвращается подкод PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS для случая, когда средства пользователя меньше цены товара, который он пытается купить.Удален метод
queryPurchaseHistory()
.Метод
queryPurchaseHistory()
, который ранее был отмечен как устаревший, теперь удален. См. Query Purchase History для получения подробной информации о том, какие альтернативные API использовать вместо этого.Удален метод
querySkuDetailsAsync()
.Метод
querySkuDetailsAsync()
, который ранее был отмечен как устаревший, теперь удален. Вместо него следует использовать queryProductDetailsAsync .Удален метод
BillingClient.Builder.enablePendingPurchases()
.Метод
enablePendingPurchases()
без параметров, который ранее был отмечен как устаревший, теперь удален. Вместо него следует использоватьenablePendingPurchases(PendingPurchaseParams params)
. Обратите внимание, что устаревшийenablePendingPurchases()
функционально эквивалентенenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.Удален перегруженный метод
queryPurchasesAsync()
, который принимает skuType .Метод
queryPurchasesAsync(String skuType, PurchasesResponseListener listener)
, который ранее был отмечен как устаревший, теперь удален. В качестве альтернативы используйтеqueryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener)
.
Выпуск библиотеки Google Play Billing 7.1.1 (2024-10-03)
Версия 7.1.1 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Исправления ошибок
- Исправлена ошибка в Play Billing Library 7.1.0, связанная с тестированием кодов ответов
BillingResult
.
Выпуск библиотеки Google Play Billing 7.1.0 (19.09.2024)
Версия 7.1.0 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Краткое изложение изменений
- Улучшена безопасность потоков, связанная со статусом соединения и управлением.
- Введены частичные изменения для тестирования кодов ответов [
BillingResult
][billing-result], которые полностью выпущены в Play Billing Library 7.1.1. Чтобы протестировать интеграцию с помощью этой функции, вам необходимо обновиться до Play Billing Library 7.1.1. Существует ошибка, которая повлияет только на приложения с [billing overrides testing enabled][enable-billing-overrides-testing] и не повлияет на обычное использование. Для получения дополнительной информации см. Тестирование кодов ответовBillingResult
. [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing
Выпуск библиотеки Google Play Billing 7.0.0 (14.05.2024)
Теперь доступна версия 7.0.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое изложение изменений
Добавлены API для поддержки подписок с рассрочкой платежа.
- Добавлено [
ProductDetails.InstallmentPlanDetails
][installment-details] для базовых планов рассрочки, которые пользователи имеют право приобрести. Этот API помогает вашему приложению определить план рассрочки и его настройки обязательств, чтобы предоставить пользователю соответствующую информацию. Чтобы узнать больше, см. наше [руководство по рассрочке подписки][installments]. [installment-details]: /reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails [installments]: /google/play/billing/subscriptions#installments
- Добавлено [
Добавлены
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.04.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.11.2023)
Версия 6.1.0 библиотеки Google Play Billing Library и расширений 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 6.0.1 (2023-06-22)
Версия 6.0.1 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Краткое изложение изменений
Обновите Play Billing Library для совместимости с Android 14.
Выпуск Google Play Billing Library 6.0 (10.05.2023)
Теперь доступна версия 6.0.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое изложение изменений
Добавлено новое
ReplacementMode
для заменыProrationMode
.Обратите внимание, что
ProrationMode
по-прежнему доступен в целях обратной совместимости.Удален идентификатор заказа для
PENDING
покупок.Ранее идентификатор заказа всегда создавался, даже если покупка была в состоянии ожидания. Начиная с версии 6.0.0, идентификатор заказа не будет создаваться для ожидающих покупок, и для этих покупок идентификатор заказа будет заполнен после того, как покупка будет переведена в состояние
PURCHASED
.Удалены методы
queryPurchases
иlaunchPriceConfirmationFlow
.Методы
queryPurchases
иlaunchPriceConfirmationFlow
, которые ранее были отмечены как устаревшие, теперь удалены в Play Billing Library 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 Billing Library и предоставления лучшей поддержки при ошибках.
Выпуск библиотеки Google Play Billing 5.2.1 (2023-06-22)
Версия 5.2.1 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Краткое изложение изменений
Обновите Play Billing Library для совместимости с Android 14.
Выпуск библиотеки Google Play Billing Library 5.2 (06.04.2023)
Версия 5.2.0 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Краткое изложение изменений
- Добавлены классы для поддержки альтернативных потоков выставления счетов на мобильных устройствах/планшетах для пользователей в Южной Корее:
- Добавлен метод
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
для указания внешнего идентификатора транзакции исходной подписки. - Добавлен метод
BillingClient.Builder.enableAlternativeBilling()
позволяющий пользователям в Южной Корее выбирать альтернативный вариант оплаты.
Выпуск библиотеки Google Play Billing Library 5.1 (31.10.2022)
Версия 5.1.0 библиотеки Google Play Billing Library и расширений Kotlin уже доступны.
Эта версия содержит следующие изменения.
Краткое изложение изменений
- Добавлен метод
ProductDetails.SubscriptionOfferDetails.getOfferId()
для получения идентификатора предложения. - Добавлен метод
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
для получения идентификатора базового плана. - Обновлена версия
targetSdkVersion
до 31.
Выпуск Google Play Billing Library 5.0 (11.05.2022)
Теперь доступна версия 5.0.0 библиотеки Google Play Billing Library и расширений Kotlin.
Эта версия содержит следующие изменения.
Краткое изложение изменений
- Введена новая модель для подписок, включая новые сущности, которые позволяют создавать несколько предложений для одного продукта подписки. Для получения дополнительной информации см. руководство по миграции .
- Добавлен
BillingClient.queryProductDetailsAsync()
для заменыBillingClient.querySkuDetailsAsync()
. - Добавлен метод
setIsOfferPersonalized()
для требований ЕС по раскрытию персонализированных цен. Чтобы узнать больше о том, как использовать этот метод, см. Укажите персонализированную цену . - Удален
queryPurchases()
, который ранее считался устаревшим и заменен на queryPurchasesAsync, представленный в Google Play Billing Library 4.0.0. -
launchPriceChangeFlow
устарел и будет удален в будущем выпуске. Чтобы узнать больше об альтернативах, см. Запуск потока подтверждения изменения цены . - Удален
setVrPurchaseFlow()
, который ранее использовался при создании потока покупки. В предыдущих версиях этот метод перенаправлял пользователя для завершения покупки на его устройстве на базе Android. После удаления этого метода пользователи будут завершать покупку через стандартный поток покупки.
Выпуск Google Play Billing Library 4.1 (2022-02-23)
Теперь доступна версия 4.1.0 библиотеки Google Play Billing и расширений Kotlin.
Эта версия содержит следующие изменения.
Краткое изложение изменений
- Добавлен
BillingClient.showInAppMessages()
для помощи в обработке отклонений платежей за подписку. Чтобы узнать больше о том, как использовать сообщения в приложении для обработки отклонений платежей за подписку, см. Обработка отклонений платежей .
Выпуск библиотеки Google Play Billing Library 4.0 (18.05.2021)
Теперь доступна версия 4.0.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое изложение изменений
Добавлен
BillingClient.queryPurchasesAsync()
для заменыBillingClient.queryPurchases()
, который будет удален в будущем выпуске.Добавлен новый режим замены подписки
IMMEDIATE_AND_CHARGE_FULL_PRICE
.Добавлен метод
BillingClient.getConnectionState()
для получения состояния подключения Play Billing Library.Обновлены 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.03.2021)
Теперь доступны версия 3.0.3 библиотеки Google Play Billing Library, расширение Kotlin и плагин Unity.
Исправления ошибок Java и Kotlin
- Исправлена утечка памяти при вызове
endConnection()
. - Исправлена проблема, когда Google Play Billing Library используется приложениями, которые используют режим запуска одной задачи. Обратный вызов
onPurchasesUpdated()
будет запущен, когда приложение возобновляется из средства запуска Android, а диалоговое окно выставления счетов было видно до приостановки.
Исправления ошибок Unity
- Выполните обновление до версии Java 3.0.3, чтобы устранить утечку памяти и устранить проблему, препятствующую совершению покупок, когда приложение возобновляется из средства запуска Android, а диалоговое окно с платежными данными было видно до приостановки.
Выпуск Google Play Billing Library 3.0.2 (2020-11-24)
Версия 3.0.2 библиотеки Google Play Billing Library и расширения Kotlin уже доступны.
Исправления ошибок
- Исправлена ошибка в расширении Kotlin, из-за которой сопрограмма завершалась с ошибкой «Уже возобновлено».
- Исправлены неразрешенные ссылки при использовании расширения Kotlin с библиотекой kotlinx.coroutines версии 1.4+.
Выпуск библиотеки Google Play Billing 3.0.1 (30.09.2020)
Версия 3.0.1 библиотеки Google Play Billing Library и расширения Kotlin уже доступны.
Исправления ошибок
- Исправлена ошибка, из-за которой, если приложение было закрыто и восстановлено во время процесса выставления счета,
PurchasesUpdatedListener
мог не вызываться с результатом покупки.
Выпуск Google Play Billing Library 3.0 (08.06.2020)
Теперь доступны версия 3.0.0 библиотеки Google Play Billing Library, расширение Kotlin и плагин Unity.
Краткое изложение изменений
- Удалена поддержка вознагражденных SKU.
- Удалены параметры
ChildDirected
иUnderAgeOfConsent
. - Удалены устаревшие методы полезной нагрузки разработчика.
- Удалены устаревшие методы
BillingFlowParams.setAccountId()
иBillingFlowParams.setDeveloperId()
. - Удалены устаревшие методы
BillingFlowParams.setOldSkus(String oldSku)
иBillingFlowParams.addOldSku(String oldSku)
. - Добавлены аннотации о допустимости значений NULL.
Исправления ошибок
-
SkuDetails.getIntroductoryPriceCycles()
теперь возвращаетint
вместоString
. - Исправлена ошибка, из-за которой поток выставления счетов рассматривался как имеющий дополнительные параметры, даже если дополнительные параметры не были заданы.
Выпуск библиотеки Google Play Billing 2.2.1 (2020-05-20)
Доступна версия 2.2.1 библиотеки Google Play Billing.
Исправления ошибок
- Обновлена версия библиотеки Java Play Billing по умолчанию, от которой зависит расширение Kotlin.
Выпуск Google Play Billing Library 2.2.0 и поддержка Unity (2020-03-23)
Версия 2.2.0 Google Play Billing предоставляет функционал, который помогает разработчикам гарантировать, что покупки приписываются правильному пользователю. Эти изменения заменяют необходимость создания пользовательских решений на основе полезной нагрузки разработчика. В рамках этого обновления функционал полезной нагрузки разработчика был устарел и будет удален в будущем выпуске. Для получения дополнительной информации, включая рекомендуемые альтернативы, см. раздел Полезная нагрузка разработчика .
Библиотека выставления счетов Google Play Billing 2 для Unity
В дополнение к текущим версиям Google Play Billing Library 2 для Java и Kotlin мы выпустили версию библиотеки для использования с Unity. Разработчики игр, использующие API для покупок в приложении Unity, могут обновиться сейчас, чтобы воспользоваться всеми функциями Google Play Billing Library 2 и упростить последующие обновления до будущих версий Google Play Billing Library.
Более подробную информацию см. в статье Использование Google Play Billing с Unity .
Краткое изложение изменений
- Библиотека Java Google Play Billing
- В
AcknowledgePurchaseParams
устарели методыsetDeveloperPayload()
иgetDeveloperPayload()
. - В
ConsumeParams
устаревшие методыsetDeveloperPayload()
иgetDeveloperPayload()
. - В
BillingFlowParams
setAccountId()
переименован вsetObfuscatedAccountId()
, а также задокументировано ограничение длины в 64 символа и ограничение, запрещающее использование персонально идентифицируемой информации (PII) в этом поле.setAccountId()
помечен как устаревший и будет удален в будущей версии библиотеки. - В
BillingFlowParams
добавленsetObfuscatedProfileId()
, который работает аналогичноsetObfuscatedAccountId()
. Для получения дополнительной информации см. Developer payload updates and alternatives . - В
Purchase
добавлен методgetAccountIdentifiers()
для возврата запутанных идентификаторов счетов, установленных вBillingFlowParams
. - В
BillingClient
методloadRewardedSku()
был отмечен как устаревший в рамках устаревания вознагражденных SKU. Вы можете найти дополнительную информацию об устаревании в Play Console Help Center .
- В
Выпуск Google Play Billing Library 2.1.0 и выпуск Kotlin Extension 2.1.0 (10.12.2019)
Версия 2.1.0 библиотеки Google Play Billing и новое расширение Kotlin уже доступны. Расширение Kotlin Play Billing Library предоставляет альтернативные идиоматические API для потребления Kotlin, в том числе лучшую безопасность null и сопрограммы. Примеры кода см. в разделе Использование библиотеки Google Play Billing .
Эта версия содержит следующие изменения.
Краткое изложение изменений
- В
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 Library 2.0 (07.05.2019)
Версия 2.0 библиотеки Google Play Billing уже доступна. Эта версия содержит следующие изменения.
Покупки должны быть подтверждены в течение трех дней.
Google Play поддерживает покупку продуктов как внутри вашего приложения (in-app), так и вне вашего приложения (out-of-app). Чтобы Google Play обеспечивал единообразный процесс покупки независимо от того, где пользователь покупает ваш продукт, вы должны подтвердить все покупки, полученные через Google Play Billing Library, как можно скорее после предоставления пользователю права. Если вы не подтвердите покупку в течение трех дней, пользователь автоматически получит возврат, а 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 Billing Library .
Поддерживается полезная нагрузка разработчика
Версия 2.0 библиотеки Google Play Billing добавляет поддержку полезных данных разработчика — произвольных строк, которые можно прикрепить к покупкам. Вы можете прикрепить параметр полезных данных разработчика к покупке, но только когда покупка подтверждена или потреблена. Это отличается от полезных данных разработчика в AIDL, где полезные данные можно было указать при запуске процесса покупки. Поскольку покупки теперь можно инициировать извне вашего приложения , это изменение гарантирует, что у вас всегда будет возможность добавить полезные данные к покупкам.
Для доступа к полезной нагрузке в новой библиотеке объекты Purchase
теперь включают метод getDeveloperPayload()
.
Последовательные предложения
Когда вы предлагаете товар со скидкой, Google Play теперь возвращает первоначальную цену товара, чтобы вы могли показать пользователям, что они получают скидку.
SkuDetails
содержит два новых метода для получения исходной цены SKU:
-
getOriginalPriceAmountMicros()
- возвращает неформатированную исходную цену артикула до скидки.
-
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()
в этом выпуске удалена.
запросИсторияПокупокАсинхронный
Чтобы свести к минимуму путаницу, 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 уже доступна. Эта версия содержит следующие изменения.
Исправления ошибок
- Исправлена проблема потоков, появившаяся в v1.2.1. Фоновые вызовы больше не блокируют основной поток.
Другие изменения
- Хотя использование основного потока по-прежнему рекомендуется, теперь вы можете создать экземпляр библиотеки Google Play Billing Library из фонового потока.
- Создание экземпляра полностью перенесено в фоновый поток, чтобы снизить вероятность возникновения ошибок ANR.
Выпуск библиотеки Play Billing 1.2.1 (04.03.2019)
Версия 1.2.1 библиотеки Google Play Billing уже доступна. Эта версия содержит следующие изменения.
Основные изменения
- Добавлена поддержка для вознагражденных продуктов . Для получения дополнительной информации о вариантах монетизации см. Добавление функций, специфичных для вознагражденных продуктов .
Другие изменения
- Добавлены публичные конструкторы для
PurchasesResult
иSkuDetailsResult
для упрощения тестирования. - Объекты
SkuDetails
могут использовать новый метод,getOriginalJson()
. - Все вызовы службы AIDL теперь обрабатываются фоновыми потоками.
Исправления ошибок
- Нулевые слушатели обратного вызова больше не передаются в общедоступные API.
Google Play Billing Library 1.2 Релиз (2018-10-18)
Версия 1.2 Библиотеки Google Play Billing теперь доступна. Эта версия содержит следующие изменения.
Резюме изменений
- Библиотека Google Play Billing в настоящее время лицензирована в соответствии с лицензионным соглашением о разработке программного обеспечения Android .
- Добавлен API 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
. Этот режим обновляет подписку пользователя, когда он следит. Чтобы узнать больше о том, как установить этот режим прощения, см. Установите режим Proty .
Новый метод для установки сведений SKU
В классе BillingFlowParams
метод setSku()
устарел. Это изменение служит для оптимизации поток биллинга Google Play.
При построении нового экземпляра BillingFlowParams
в вашем клиенте в In-APP, мы рекомендуем вам вместо этого работать с объектом 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(); }
Выпуск Billing Library 1.1 (2018-05-07)
Версия 1.1 Библиотеки Google Play Billing теперь доступна. Эта версия содержит следующие изменения.
Резюме изменений
- Добавлена поддержка, чтобы указать режим прощения в
BillingFlowParams
при обновлении/понижении существующей подписки. - Логический флаг
replaceSkusProration
вBillingFlowParams
больше не поддерживается. Вместо этого используйтеreplaceSkusProrationMode
. -
launchBillingFlow()
теперь запускает обратный вызов для неудачных ответов.
Изменения в поведении
Версия 1.1 библиотеки Billing Google Play содержит следующие изменения поведения.
Разработчики могут установить 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.