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

BillingClient SDK помечён как устаревший. BillingClient SDK продолжает свою работу, но устранение неисправностей, влияющих на работу платежей, может занимать больше времени. Новая функциональность добавляться не будет.

Рекомендуем использовать Pay SDK в проектах. Для перехода на Pay SDK воспользуйтесь инструкцией по миграции

Обновление до RuStore SDK 2.2.0: Модели покупок, зависимости и миграция

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

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

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

Для обновления зависимости, поднимите версию у billingclient в блоке dependencies вашего 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.
к сведению

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;
  • метод покупки (purchaseProduct) вернул:

    • PaymentResult.Cancelled;
    • PaymentResult.Failure.

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