BillingClient SDK помечён как устаревший. BillingClient SDK продолжает свою работу, но устранение неисправностей, влияющих на работу платежей, может занимать больше времени. Новая функциональность добавляться не будет.
Рекомендуем использовать Pay SDK в проектах. Для перехода на Pay SDK воспользуйтесь инструкцией по миграции
Обновление до RuStore SDK 2.2.0: Модели покупок, зависимости и миграция
В версии 2.2.0 платежей были значительно изменены модели результата покупки продуктовPaymentResult.
Чтобы быстро перейти на новую версию SDK, используйте настоящую инструкцию по миграции.
Обновление зависимости
- Kotlin
- Java
Для обновления зависимости, поднимите версию у billingclient в блоке dependencies вашего build.gradle.
dependencies {
implementation( "ru.rustore.sdk:billingclient:2.2.0" )
}
Для обновления зависимости, поднимите версию у billingclient в блоке dependencies вашего build.gradle.
dependencies {
implementation( "ru.rustore.sdk:billingclient:2.2.0" )
}
Получение списка продуктов
- Kotlin
- Java
Изменилась модель результата получения списка продуктов. Теперь метод getProducts() сразу возвращается список продуктов.
val productsUseCase: ProductsUseCase = billingClient.products
productsUseCase.getProducts(productIds = listOf("id1", "id2"))
.addOnSuccessListener { products: List<Product> ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}
Изменилась модель результата получения списка продуктов. Теперь метод getProducts() сразу возвращается список продуктов.
ProductsUseCase productsUseCase = billingClient.getProducts();
productsUseCase.getProducts(Arrays.asList("id1" , "id2")).addOnCompleteListener( new OnCompleteListener<List<Product>>() {
@Override
public void onFailure( @NonNull Throwable throwable) {
// Process error
}
@Override
public void onSuccess(List<Product> products) {
// Process success
}
});
Покупка продукта
- Kotlin
- Java
Изменилась модель результата покупки продукта. Обновленная модель представлена ниже.
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.
Изменилась модель результата покупки продукта. Обновленная модель представлена ниже.
interface PaymentResult {
interface Success extends PaymentResult {
@Nullable
public String getOrderId();
public String getPurchaseId();
public String getProductId();
public String getinvoiceId();
@Nullable
public String getSubscriptionToken();
}
interface Failure extends PaymentResult {
@Nullable
public String getPurchaseId();
@Nullable
public String getinvoiceId();
@Nullable
public String getOrderId();
@Nullable
public Integer getQuantity();
@Nullable
public String getProductId();
@Nullable
public Integer getErrorCode();
}
interface Cancelled extends PaymentResult {
public String getPurchaseId();
}
interface InvalidPaymentState extends PaymentResult {}
}
Success— результат успешного завершения покупки цифрового товара.Failure— при отправке запроса на оплату или получения статуса оплаты возникла проблема, невозможно установить статус покупки.Cancelled— запрос на покупку отправлен, при этом пользователь закрыл «платёжную шторку» на своём устройстве, и результат оплаты неизвестен.InvalidPaymentState— ошибка работы SDK платежей. Может возникнуть, в случае некорректного обратного deeplink.
Обратите особое внимание на сценарии подтверждения (потребления) и отмены покупки.
Подтверждение (потребление) покупки
- Kotlin
- Java
Изменилась модель результата подтверждения (потребления) покупки. Теперь подтверждение (потребление) может завершиться либо успехом, либо ошибкой.
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
Изменилась модель результата подтверждения (потребления) покупки. Теперь подтверждение (потребление) может завершиться либо успехом, либо ошибкой.
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();
purchasesUseCase.confirmPurchase("purchaseId", "developerPayload").addOnCompleteListener( new OnCompleteListener<Unit>() {
@Override
public void onFailure( @NonNull Throwable throwable) {
// Process error
}
@Override
public void onSuccess(Unit result) {
// Process success
}
});
Отмена покупки
- Kotlin
- Java
Изменилась модель результата отмены покупки. Теперь отмена покупки может завершиться либо успехом, либо ошибкой.
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.deletePurchase(purchaseId = "purchaseId" )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
Изменилась модель результата отмены покупки. Теперь отмена покупки может завершиться либо успехом, либо ошибкой.
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();
purchasesUseCase.deletePurchase("purchaseId").addOnCompleteListener( new OnCompleteListener<Unit>() {
@Override
public void onFailure( @NonNull Throwable throwable) {
// Process error
}
@Override
public void onSuccess(Unit result) {
// Process success
}
});
Сценарий подтверждения и отмены покупки
В связи с тем, что изменилась модель результата покупки продукта, изменилась и логика подтверждения (потребления) и отмены покупки.
Метод отмены покупки (deletePurchase) необходимо использовать, если:
-
метод получения списка покупок (
getPurchases) вернул покупку со статусом:PurchaseState.CREATED;PurchaseState.INVOICE_CREATED;
-
метод покупки (
purchaseProduct) вернул:PaymentResult.Cancelled;PaymentResult.Failure.
Метод подтверждения (потребления) продукта (confirmPurchase) необходимо использовать, если метод получения списка покупок (getPurchases) вернул покупку продукта типа CONSUMABLE и со статусом PurchaseState.PAID.