Billing v5未发布应用时如何测试内购API?
无需发布应用测试Billing v5产品查询API的方法
1. 使用Billing Library内置的FakeBillingClient
这是官方推荐的本地测试方案,完全不需要连接Play商店、不用上架应用,可自定义返回各类静态响应:
- 模拟"产品未找到":调用
queryProductDetailsAsync时传入不存在的产品ID,FakeBillingClient会返回空产品列表,或触发BillingResult错误码为ITEM_NOT_FOUND的回调。 - 模拟"产品未拥有":通过
queryPurchasesAsync返回空购买列表,或针对目标产品ID返回未购买状态。 - 模拟"产品已拥有":预先在
FakeBillingClient中添加对应购买记录,调用queryPurchasesAsync时会返回该产品的已购买状态。
代码示例:
// 初始化FakeBillingClient val fakeBillingClient = FakeBillingClient.newInstance(context) fakeBillingClient.startConnection(object : BillingClientStateListener { override fun onBillingSetupFinished(result: BillingResult) { // 预设已购买记录 val purchasedPurchase = Purchase.newBuilder() .setPurchaseId("test_purchase_001") .setProductId("test_owned_sku") .setPurchaseState(Purchase.PurchaseState.PURCHASED) .build() fakeBillingClient.addPurchases(listOf(purchasedPurchase)) // 查询产品详情与购买状态 fakeBillingClient.queryProductDetailsAsync(ProductDetailsParams.newBuilder().setProductList(...).build()) { billingResult, details -> // 自定义返回的产品详情结果 } fakeBillingClient.queryPurchasesAsync(QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build()) { billingResult, purchases -> // 会返回预先添加的已购买记录 } } override fun onBillingServiceDisconnected() {} })
2. 自定义本地Mock类
如果FakeBillingClient满足不了更灵活的需求,可以自行封装BillingClient的Mock实现:
- 实现
BillingClient接口,在queryProductDetailsAsync和queryPurchasesAsync方法中直接返回预设的静态响应。 - 比如约定:传入
test_owned_sku返回已拥有状态,传入test_unowned_sku返回未拥有状态,传入test_not_found_sku返回未找到错误。
3. Play Console内部测试(可选,无需公开上架)
若需要更贴近真实环境的测试但不想公开上架,可创建内部测试版本:
- 在Play Console中创建应用(无需发布到生产),添加测试产品(订阅/一次性购买)。
- 将测试设备的Google账号加入内部测试人员列表,安装内部测试APK后,即可通过真实Billing API获取产品信息、模拟购买状态。
- 该方式需关联Play Console应用,但无需公开上架,适合需要真实API交互的场景。
前两种方法完全离线,适合快速演示自研库逻辑;第三种方法接近真实环境,但需要少量Play Console配置。
内容的提问来源于stack exchange,提问作者prom85
相关产品推荐
相关产品推荐

