You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Billing 5.x:测试内购取消、订阅流程及场景验证问询

Android Kotlin Billing 5.x 测试相关问题解答

1. 取消应用内测试购买

根据商品类型不同,取消方式分两种:

  • 一次性商品(消耗型/非消耗型)
    • 消耗型商品:调用BillingClient的consumeAsync方法,传入目标购买的令牌(purchase.purchaseToken),消耗完成后测试账号可再次购买该商品。
    • 非消耗型商品:无法通过代码直接取消,可通过两种方式操作:
      1. 登录Google Play Console,进入「应用内商品」-「测试订单」,找到对应测试账号的订单手动取消/退款;
      2. 测试账号打开Google Play应用,进入「订单」页面找到对应测试订单,申请退款取消。
  • 订阅类商品
    • 测试账号打开Google Play应用,进入「订阅」页面找到目标订阅,点击取消订阅;
    • 或登录Google Play Console,进入「订阅」-「测试订阅」,直接终止对应测试订阅。

2. 测试应用内计费的取消场景

订阅取消场景测试

  • 立即取消验证:测试账号购买订阅后,直接在Google Play中取消订阅,随后调用queryPurchasesAsync查询订阅状态,验证App是否正确识别订阅的取消状态(注意:订阅取消后仍会保持有效直到当前周期结束,需验证周期到期后的失效逻辑)。
  • 到期自动取消验证:在Google Play Console创建短周期测试订阅(如1分钟),购买后等待订阅到期,查询购买状态并验证App对订阅失效的处理逻辑。

一次性购买取消场景测试

  • 手动在Google Play Console取消测试订单后,调用queryPurchasesAsync查询购买记录,验证App是否能正确识别已取消的订单,并同步调整功能权限(如移除已解锁的付费内容)。

代码模拟测试

  • 在测试环境中,通过Mock BillingClient的返回结果,模拟购买状态为PURCHASE_CANCELLED,验证App的错误处理逻辑是否正常运行。

3. 应用内订阅购买的操作步骤

前置准备

  • 在Google Play Console创建订阅商品,配置价格、周期等信息,将测试账号添加到「许可测试」列表;
  • 集成Billing 5.x SDK,初始化BillingClient并设置PurchasesUpdatedListener监听购买结果。

具体流程(Kotlin代码示例)

  1. 查询订阅商品详情
    val targetSku = listOf("your_subscription_sku")
    val skuParams = SkuDetailsParams.newBuilder()
        .setSkusList(targetSku)
        .setType(BillingClient.SkuType.SUBS)
        .build()
    
    billingClient.querySkuDetailsAsync(skuParams) { responseCode, skuDetails ->
        if (responseCode == BillingClient.BillingResponseCode.OK && skuDetails != null) {
            // 获取到订阅详情,展示给用户选择
        }
    }
    
  2. 发起购买请求
    用户点击购买按钮后,用获取到的SkuDetails创建购买参数,启动购买流程:
    val billingFlowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(selectedSkuDetails) // 传入用户选择的订阅详情
        .build()
    billingClient.launchBillingFlow(activity, billingFlowParams)
    
  3. 处理购买结果
    在PurchasesUpdatedListener中处理不同购买状态:
    private val purchaseListener = PurchasesUpdatedListener { billingResult, purchases ->
        when (billingResult.responseCode) {
            BillingClient.BillingResponseCode.OK -> {
                purchases?.forEach { purchase ->
                    handleValidPurchase(purchase)
                }
            }
            BillingClient.BillingResponseCode.USER_CANCELED -> {
                // 用户取消购买,提示或恢复原状态
            }
            else -> {
                // 购买失败,处理错误提示
            }
        }
    }
    
  4. 确认订阅购买
    购买成功后需调用acknowledgePurchaseAsync确认购买,避免订单被退款:
    private fun handleValidPurchase(purchase: Purchase) {
        if (!purchase.isAcknowledged) {
            val acknowledgeParams = AcknowledgePurchaseParams.newBuilder()
                .setPurchaseToken(purchase.purchaseToken)
                .build()
            billingClient.acknowledgePurchaseAsync(acknowledgeParams) { result ->
                if (result.responseCode == BillingClient.BillingResponseCode.OK) {
                    // 订阅确认成功,解锁对应服务
                }
            }
        }
    }
    
  5. 查询当前订阅状态
    App启动或需要验证订阅时,查询用户的有效订阅:
    billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) { responseCode, purchases ->
        if (responseCode == BillingClient.BillingResponseCode.OK) {
            // 遍历订阅列表,判断用户是否有有效订阅
            purchases?.forEach { subscription ->
                // 处理订阅状态逻辑
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者Sunny_Sony_singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:15:26