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

В этом документе содержатся заметки о выпуске библиотеки 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 уже доступны.

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

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

Краткое изложение изменений

Выпуск библиотеки 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 (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 уже доступны.

Краткое изложение изменений

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

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

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

Краткое изложение изменений

Выпуск 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.

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

Краткое изложение изменений

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

Краткое изложение изменений

Выпуск 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 , выполнив следующие действия:

  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 . Этот тип уведомлений отправляется только для покупок, связанных с отложенными формами оплаты, такими как наличные.

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

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

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