Перейти к основному содержимому

Переход на версию платежей 2.2.0

примечание

Настоящий раздел содержит сведения о переходе на версию платежей для следующих языков программирования:

  • Kotlin;
  • Java

В версии 2.2.0 платежей были значительно изменены модели результата покупки продуктов PaymentResult.

Для того, чтобы быстро и без особых проблем перейти на новую версию SDK, используйте данную инструкцию по миграции.

Обновление зависимости

Для обновления зависимости, поднимите версию у billingclient в блоке dependencies вашего build.gradle.

build.gradle
dependencies {
implementation( "ru.rustore.sdk:billingclient:2.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
}

Модель продукта и модели ошибок остались без изменений.

Модель покупки продукта

Изменилась модель результата покупки продукта. Обновленная модель представлена ниже.

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.
к сведению

Обратите особое внимание на сценарии потребления и отмены покупки.

Модель подтверждения покупки

Изменилась модель результата потребления покупки. Теперь потребление может завершиться либо успехом, либо ошибкой.

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.
  • Метод покупки (purchaseProduct) вернул PaymentResult.Cancelled.
  • Метод покупки (purchaseProduct) вернул PaymentResult.Failure.

Метод потребления продукта (confirmPurchase) необходимо использовать, если метод получения списка покупок (getPurchases) вернул покупку типа CONSUMABLE и со статусом PurchaseState.PAID.