迁移到支付版本2.2.0
该门户网 站正在开发中。文档的完整版本请看这里.
- Kotlin
- Java
概述
在支付版本 2.2.0 中,PaymentResult 中的产品购买结果模型发生了显著变化。
为了快速且无大问题地迁移到 SDK 的新版本,请遵循此迁移指南。
更新依赖项
为了更新依赖项,请在您的 build.gradle 文件的 dependencies 区域中升级 billingclient 的版本:
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
}```
品模型和错误模型保持不变。
## 获取购买列表
获取购买列表的结果模型发生了变化。现在,**getPurchases()** 方法会直接返回购买列表:
```js
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()
}
买模型和错误模型保持不变。
获取购买信息
获取购买信息的结果模型发生了变化。现在,getPurchaseInfo() 方法会直接返回购买模型:
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// 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。
某些情况下,通过银行应用程序(如快速支付系统(SBP)、SberPay、T-Pay等)支付后,当用户随后返回到AnyApp应用程序时,购买的状态可能仍然是 PurchaseState.INVOICE_CREATED。这与银行端处理购买的时间有关。因此,开发者需要正确地将获取购买列表的逻辑与屏幕生命周期相结合。解决这个问题的另一种方法是,只有在用户与应用程序交互时,才取消处于 PurchaseState.INVOICE_CREATED 状态的购买。例如,可以将这个逻辑放到一个单独的按钮中。
- 购买方法 (
purchaseProduct
) 返回 PaymentResult.Cancelled。 - 购买方法 (
purchaseProduct
) 返回 PaymentResult.Failure。
如果出现以下情况,应使用产品消耗方法(confirmPurchase):
- 获取购买列表的方法 (getPurchases) 返回了类型为
CONSUMABLE
且状态为PurchaseState.PAID
的购买。
概述
在支付版本 2.2.0 中,PaymentResult 中的产品购买结果模型发生了显著变化。
为了快速且无大问题地迁移到 SDK 的新版本,请遵循此迁移指南。
更新依赖项
为了更新依赖项,请在您的 build.gradle 文件的 billingclient 区域中升级 dependencies 的版本:
build.gradle
dependencies {
implementation( "ru.rustore.sdk:billingclient:2.2.0" )
}
更改模型
获取产品列表
获取产品列表的结果模型已发生了变化。现在,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
}
});
品模型和错误模型保持不变。
获取购买列表
获取购买列表的结果模型发生了变化。现在,getPurchases() 方法会直接返回购买列表:
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();purchasesUseCase.getPurchases().addOnCompleteListener( new OnCompleteListener\<List\<Purchase\>\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(List\<Purchase\> purchases) { \`\`// Process success \`\`}});
买模型和错误 模型保持不变。
获取购买信息
获取购买信息的结果模型发生了变化。现在,getPurchaseInfo() 方法会直接返回购买模型:
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();purchasesUseCase.getPurchaseInfo( \"purchaseId\" ).addOnCompleteListener( new OnCompleteListener\<Purchase\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(Purchase purchase) { \`\`// Process success \`\`}});
误模型保持不变。
购买产品
购买产品的结果模型发生了变化。更新后的模型如下所示:
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回调不正确而发生。
别注意购买消耗和取消的流程。
购买消耗(确认)
购买消耗的结果模型发生了变化。现在,消耗可能以成功或错误结束:
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 \`\`}});
取消购买
购买取消的结果模型发生了变化。现在,取消购买可能以成功或错误结束:
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
。 - 购买方法 (
purchaseProduct
) 返回PaymentResult.Failure
。
果获取购买列表的方法 (confirmPurchase) 返回了类型为 getPurchases 且状态为 PurchaseState.PAID
的购买,则需要使用产品消耗方法 (CONSUMABLE)。