Как мне обработать код Purchase.sku при обновлении биллинговой библиотеки Google Play с версии 3 до версии 4?

Я использую приложение Google Play в своем приложении на основе официального примера проекта .

Код A предназначен для обработки нерасходуемых продуктов, он хорошо работает, когда я запускаю его с помощью com.android.billingclient:billing-ktx:3.0.3 .

После того, как я обновил проект с Google Play Billing Library 3 до 4, я обнаружил, что код purchase.sku не работает, поэтому мне пришлось заменить его на purchase.skus.

Код purchase.skus можно скомпилировать в com.android.billingclient:billing-ktx:4.0.0, но я не могу получить правильный заказ, пробная покупка возвращается через 3 минуты, похоже, что Google Play не подтверждает покупку.

Как я могу исправить код А при обновлении биллинговой библиотеки Google Play 3 до 4?

Код А

private fun processPurchases(purchasesResult: Set<Purchase>) {
        val validPurchases = HashSet<Purchase>(purchasesResult.size)
        purchasesResult.forEach { purchase ->
            if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {
                if (purchase.sku.equals(purchaseItem)) {
                //if (purchase.skus.equals(purchaseItem)) {     //sku -> skus  in 4.0
                    if (isSignatureValid(purchase)) {
                        validPurchases.add(purchase)
                    }
                }
            } else if (purchase.purchaseState == Purchase.PurchaseState.PENDING) {
                Log.d(LOG_TAG, "Received a pending purchase of SKU: ${purchase.sku}")
                // handle pending purchases, e.g. confirm with users about the pending
                // purchases, prompt them to complete it, etc.
                mContext.toast(R.string.msgOrderPending)

            } else {
                mContext.toast(R.string.msgOrderError)
            }
        }

        acknowledgeNonConsumablePurchasesAsync(validPurchases.toList())
    }

Вероятно, вам нужно перейти с версии 3 из-за политики обновления игровых магазинов, верно? Если это так, я бы предложил перейти на v5 вместо v4. Потому что с v4 у вас снова возникнет проблема с миграцией довольно скоро (вероятно, к концу следующего года или около того). И некоторые из методов, представленных в v4, уже устарели в v5 ... Возможно, это немного больше работы, но вы пощадите усилия для принудительного перехода с v4 на v5.

derpirscher 30.11.2022 21:24
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
3
1
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, какова точная причина изменения этого метода, но я думаю, что это, вероятно, из-за новой модели подписки в Google Play. Более того, этот новый метод устарел в версии 5.0.0.

Однако, поскольку purchase.skus стал списком строк, вы можете просто проверить наличие purchaseItem внутри него. Я думаю, это зависит от ваших настроек покупок. Предполагая, что ваш purchaseItem также является String, вы можете найти свой purchaseItem там:

if (purchase.skus.any { it == purchaseItem })

или просто возьмите первый для сравнения:

if (purchase.skus[0] == purchaseItem)

Конечно, вы должны отладить его, чтобы проверить, что именно находится в списке skus, а затем выбрать лучший способ исправить это.

Другие вопросы по теме