В этом документе описано, как перейти с библиотеки Google Play Платежей (PBL) версии 7 или 8 на PBL версии 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 и удалены устаревшие. В этой версии библиотеки также представлен более подробный контекст ошибок за счет новых кодов дополнительных ответов.
Обратная совместимость для обновления PBL
Чтобы перейти на PBL 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 API queryPurchaseHistoryAsync Подробнее о запросе истории покупок… Если вы использовали 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. Включите автоматическое повторное подключение к сервису (рекомендуется).
Библиотека Play Платежей может попытаться автоматически восстановить подключение к сервису, если вызов API выполняется, когда сервис отключен. Подробнее о том, как включить автоматическое повторное подключение сервиса…
Обрабатывайте новые коды дополнительных ответов.
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); }Необязательные изменения.
Поддержка незавершенных покупок для планов с предоплатой. Подробнее о том, как обрабатывать подписки и транзакции в обработке…
Подписки с виртуальной рассрочкой. Подробнее об интеграции подписок с рассрочкой…