В этом документе рассказывается, как перейти с библиотеки Google Play Платежей (PBL) версии 7 или 8 на версию 9 и как использовать новые функции.
Полный список изменений в версии 9.0.0 приведен в примечаниях к выпуску.
Навыки работы с Android
Посмотреть на GitHubКак обновить библиотеку Play Платежей
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.Обзор
В PBL 9 улучшены существующие API и удалены ранее устаревшие API. В этой версии библиотеки также представлен более подробный контекст ошибок благодаря новым кодам дополнительных ответов.
Обратная совместимость при обновлении PBL
Чтобы перейти на библиотеку Play Платежей версии 9, вам нужно обновить или удалить некоторые ссылки на существующие API в приложении. Подробнее об этом рассказывается в примечаниях к выпуску и далее в этом руководстве по переходу.
Как перейти с PBL 7 или 8 на PBL 9
Чтобы перейти с PBL 7 или 8 на PBL 9, выполните следующие действия:
Обновите версию зависимости библиотеки Play Платежей в файле
build.gradleприложения.dependencies { def billing_version = "9.1.0" implementation "com.android.billingclient:billing:$billing_version" }Если вы используете Kotlin, модуль KTX библиотеки Google Play Платежей содержит расширения Kotlin и поддержку сопрограмм, которые позволяют писать идиоматический код Kotlin при работе с библиотекой Google Play Платежей. Чтобы добавить эти расширения в проект, добавьте в файл
build.gradleприложения следующую зависимость:dependencies { val billing_version = "9.1.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(применимо только при переходе с PBL 7 на PBL 9). Обновите реализацию метода
queryProductDetailsAsync.Изменилась сигнатура метода
ProductDetailsResponseListener.onProductDetailsResponse, поэтому вам нужно изменить реализациюqueryProductDetailsAsyncв приложении. Подробнее о том, как показывать товары, доступные для покупки…Обработайте удаленные API.
В таблице ниже перечислены удаленные API и альтернативные API, которые необходимо использовать в приложении.
Перейти на расширенную подписку
PBL 9 больше не поддерживает API, перечисленные в таблице ниже. Если в вашей реализации используются какие-либо из этих API, ознакомьтесь с таблицей, чтобы узнать, какие API можно использовать вместо них.
Удален ранее признанный устаревшим API Альтернативный API queryPurchaseHistoryAsync API Подробнее о запросах истории покупок… Если вы использовали queryPurchaseHistoryAsync, чтобы определить, может ли пользователь оформить бесплатный пробный период, теперь вам нужно использовать ProductDetails.getSubscriptionOfferDetails(), чтобы узнать, какие предложения доступны пользователю. BillingClient.SkuType BillingClient.ProductType. Константы типов продуктов INAPP и SUBS функционально похожи на устаревшие константы типа SKU. SkuDetails ProductDetails. Это новая модель данных, которая поддерживает разовые покупки. SkuDetailsParams Используйте QueryProductDetailsParams с queryProductDetailsAsync. SkuDetailsResponseListener Используйте ProductDetailsResponseListener с queryProductDetailsAsync. QueryPurchaseHistoryParams - Используйте метод queryPurchasesAsync для активных или ожидающих покупок.
- Отслеживайте покупки, которые были использованы, на внутренних серверах.
- Используйте Voided Purchases API на стороне сервера для отмененных или аннулированных покупок.
getSkuDetailsList и setSkuDetailsList Используйте BillingFlowParams.Builder.setProductDetailsParamsList. querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (API без параметров) enablePendingPurchases(PendingPurchasesParams params)
Обратите внимание, что устаревший метод enablePendingPurchases() функционально эквивалентен методуenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync Перейти на расширенную подписку
В таблице ниже перечислены API, которые были удалены в PBL 9, и альтернативные API, которые необходимо использовать в приложении.
Удален ранее признанный устаревшим API Альтернативный API BillingClient.SkuType BillingClient.ProductType. Константы типов продуктов INAPP и SUBS функционально похожи на устаревшие константы типа SKU. SkuDetails ProductDetails. Это новая модель данных, которая поддерживает разовые покупки. SkuDetailsParams Используйте QueryProductDetailsParams с queryProductDetailsAsync. SkuDetailsResponseListener Используйте ProductDetailsResponseListener с queryProductDetailsAsync. QueryPurchaseHistoryParams - Используйте queryProductDetailsAsync для активных или ожидающих покупок.
- Отслеживайте покупки, которые были использованы, на внутренних серверах.
- Используйте Voided Purchases API на стороне сервера для отмененных или аннулированных покупок.
getSkuDetailsList и setSkuDetailsList Используйте BillingFlowParams.Builder.setProductDetailsParamsList. Рекомендуем включить автоматическое повторное подключение к сервису.
Если во время отключения сервиса будет сделан вызов API, библиотека Play Платежей может попытаться автоматически восстановить подключение к сервису. Подробнее о том, как включить автоматическое повторное подключение к сервису…
Обрабатывать новые коды дочерних ответов.
BillingResult, возвращаемый из
launchBillingFlow(), теперь будет включать поле кода подзапроса. Это поле заполняется только в некоторых случаях, чтобы указать более точную причину ошибки. Поле sub-response может иметь следующие значения:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS– возвращается, когда у пользователя недостаточно средств для покупки товара.USER_INELIGIBLE– возвращается, если пользователь не соответствует требованиям для получения предложения подписки.NO_APPLICABLE_SUB_RESPONSE_CODE– значение по умолчанию, возвращаемое, когда не подходит ни один другой код дополнительного ответа.
Этап перехода. Обновите обработку результатов
PurchasesUpdatedListenerили аналогичную функцию, чтобы распознавать и обрабатывать эти коды дополнительных ответов. Это позволит улучшить взаимодействие с пользователями. Например, может появиться сообщение с предложением исправить способы оплаты или сообщение об ошибке.Учитывайте переклассификацию кодов ошибок.
Если приложение Google Play заблокировано системой (например, в детском режиме, настроенном производителем устройства), код ответа от PBL изменится с
ERRORнаBILLING_UNAVAILABLE.Этап переноса. Убедитесь, что логика обработки ошибок учитывает это изменение и не полагается на получение общей ошибки в этих конкретных сценариях.
Обрабатывайте допустимость значения NULL для
DeveloperProvidedBillingDetails.getLinkUri().Если вы используете
DeveloperProvidedBillingDetailsкак часть интеграции внешних платежей,getLinkUri()теперь называется@Nullable.Шаг перехода. Чтобы безопасно перейти на новую версию, убедитесь, что код интеграции обрабатывает как значение
null, так и пустую строку (""), полученные от методаDeveloperProvidedBillingDetails.getLinkUri(), прежде чем выполнять синтаксический анализ или запускать намерения браузера. Пример:Kotlin
val linkUri = details.linkUri if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, linkUri.toUri()) context.startActivity(intent) }
Java
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }Необязательные изменения.
Поддержка отложенных покупок для тарифных планов с предоплатой. Подробнее об обработке подписок и отложенных транзакций…
Подписки с виртуальной рассрочкой. Подробнее об интеграции подписок с оплатой частями…