Обновление RuStore SDK до версии 3.2.0: Изменения в платежах и миграция для Kotlin и Java
Примеры кода представлены для Kotlin.
PaymentResult
.
Чтобы быстро перейти на новую версию SDK, используйте настоящую инструкцию по миграции.
Обновление зависимости
Для обновления зависимости, поднимите версию у billingclient
в блоке dependencies
вашего build.gradle
.
dependencies {
implementation( "ru.rustore.sdk:billingclient:3.2.0" )
}
Модель продукта и модель ошибок не изменились.
Получение списка продуктов
Из менилась модель результата получения списка продуктов. Теперь метод getProducts()
сразу возвращается список продуктов.
val productsUseCase: ProductsUseCase = billingClient.products
productsUseCase.getProducts(productIds = listOf("id1", "id2"))
.addOnSuccessListener { products: List<Product> ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}
Модель продукта и модель ошибок не изменились.
Получение списка покупок
Изменилась модель результата получения информации о покупке. Теперь метод getPurchasecaution()
сразу во звращается модель покупки.
Получение списка покупок
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.getPurchasecaution("purchaseId")
.addOnSuccessListener { purchase: Purchase ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}
Модели ошибок не изменились.
Покупка продукта
Изменилась модель результата покупки продукта. Обновленная модель представлена ниже.
public sealed interface PaymentResult {
public data class Success(
val orderId: String?,
val purchaseId: String,
val productId: String,
val invoiceId: String,
val subscriptionToken: String? = null ,
) : PaymentResult
public data class Cancelled(
val purchaseId: String,
) : PaymentResult
public data class Failure(
val purchaseId: String?,
val invoiceId: String?,
val orderId: String?,
val quantity: Int?,
val productId: String?,
val errorCode: Int?,
) : PaymentResult
public object InvalidPaymentState : PaymentResult()
}
Success
— результат успешного завершения покупки цифрового товара.Failure
— при отправке запроса на оплату или получения статуса оплаты возникла проблема, невозможно установить статус покупки.Cancelled
— запрос на покупку отправлен, при этом пользователь закрыл «платёжную шторку» на своём устройстве, и результат оплаты неизвестен.InvalidPaymentState
— ошибка работы SDK платежей. Может возникнуть, в случае некорректного обратного deeplink.
Please, note the purchase confirmation and cancellation scenarios.
Потребление (подтверждение) покупки
Изменилась модель результата потребления (подтверждения) покупки. Теперь потребление (подтверждение) может завершиться либо успехом, либо ошибкой.
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
Отмена покупки
Изменилась модель результата отмены покупки. Теперь отмена покупки может завершиться либо успехом, либо ошибкой.
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.deletePurchase(purchaseId = "purchaseId" )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
Сценарий подтверждения и отмены покупки
В связи с тем, что изменилась модель результата покупки продукта, изменилась и логика потребления (подтверждения) и отмены покупки.
Метод отмены покупки deletePurchase
необходимо использовать при следующих условиях.
- Метод получения списка покупок getPurchases вернул покупку со статусами
PurchaseState.CREATED
илиPurchaseState.INVOICE_CREATED
.
В некоторых случаях, после оплаты через приложение банка (СБП, SberPay, T-Pay и т. д.), при последующем возврате обратно в приложение AnyApp, статус покупки может быть всё ещё PurchaseState.INVOICE_CREATED
. Это связано с временем обработки покупки на стороне банка. Поэтому разработчику необходимо правильно связать логику получения списка покупок с жизненным циклом экрана. Альтернативным вариантом решения данной проблемы является отмена покупки в статусе PurchaseState.INVOICE_CREATED
только через взаимодействие пользователя с приложением. Например, вынести эту логику в отдельную кнопку.
- Метод покупки
purchaseProduct
вернулPaymentResult.Cancelled
. - Метод покупки
purchaseProduct
вернулPaymentResult.Failure
.
Метод потребления (подтверждения) покупки confirmPurchase
необходимо использовать, если метод получения списка покупок getPurchases
вернул покупку типа CONSUMABLE
и со статусом PurchaseState.PAID
.