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

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

Выпуск библиотеки Google Play Billing 7.0.0 (14 мая 2024 г.)

Доступна версия 7.0.0 библиотеки Google Play Billing Library и расширений Kotlin.

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

Выпуск библиотеки Google Play Billing 6.2.1 (16 апреля 2024 г.)

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

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

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

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

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

Выпуск библиотеки Google Play Billing 6.1.0 (14 ноября 2023 г.)

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

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

Выпуск библиотеки Google Play Billing Library 6.0.1 (22 июня 2023 г.)

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

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

Обновите библиотеку платежей Play, чтобы она была совместима с Android 14.

Выпуск библиотеки Google Play Billing Library 6.0 (10 мая 2023 г.)

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

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

  • Добавлено новое ReplacementMode для замены ProrationMode .

    Обратите внимание, что ProrationMode по-прежнему доступен по соображениям обратной совместимости.

  • Удален идентификатор заказа для PENDING покупок.

    Раньше идентификатор заказа создавался всегда, даже если покупка находилась в ожидании. Начиная с версии 6.0.0, идентификатор заказа не будет создаваться для ожидающих покупок, и для этих покупок идентификатор заказа будет заполнен после перевода покупки в состояние PURCHASED .

  • Удалены методы queryPurchases и launchPriceConfirmationFlow .

    Методы queryPurchases и launchPriceConfirmationFlow , которые ранее были помечены как устаревшие, теперь удалены из библиотеки платежей Play 6.0.0. Разработчикам следует использовать queryPurchasesAsync вместо queryPurchases . Альтернативы launchPriceConfirmationFlow см. в разделе Изменения цен .

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

    Новый код ответа на сетевую ошибку NETWORK_ERROR был добавлен начиная с версии PBL 6.0.0. Этот код возвращается, когда возникает ошибка из-за проблемы с сетевым подключением. Эти ошибки сетевого подключения ранее обозначались как SERVICE_UNAVAILABLE .

  • Обновлены SERVICE_UNAVAILABLE и SERVICE_TIMEOUT .

    Начиная с версии PBL 6.0.0, ошибки из-за тайм-аута обработки будут возвращаться как SERVICE_UNAVAILABLE вместо текущего SERVICE_TIMEOUT .

    Поведение не меняется в более ранних версиях PBL.

  • Удален SERVICE_TIMEOUT .

    Начиная с версии PBL 6.0.0, SERVICE_TIMEOUT больше не будет возвращаться. Предыдущие версии PBL по-прежнему будут возвращать этот код.

  • Добавлен дополнительный лог.

    Версия Play Billing Library 6 включает дополнительное ведение журнала, которое дает представление об использовании API (например, об успехах и сбоях) и проблемах с подключением к службам. Эта информация будет использоваться для повышения производительности библиотеки платежей Play и улучшения поддержки ошибок.

Выпуск библиотеки Google Play Billing 5.2.1 (22 июня 2023 г.)

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

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

Обновите библиотеку платежей Play, чтобы она была совместима с Android 14.

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

Доступна версия 5.2.0 библиотеки Google Play Billing и расширений Kotlin.

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

Выпуск библиотеки Google Play Billing 5.1 (31 октября 2022 г.)

Доступна версия 5.1.0 библиотеки Google Play Billing и расширений Kotlin.

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

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

Выпуск библиотеки Google Play Billing 5.0 (11 мая 2022 г.)

Доступна версия 5.0.0 библиотеки Google Play Billing и расширений Kotlin.

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

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

  • Представлена ​​новая модель подписок, включая новые сущности, которые позволяют создавать несколько предложений для одного продукта по подписке. Дополнительную информацию см. в руководстве по миграции .
  • Добавлен BillingClient.queryProductDetailsAsync() вместо BillingClient.querySkuDetailsAsync() .
  • Добавлен метод setIsOfferPersonalized() для требований к раскрытию персонализированных цен в ЕС. Подробнее о том, как использовать этот метод, читайте в разделе «Указание персонализированной цены» .
  • Удален queryPurchases() , который ранее устарел и заменен на queryPurchasesAsync, представленный в Библиотеке выставления счетов Google Play 4.0.0.
  • launchPriceChangeFlow устарел и будет удален в будущем выпуске. Дополнительные сведения об альтернативах см. в разделе Запуск потока подтверждения изменения цены .
  • Удален setVrPurchaseFlow() , который ранее использовался при создании экземпляра потока покупок. В предыдущих версиях этот метод перенаправлял пользователя для совершения покупки на его Android-устройстве. Как только вы удалите этот метод, пользователи смогут совершать покупку через стандартный процесс покупки.

Выпуск библиотеки Google Play Billing Library 4.1 (23 февраля 2022 г.)

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

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

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

Выпуск библиотеки Google Play Billing Library 4.0 (18 мая 2021 г.)

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

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

  • Добавлен BillingClient.queryPurchasesAsync() вместо BillingClient.queryPurchases() , который будет удален в будущем выпуске.

  • Добавлен новый режим замены подписки IMMEDIATE_AND_CHARGE_FULL_PRICE .

  • Добавлен метод BillingClient.getConnectionState() для получения состояния подключения библиотеки платежей Play.

  • Обновлена ​​документация Javadoc и реализация, чтобы указать, в каком потоке может быть вызван метод и результаты какого потока публикуются.

  • Добавлен BillingFlowParams.Builder.setSubscriptionUpdateParams() как новый способ инициировать обновления подписки. Это заменяет BillingFlowParams#getReplaceSkusProrationMode , BillingFlowParams#getOldSkuPurchaseToken , BillingFlowParams#getOldSku , BillingFlowParams.Builder#setReplaceSkusProrationMode , BillingFlowParams.Builder#setOldSku которые были удалены.

  • Добавлены Purchase.getQuantity() и PurchaseHistoryRecord.getQuantity() .

  • Добавлены Purchase#getSkus() и PurchaseHistoryRecord#getSkus() . Они заменяют Purchase#getSku и PurchaseHistoryRecord#getSku , которые были удалены.

  • Удалены BillingFlowParams#getSku , BillingFlowParams#getSkuDetails и BillingFlowParams#getSkuType .

Выпуск библиотеки Google Play Billing 3.0.3 (12 марта 2021 г.)

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

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

  • Исправлена ​​утечка памяти при вызове endConnection() .
  • Исправлена ​​проблема, когда библиотека биллинга Google Play используется приложениями, использующими режим запуска одной задачи. Обратный вызов onPurchasesUpdated() будет запущен, когда приложение будет возобновлено из панели запуска Android и диалоговое окно выставления счетов будет видно до его приостановки.

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

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

Выпуск библиотеки Google Play Billing 3.0.2 (24 ноября 2020 г.)

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

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

  • Исправлена ​​ошибка в расширении Kotlin, из-за которой сопрограмма завершалась с ошибкой «Уже возобновлено».
  • Исправлены неразрешенные ссылки при использовании расширения Kotlin с библиотекой kotlinx.coroutines версии 1.4+.

Выпуск библиотеки Google Play Billing 3.0.1 (30 сентября 2020 г.)

Версия 3.0.1 библиотеки Google Play Billing и расширения Kotlin теперь доступны.

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

  • Исправлена ​​ошибка, из-за которой, если приложение было закрыто и восстановлено во время выставления счета, PurchasesUpdatedListener не мог быть вызван с результатом покупки.

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

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

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

  • Удалена поддержка SKU за вознаграждение.
  • Удалены параметры ChildDirected и UnderAgeOfConsent .
  • Удалены устаревшие методы полезной нагрузки разработчика.
  • Удалены устаревшие методы BillingFlowParams.setAccountId() и BillingFlowParams.setDeveloperId() .
  • Удалены устаревшие методы BillingFlowParams.setOldSkus(String oldSku) и BillingFlowParams.addOldSku(String oldSku) .
  • Добавлены аннотации об отсутствии значений.

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

  • SkuDetails.getIntroductoryPriceCycles() теперь возвращает int вместо String .
  • Исправлена ​​ошибка, из-за которой поток выставления счетов считался имеющим дополнительные параметры, даже если дополнительные параметры не были установлены.

Выпуск библиотеки Google Play Billing 2.2.1 (20 мая 2020 г.)

Доступна версия 2.2.1 библиотеки Google Play Billing.

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

  • Обновлена ​​версия по умолчанию библиотеки Java Play Billing, от которой зависит расширение Kotlin.

Выпуск библиотеки Google Play Billing Library 2.2.0 и поддержка Unity (23 марта 2020 г.)

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

Библиотека выставления счетов Google Play 2 для Unity

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

Дополнительную информацию см. в разделе Использование биллинга Google Play с Unity .

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

Выпуск библиотеки Google Play Billing Library 2.1.0 и выпуск расширения Kotlin 2.1.0 (10 декабря 2019 г.)

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

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

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

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

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

Доступна версия 2.0.3 библиотеки Google Play Billing.

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

  • Исправлена ​​ошибка, из-за которой querySkuDetailsAsync() иногда завершался с ошибкой с кодом DEVELOPER_ERROR вместо возврата успешного результата.

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

Доступна версия 2.0.2 библиотеки Google Play Billing. Этот выпуск содержит обновления справочной документации и не меняет функциональность библиотеки.

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

Доступна версия 2.0.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

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

  • Исправлена ​​ошибка, из-за которой в некоторых случаях сообщения отладки возвращались как null .
  • Исправлена ​​потенциальная проблема с утечкой памяти.

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

Доступна версия 2.0 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

Покупки должны быть подтверждены в течение трех дней.

Google Play поддерживает покупку продуктов внутри вашего приложения (внутри приложения) или за его пределами (вне приложения). Чтобы Google Play обеспечивал единообразный процесс покупок независимо от того, где пользователь покупает ваш продукт, вы должны подтверждать все покупки, полученные через Библиотеку выставления счетов Google Play, как можно скорее после предоставления права пользователю. Если вы не подтвердите покупку в течение трех дней, пользователь автоматически получит возврат средств, а Google Play отзовет покупку. Для ожидающих транзакций (новое в версии 2.0) трехдневное окно начинается, когда покупка переходит в состояние PURCHASED , и не применяется, пока покупка находится в состоянии PENDING .

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

Объект Purchase теперь включает метод isAcknowledged() , который указывает, подтверждена ли покупка. Кроме того, API разработчика Google Play включает логические значения подтверждения для Purchases.products и Purchases.subscriptions . Прежде чем подтверждать покупку, обязательно используйте эти методы, чтобы определить, была ли покупка уже подтверждена.

Подтвердить покупку можно одним из следующих способов:

  • Для расходных продуктов используйте consumeAsync() , который находится в клиентском API.
  • Для продуктов, которые не потребляются, используйте acknowledgePurchase() , который находится в клиентском API.
  • В API сервера также доступен новый метод acknowledge() .

BillingFlowParams.setSku() удален.

Ранее устаревший метод BillingFlowParams#setSku() был удален в этом выпуске. Прежде чем отображать продукты в потоке покупок, теперь необходимо вызвать BillingClient.querySkuDetailsAsync() , передав результирующий объект SkuDetails в BillingFlowParams.Builder.setSkuDetails() .

Примеры кода см. в разделе «Использование библиотеки платежей Google Play» .

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

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

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

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

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

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

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

Ожидающие транзакции

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

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

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

  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() была удалена в этом выпуске.

запросPurchaseHistoryAsync

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

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

  • Исправлена ​​проблема с потоками, появившаяся в версии 1.2.1. Фоновые вызовы больше не блокируют основной поток.

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

  • Хотя использование основного потока по-прежнему рекомендуется, теперь вы можете создать экземпляр библиотеки Google Play Billing Library из фонового потока.
  • Создание экземпляра полностью перенесено в фоновый поток, чтобы снизить вероятность возникновения ошибок ANR.

Выпуск Play Billing Library 1.2.1 (04.03.2019)

Доступна версия 1.2.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

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

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

  • Добавлены общедоступные конструкторы PurchasesResult и SkuDetailsResult , чтобы упростить тестирование.
  • Объекты SkuDetails могут использовать новый метод getOriginalJson() .
  • Все вызовы служб AIDL теперь обрабатываются фоновыми потоками.

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

  • Прослушиватели обратного вызова Null больше не передаются в общедоступные API.

Выпуск библиотеки Google Play Billing 1.2 (18 октября 2018 г.)

Доступна версия 1.2 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

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

  • Библиотека платежей Google Play теперь лицензируется в соответствии с Лицензионным соглашением об инструментах разработки программного обеспечения Android .
  • Добавлен API launchPriceChangeConfirmationFlow , который предлагает пользователям просмотреть ожидающее изменение цены подписки.
  • Добавлена ​​поддержка нового режима пропорционального распределения DEFERRED при обновлении или понижении подписки пользователя.
  • В классе BillingFlowParams setSku() заменен на setSkuDetails() .
  • Исправлены мелкие ошибки и оптимизирован код.

Подтверждение изменения цены

Теперь вы можете изменить цену подписки в консоли Google Play и предложить пользователям просмотреть и принять новую цену при входе в ваше приложение.

Чтобы использовать этот API, создайте объект PriceChangeFlowParams используя skuDetails продукта подписки, а затем вызовите launchPriceChangeConfirmationFlow() . Реализуйте PriceChangeConfirmationListener для обработки результата после завершения потока подтверждения изменения цены, как показано в следующем фрагменте кода:

Котлин

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

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

Ява

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

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

Поток подтверждения изменения цены отображает диалоговое окно, содержащее новую информацию о ценах, в котором пользователям предлагается принять новую цену. Этот поток возвращает код ответа типа BillingClient.BillingResponse .

Новый режим пропорционального распределения

При обновлении или понижении подписки пользователя вы можете использовать новый режим пропорционального распределения, DEFERRED . В этом режиме подписка пользователя обновляется при ее следующем продлении. Дополнительные сведения о том, как установить этот режим пропорционального распределения, см. в разделе Установка режима пропорционального распределения .

Новый метод настройки деталей SKU

В классе BillingFlowParams метод setSku() объявлен устаревшим. Это изменение предназначено для оптимизации процесса выставления счетов в Google Play.

При создании нового экземпляра BillingFlowParams в клиенте выставления счетов в приложении мы рекомендуем вместо этого работать с объектом JSON напрямую с помощью setSkuDetails() , как показано в следующем фрагменте кода:

В классе BillingFlowParams Builder метод setSku() признан устаревшим. Вместо этого используйте метод setSkuDetails() , как показано в следующем фрагменте кода. Объект, передаваемый в setSkuDetails() , поступает из метода querySkuDetailsAsync() .

Котлин

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Ява

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Выпуск Play Billing Library 1.1 (07.05.2018)

Доступна версия 1.1 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

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

  • Добавлена ​​поддержка указания режима пропорционального распределения в BillingFlowParams при обновлении/понижении существующей подписки.
  • Логический флаг replaceSkusProration в BillingFlowParams больше не поддерживается. Вместо этого используйте replaceSkusProrationMode .
  • launchBillingFlow() теперь запускает обратный вызов в случае неудачных ответов.

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

Версия 1.1 библиотеки Google Play Billing содержит следующие изменения поведения.

Разработчики могут установить replaceSkusProrationMode в классе BillingFlowParams .

ProrationMode предоставляет дополнительные сведения о типе пропорционального распределения при обновлении или понижении уровня подписки пользователя.

Котлин

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

Ява

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

В настоящее время Google Play поддерживает следующие режимы пропорционального распределения:

IMMEDIATE_WITH_TIME_PRORATION Замена вступает в силу немедленно, а новое время истечения срока действия будет пропорционально рассчитано и зачислено или снято с пользователя. Это текущее поведение по умолчанию.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Замена вступает в силу немедленно, а цикл выставления счетов остается прежним. Взимается плата за оставшийся период.

Примечание . Эта опция доступна только для обновления подписки.

IMMEDIATE_WITHOUT_PRORATION Замена вступает в силу немедленно, и новая цена будет взиматься в следующий раз. Платежный цикл остается прежним.

replaceSkusProration больше не поддерживается в классе BillingFlowParams .

Раньше разработчики могли устанавливать логический флаг для взимания пропорциональной суммы за запрос на обновление подписки. Учитывая, что мы поддерживаем ProrationMode , который содержит более подробную инструкцию пропорционального распределения, этот логический флаг больше не поддерживается.

launchBillingFlow() теперь запускает обратный вызов в случае неудачных ответов.

Библиотека выставления счетов всегда запускает обратный вызов PurhcasesUpdatedListener и асинхронно возвращает BillingResponse . Синхронное возвращаемое значение BillingResponse также сохраняется.

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

  • Правильно завершает работу на ранних стадиях асинхронных методов, когда служба отключена.
  • Объекты параметров Builder больше не изменяют построенные объекты.
  • Проблема 68087141 : launchBillingFlow() теперь запускает обратный вызов в случае неудачных ответов.

Выпуск библиотеки Google Play Billing Library 1.0 (19 сентября 2017 г., объявление )

Доступна версия 1.0 библиотеки Google Play Billing. Эта версия содержит следующие изменения.

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

  • Разрешение на выставление счетов встроено в манифест библиотеки. Больше нет необходимости добавлять разрешение com.android.vending.BILLING в манифест Android.
  • В класс 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 Google Play Billing.