В этом документе содержатся примечания к выпуску библиотеки Google Play Billing.
Выпуск библиотеки Google Play Billing 8.2.1 (15.12.2025)
Теперь доступна версия 8.2.1 библиотеки Google Play Billing Library и расширений Kotlin.
Исправлены ошибки
- Исправлена ошибка в
isBillingProgramAvailableAsyncиcreateBillingProgramReportingDetailsAsync. Для использования этих API, представленных в версии 8.2.0, обновите приложение до версии 8.2.1.
Выпуск библиотеки Google Play Billing 8.2.0 (09.12.2025)
Вышла версия 8.2.0 библиотеки Google Play Billing Library и расширений Kotlin.
Краткое описание изменений
Новые API для внешних ссылок на контент и внешних предложений :
- Добавлена
enableBillingProgramдля настройкиBillingClientдля этих программ. - Добавлена
isBillingProgramAvailableAsyncдля определения права пользователя на участие в программе. - Добавлена
createBillingProgramReportingDetailsAsyncдля создания внешнего токена транзакции, который необходимо использовать для формирования отчетов. - Добавлена
launchExternalLinkдля инициализации внешней ссылки на предложение цифрового контента или загрузку приложения.
- Добавлена
Изменения в программе внешних предложений :
- Внесены изменения в политику программы внешних предложений. Подробности см. в разделе «Изменения в программе» . Чтобы понять, как запускать потоки внешних предложений с помощью новых API, см. руководство по интеграции .
- API
BillingClient.Builder.enableExternalOfferобъявлен устаревшим. - API
isExternalOfferAvailableAsyncобъявлен устаревшим. - API
createExternalOfferReportingDetailsAsyncобъявлен устаревшим. - API
showExternalOfferInformationDialogобъявлен устаревшим.
Выпуск библиотеки 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.
Исправлены ошибки
- Исправлена ошибка в 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. Существует ошибка, которая затронет только приложения с включенным тестированием переопределений выставления счетов [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 для поддержки подписок в рассрочку.
- Добавлен API [
ProductDetails.InstallmentPlanDetails][installment-details] для базовых планов рассрочки, которые пользователи могут приобрести. Этот API помогает вашему приложению идентифицировать план рассрочки и настройки обязательств, чтобы предоставить пользователю соответствующую информацию. Для получения дополнительной информации см. наше [руководство по рассрочке подписки][installments]. [installment-details]: /reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails [installments]: /google/play/billing/subscriptions#installments
- Добавлен 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.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 (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.
Краткое описание изменений
- Добавлены классы для поддержки альтернативных способов оплаты на мобильных устройствах/планшетах для пользователей из Южной Кореи:
- Добавлен метод
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()для указания внешнего идентификатора транзакции исходной подписки. - Добавлен метод
BillingClient.Builder.enableAlternativeBilling(), позволяющий пользователям в Южной Корее выбирать альтернативный способ оплаты.
Выпуск библиотеки Google Play Billing 5.1 (31.10.2022)
Вышла версия 5.1.0 библиотеки Google Play Billing Library и расширений Kotlin.
Данная версия содержит следующие изменения.
Краткое описание изменений
- Добавлен метод
ProductDetails.SubscriptionOfferDetails.getOfferId()для получения идентификатора предложения. - Добавлен метод
ProductDetails.SubscriptionOfferDetails.getBasePlanId()для получения идентификатора базового плана. - Обновлена переменная
targetSdkVersionдо 31.
Выпуск библиотеки 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.
Данная версия содержит следующие изменения.
Краткое описание изменений
- Добавлена
BillingClient.showInAppMessages()для обработки отказов в оплате подписки. Подробнее об использовании внутриигровых сообщений для обработки отказов в оплате подписки см. в разделе «Обработка отказов в оплате» .
Выпуск библиотеки 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» .
Краткое описание изменений
- Библиотека Java для оплаты в Google Play
- В классе
AcknowledgePurchaseParamsметодыsetDeveloperPayload()иgetDeveloperPayload()объявлены устаревшими. - В
ConsumeParamsметодыsetDeveloperPayload()иgetDeveloperPayload()объявлены устаревшими. - В
BillingFlowParamssetAccountId()была переименована вsetObfuscatedAccountId(), а также задокументировано ограничение длины в 64 символа и запрет на использование персональных данных в этом поле.setAccountId()помечена как устаревшая и будет удалена в будущей версии библиотеки. - В
BillingFlowParamsдобавленаsetObfuscatedProfileId(), которая работает аналогичноsetObfuscatedAccountId(). Для получения дополнительной информации см. раздел «Обновления и альтернативы полезной нагрузки для разработчиков» . - В
Purchaseдобавлен методgetAccountIdentifiers(), возвращающий зашифрованные идентификаторы учетных записей, заданные вBillingFlowParams. - В
BillingClientметодloadRewardedSku()помечен как устаревший в рамках процесса устаревания SKU с вознаграждением. Дополнительную информацию об устаревании можно найти в Справочном центре Play Console .
- В классе
Выпуск библиотеки 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» .
Данная версия содержит следующие изменения.
Краткое описание изменений
- В
BillingFlowParamssetOldSku(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 выполните следующие действия:
- При запуске приложения вызовите
BillingClient.queryPurchases(), чтобы получить список неиспользованных товаров, связанных с пользователем. - Вызывайте метод
Purchase.getPurchaseState()для каждого возвращенного объектаPurchase. - Реализуйте метод
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.
Исправлены ошибки
-
SkuDetails.getIntroductoryPriceAmountMicros()now returns alonginstead of aString.
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 support for rewarded products . For more information on monetization options, see Add rewarded-product-specific features .
Другие изменения
- Added public constructors for
PurchasesResultandSkuDetailsResultto make testing easier. -
SkuDetailsobjects 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
launchPriceChangeConfirmationFlowAPI, 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
BillingFlowParamsclass, replacedsetSku()withsetSkuDetails(). - 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
BillingFlowParamswhen upgrading/downgrading an existing subscription. - The
replaceSkusProrationboolean flag inBillingFlowParamsis no longer supported. UsereplaceSkusProrationModeinstead. -
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.
-
Builderparam 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.BILLINGpermission inside Android manifest anymore. - New builder added to
BillingClient.Builderclass. - Introduced builder pattern for
SkuDetailsParamsclass 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)
Исправлены ошибки
- No response code in PURCHASES_UPDATED Bundle
- Fix ProxyBillingActivity and PurchasesUpdatedListener issues during device rotation
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.