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