Примечания к выпуску библиотеки Google Play Billing

В этом документе содержатся примечания к выпуску библиотеки Google Play Billing.

Выпуск библиотеки Google Play Billing 8.2.1 (15.12.2025)

Теперь доступна версия 8.2.1 библиотеки Google Play Billing Library и расширений Kotlin.

Исправлены ошибки

Выпуск библиотеки Google Play Billing 8.2.0 (09.12.2025)

Вышла версия 8.2.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 8.1.0 (06.11.2025)

Вышла версия 8.1.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

  • Приостановленные подписки

    В метод BillingClient.queryPurchasesAsync() добавлен новый параметр, позволяющий учитывать приостановленные подписки при запросе информации о подписках. Приостановленные подписки по-прежнему приписываются пользователю, но не активны, либо потому что пользователь приостановил подписку, либо потому что способ оплаты продления был отклонен.

    Объект Purchase возвращаемый в обработчике событий, вернет isSuspended() = true для всех приостановленных подписок. В этом случае не следует предоставлять доступ к приобретенной подписке, а вместо этого направить пользователя в центр подписок , где он сможет управлять способами оплаты или приостановить подписку для ее повторной активации.

  • Обновления подписок :

    • Объект BillingFlowParams.ProductDetailsParams теперь имеет метод setSubscriptionProductReplacementParams() , в котором можно указать информацию о замене на уровне продукта.

    • Объект SubscriptionProductReplacementParams имеет два метода-сеттера:

      • setOldProductId : Старый товар, который необходимо заменить товаром из текущих ProductDetails .
      • setReplacementMode : Это режим замены на уровне элемента. Режимы по сути те же, что и в SubscriptionUpdateParams, но сопоставление значений было обновлено. Введен новый режим замены KEEP_EXISTING , который позволяет сохранить существующий график платежей без изменений для элемента.
    • Метод `SubscriptionUpdateParams setSubscriptionReplacementMode` устарел. Вместо него следует использовать SubscriptionProductReplacementParams.setReplacementMode .

  • Обновлена minSdkVersion до 23.

  • Включены API для предварительных заказов товаров, приобретаемых разово.

    Теперь доступен для использования API-функция ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() , которая получает информацию о предварительном заказе.

  • Библиотека Google Play Billing теперь поддерживает Kotlin версии 2.2.0 .

Выпуск библиотеки Google Play Billing 8.0.0 (30.06.2025)

Вышла версия 8.0.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

  • Теперь внутриигровые товары будут называться разовыми продуктами .

  • Множество вариантов покупки и предложений для товаров, приобретаемых разово.

    Теперь вы можете предлагать несколько вариантов покупки и акций для своих разовых товаров. Это обеспечивает гибкость в способах продажи вашей продукции и упрощает управление ею.

  • Улучшен метод queryProductDetailsAsync() .

    До версии PBL 8.0.0 метод queryProductDetailsAsync() не возвращал товары, которые не удалось получить. Это могло быть связано с такими причинами, как отсутствие товара или отсутствие доступных пользователю предложений. В версии PBL 8.0.0 неполученные товары возвращаются с новым кодом состояния на уровне товара, который предоставляет информацию о неполученных товарах. Обратите внимание, что произошла сигнатура метода ProductDetailsResponseListener.onProductDetailsResponse() , что требует внесения изменений в ваше приложение. Для получения дополнительной информации см. раздел «Обработка результата» .

  • Автоматическое восстановление соединения.

    Новый параметр конструктора BillingClient.Builder.enableAutoServiceReconnection() позволяет разработчикам включить автоматическое переподключение к сервису, что упрощает управление соединениями, обрабатывая переподключения к Play Billing Service автоматически и устраняя необходимость вручную вызывать startConnection() в случае разрыва соединения. Для получения дополнительной информации см. раздел «Автоматическое восстановление соединения» .

  • Подкоды ответа для метода launchBillingFlow() .

    Теперь в возвращаемом методе launchBillingFlow() объекте BillingResult будет содержаться поле с кодом ответа. Это поле будет заполняться только в некоторых случаях для предоставления более конкретной причины сбоя. В PBL 8.0.0 возвращается подкод PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS в случае, когда на счету пользователя меньше стоимости товара, который он пытается приобрести.

  • Удалён метод queryPurchaseHistory() .

    Метод queryPurchaseHistory() , ранее помеченный как устаревший, теперь удален. Подробную информацию об альтернативных 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 (03.10.2024)

Теперь доступна версия 7.1.1 библиотеки Google Play Billing Library и расширений Kotlin.

Исправлены ошибки

Выпуск библиотеки 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. Существует ошибка, которая затронет только приложения с включенным тестированием переопределений выставления счетов [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.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 6.2.1 (16.04.2024)

Теперь доступна версия 6.2.1 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 6.2.0 (06.03.2024)

Вышла версия 6.2.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 6.1.0 (14.11.2023)

Вышла версия 6.1.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 6.0.1 (22.06.2023)

Вышла версия 6.0.1 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Обновите библиотеку Play Billing для обеспечения совместимости с Android 14.

Выпуск библиотеки Google Play Billing 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 см. в разделе « Изменения цен» .

  • Добавлен новый код ответа об ошибке сети.

    Начиная с версии PBL 6.0.0, добавлен новый код ошибки сети — NETWORK_ERROR . Этот код возвращается при возникновении ошибки, связанной с проблемами сетевого подключения. Ранее такие ошибки сетевого подключения обозначались как 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 (22.06.2023)

Теперь доступна версия 5.2.1 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Обновите библиотеку Play Billing для обеспечения совместимости с Android 14.

Выпуск библиотеки Google Play Billing 5.2 (06.04.2023)

Вышла версия 5.2.0 библиотеки Google Play Billing Library и расширений Kotlin.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 5.1 (31.10.2022)

Вышла версия 5.1.0 библиотеки Google Play Billing Library и расширений Kotlin.

Данная версия содержит следующие изменения.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 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 4.1 (23.02.2022)

Вышла версия 4.1.0 библиотеки Google Play Billing Library и расширений Kotlin.

Данная версия содержит следующие изменения.

Краткое описание изменений

Выпуск библиотеки Google Play Billing 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.

  • Обновлены 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 приложениями, работающими в режиме запуска одной задачи. При возобновлении работы приложения из лаунчера Android, если диалоговое окно оплаты было видно до приостановки, будет вызываться обратный вызов onPurchasesUpdated()

Исправлены ошибки в Unity.

  • Обновление до версии Java 3.0.3 исправляет утечку памяти и устраняет проблему, препятствующую совершению покупок при возобновлении работы приложения из лаунчера Android, если диалоговое окно оплаты было видно до приостановки.

Выпуск библиотеки Google Play Billing 3.0.2 (24.11.2020)

Теперь доступна версия 3.0.2 библиотеки Google Play Billing Library и расширения Kotlin.

Исправлены ошибки

  • Исправлена ​​ошибка в расширении Kotlin, из-за которой сопрограмма завершалась с ошибкой "Already resumed".
  • Исправлены неразрешенные ссылки при использовании расширения 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 версии 2.2.0 и поддержка Unity (23.03.2020)

В версии 2.2.0 Google Play Billing добавлена ​​функциональность, которая помогает разработчикам гарантировать, что покупки будут привязаны к правильному пользователю. Эти изменения устраняют необходимость в создании пользовательских решений на основе данных, предоставленных разработчиком. В рамках этого обновления функциональность, связанная с данными разработчика, устарела и будет удалена в будущем релизе. Для получения дополнительной информации, включая рекомендуемые альтернативы, см. раздел «Данные разработчика» .

Библиотека Google Play Billing Billing Library 2 для Unity

В дополнение к текущим версиям библиотеки Google Play Billing Library 2 для Java и Kotlin, мы выпустили версию библиотеки для использования с Unity. Разработчики игр, использующие API внутриигровых покупок Unity, могут обновить библиотеку уже сейчас, чтобы воспользоваться всеми её функциями и упростить последующие обновления до будущих версий.

Для получения более подробной информации см. раздел «Использование Google Play Billing с Unity» .

Краткое описание изменений

Выпуск библиотеки Google Play Billing Library версии 2.1.0 и расширения Kotlin Extension версии 2.1.0 (10.12.2019)

Вышла версия 2.1.0 библиотеки Google Play Billing и новое расширение для Kotlin. Расширение Play Billing Library для Kotlin предоставляет идиоматические альтернативы API для использования в Kotlin, отличающиеся улучшенной защитой от нулевых значений и сопрограммами. Примеры кода см. в разделе «Использование библиотеки Google Play Billing» .

Данная версия содержит следующие изменения.

Краткое описание изменений

  • В BillingFlowParams setOldSku(String oldSku) объявлен устаревшим и заменен на setOldSku(String oldSku, String purchaseToken) , чтобы исключить неоднозначность в случаях, когда несколько учетных записей на устройстве владеют одним и тем же артикулом.

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

Поддерживается полезная нагрузка разработчика.

В версии 2.0 библиотеки Google Play Billing добавлена ​​поддержка полезной нагрузки разработчика — произвольных строк, которые можно прикреплять к покупкам. Вы можете прикрепить параметр полезной нагрузки разработчика к покупке, но только когда покупка подтверждена или совершена. Это отличается от полезной нагрузки разработчика в AIDL, где полезная нагрузка могла быть указана при запуске процесса покупки. Поскольку теперь покупки могут инициироваться извне вашего приложения , это изменение гарантирует, что у вас всегда будет возможность добавить полезную нагрузку к покупкам.

Для доступа к содержимому новой библиотеки объекты Purchase теперь включают метод getDeveloperPayload() .

Постоянные предложения

Теперь, когда вы предлагаете товар со скидкой, Google Play возвращает его первоначальную цену, чтобы вы могли показать пользователям, что они получают скидку.

SkuDetails появились два новых метода для получения исходной цены товара:

  • getOriginalPriceAmountMicros()
    • Возвращает неформатированную исходную цену товара до применения скидки.
  • getOriginalPrice()
    • Возвращает исходную цену с дополнительным форматированием валюты.

Незавершенные транзакции

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

Чтобы включить отложенные покупки, вызовите enablePendingPurchases() в процессе инициализации приложения.

Используйте Purchase.getPurchaseState() , чтобы определить, находится ли состояние покупки в PURCHASED или PENDING . Обратите внимание, что право на покупку следует предоставлять только тогда, когда состояние покупки — PURCHASED . Для проверки обновлений статуса Purchase выполните следующие действия:

  1. При запуске приложения вызовите BillingClient.queryPurchases() , чтобы получить список неиспользованных товаров, связанных с пользователем.
  2. Вызывайте метод Purchase.getPurchaseState() для каждого возвращенного объекта Purchase .
  3. Реализуйте метод onPurchasesUpdated() для реагирования на изменения в объектах Purchase .

Кроме того, API для разработчиков Google Play включает состояние PENDING для Purchases.products . Для подписок ожидающие транзакции не поддерживаются.

В этом релизе также представлен новый тип уведомлений для разработчиков в режиме реального времени — OneTimeProductNotification . Этот тип уведомления содержит одно сообщение, значение которого может быть либо ONE_TIME_PRODUCT_PURCHASED , либо ONE_TIME_PRODUCT_CANCELED . Уведомления этого типа отправляются только для покупок, связанных с отложенными формами оплаты, такими как наличные.

When acknowledging pending purchases, be sure to acknowledge only when the purchase state is PURCHASED and not PENDING .

изменения API

Version 2.0 of the Google Play Billing library contains several API changes to support new features and clarify existing functionality.

consumeAsync

consumeAsync() now takes a ConsumeParams object instead of a purchaseToken . ConsumeParams contains the purchaseToken as well as an optional developer payload.

The previous version of consumeAsync() has been removed in this release.

queryPurchaseHistoryAsync

To minimize confusion, queryPurchaseHistoryAsync() now returns a PurchaseHistoryRecord object instead of a Purchase object. The PurchaseHistoryRecord object is the same as a Purchase object, except that it reflects only the values returned by queryPurchaseHistoryAsync() and does not contain the autoRenewing , orderId , and packageName fields. Note that nothing has changed with the returned data— queryPurchaseHistoryAsync() returns the same data as before.

BillingResult return values

APIs that previously returned a BillingResponse integer value now return a BillingResult object. BillingResult contains the BillingResponse integer as well as a debug string that you can use to diagnose errors. The debug string uses an en-US locale and is not meant to be shown to end users.

Исправлены ошибки

Google Play Billing Library 1.2.2 Release (2019-03-07)

Version 1.2.2 of the Google Play Billing library is now available. This version contains the following changes.

Исправлены ошибки

  • Fixed a threading issue introduced in v1.2.1. Background calls no longer block the main thread.

Другие изменения

  • Although using the main thread is still recommended, you can now instantiate the Google Play Billing Library from a background thread.
  • Instantiation has been fully migrated to the background thread to reduce the chance of causing ANRs.

Play Billing Library 1.2.1 Release (2019-03-04)

Version 1.2.1 of the Google Play Billing library is now available. This version contains the following changes.

Основные изменения

Другие изменения

  • Added public constructors for PurchasesResult and SkuDetailsResult to make testing easier.
  • SkuDetails objects can use a new method, getOriginalJson() .
  • All AIDL service calls are now handled by background threads.

Исправлены ошибки

  • Null callback listeners are no longer passed into public APIs.

Google Play Billing Library 1.2 Release (2018-10-18)

Version 1.2 of the Google Play Billing library is now available. This version contains the following changes.

Краткое описание изменений

  • The Google Play Billing Library is now licensed under the Android Software Development Kit License Agreement .
  • Added the launchPriceChangeConfirmationFlow API, which prompts users to review a pending change to a subscription price.
  • Added support for a new proration mode, DEFERRED , when upgrading or downgrading a user's subscription.
  • In the BillingFlowParams class, replaced setSku() with setSkuDetails() .
  • Minor bug fixes and code optimizations.

Price change confirmation

You can now change the price of a subscription in Google Play Console and prompt users to review and accept the new price when they enter your app.

To use this API, create a PriceChangeFlowParams object by using the skuDetails of the subscription product, and then call launchPriceChangeConfirmationFlow() . Implement the PriceChangeConfirmationListener to handle the result when the price change confirmation flow finishes, as shown in the following code snippet:

Котлин

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

The price change confirmation flow displays a dialog containing the new pricing information, asking users to accept the new price. This flow returns a response code of type BillingClient.BillingResponse .

New proration mode

When upgrading or downgrading a user's subscription, you can use a new proration mode, DEFERRED . This mode updates the user's subscription when it next renews. To learn more about how to set this proration mode, see Set proration mode .

New method for setting SKU details

In the BillingFlowParams class, the setSku() method has been deprecated. This change serves to optimize the Google Play Billing flow.

When constructing a new instance of BillingFlowParams in your in-app billing client, we recommend that you instead work with the JSON object directly using setSkuDetails() , as shown in the following code snippet:

In the BillingFlowParams Builder class, the setSku() method has been deprecated. Instead, use the setSkuDetails() method, as shown in the following code snippet. The object passed into setSkuDetails() object comes from the querySkuDetailsAsync() method.

Котлин

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()
}

Java

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 Release (2018-05-07)

Version 1.1 of the Google Play Billing library is now available. This version contains the following changes.

Краткое описание изменений

  • Added support to specify a proration mode in BillingFlowParams when upgrading/downgrading an existing subscription.
  • The replaceSkusProration boolean flag in BillingFlowParams is no longer supported. Use replaceSkusProrationMode instead.
  • launchBillingFlow() now triggers a callback for failed responses.

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

Version 1.1 of the Google Play Billing library contains the following behavior changes.

Developers can set replaceSkusProrationMode in BillingFlowParams class

A ProrationMode provides further details on the type of proration when upgrading or downgrading a user's subscription.

Котлин

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Google Play supports following proration modes:

IMMEDIATE_WITH_TIME_PRORATION Replacement takes effect immediately, and the new expiration time will be prorated and credited or charged to the user. This is the current default behavior.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Replacement takes effect immediately, and the billing cycle remains the same. The price for the remaining period will be charged.

Note : This option is only available for subscription upgrade.

IMMEDIATE_WITHOUT_PRORATION Replacement takes effect immediately, and the new price will be charged on next recurrence time. The billing cycle stays the same.

replaceSkusProration is no longer supported in BillingFlowParams class

Developers used to be able to set a boolean flag to charge a prorated amount for a subscription upgrade request. Given that we are supporting ProrationMode , which contains more detailed proration instruction, this boolean flag is no longer supported.

launchBillingFlow() now triggers a callback for failed responses

The Billing Library will always trigger the PurhcasesUpdatedListener callback and return a BillingResponse asynchronously. The synchronous return value of BillingResponse is kept as well.

Исправлены ошибки

  • Properly exits early in async methods when service is disconnected.
  • Builder param objects no longer mutates built objects.
  • Issue 68087141 : launchBillingFlow() now trigger callback for failed responses.

Google Play Billing Library 1.0 Release (2017-09-19, Announcement )

Version 1.0 of the Google Play Billing library is now available. This version contains the following changes.

Важные изменения

  • Embedded billing permission inside library's manifest. It's not necessary to add the com.android.vending.BILLING permission inside Android manifest anymore.
  • New builder added to BillingClient.Builder class.
  • Introduced builder pattern for SkuDetailsParams class to be used on methods to query SKUs.
  • Several API methods were updated for consistency (the same return argument names and order).

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

Version 1.0 of the Google Play Billing library contains the following behavior changes.

BillingClient.Builder class

BillingClient.Builder is now initialized via the newBuilder pattern:

Котлин

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

launchBillingFlow method is now called using a BillingFlowParams class

To initiate the billing flow for a purchase or subscription, the launchBillingFlow() method receives a BillingFlowParams instance initialized with parameters specific to the request:

Котлин

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

New way to query available products

Arguments for queryPurchaseHistoryAsync() and querySkuDetailsAsync() methods were wrapped into a Builder pattern:

Котлин

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

The result is now returned via result code and a list of SkuDetails objects instead of previous wrapper class for your convenience and to be consistent across our API:

Котлин

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

Parameters order changed on onConsumeResponse() method

The order of arguments for onConsumeResponse from the ConsumeResponseListener interface has changed to be consistent across our API:

Котлин

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

Unwrapped PurchaseResult object

PurchaseResult has been unwraped to be consistent across our API:

Котлин

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

Исправлены ошибки

Developer Preview 1 Release (2017-06-12, Announcement )

Developer preview launched, aimed to simplify the development process when it comes to billing, allowing developers to focus their efforts on implementing logic specific to the Android app, such as application architecture and navigation structure.

The library includes several convenient classes and features for you to use when integrating your Android apps with the Google Play Billing API. The library also provides an abstraction layer on top of the Android Interface Definition Language (AIDL) service, making it easier for developers to define the interface between the app and the Google Play Billing API.