Google Billing Client连接失败及订阅配置关联疑问
Google Play订阅集成问题解答
1. 最初客户端连接失败的原因
- BillingClient的
startConnection()是异步操作,不会立刻完成连接。你在按钮点击事件里用while循环重试连接,相当于第一次连接请求还在处理时,又反复发起新的连接请求,而BillingClient不允许同时存在多个连接流程,因此触发了"Client is already in the process of connecting to billing service"错误。 - 另外,每次点击按钮都重新创建BillingClient实例并发起连接,会导致多个实例同时尝试连接服务,进一步加剧冲突。
2. 客户端获取订阅详情的方法
不需要手动在代码里关联Google Play Console的订阅配置,只要你在Console里创建订阅时设置了唯一的SKU,直接通过SKU查询即可,步骤如下:
- 步骤1:准备订阅SKU列表
把你在Google Play Console创建订阅时设置的SKU(比如monthly_sub、yearly_sub)整理成列表。 - 步骤2:连接成功后发起查询
在BillingClient的onBillingSetupFinished回调(连接成功的回调)里,调用querySkuDetailsAsync方法:// Kotlin示例 val skuList = listOf("monthly_sub", "yearly_sub") val params = SkuDetailsParams.newBuilder() .setSkusList(skuList) .setType(BillingClient.SkuType.SUBS) .build() billingClient.querySkuDetailsAsync(params) { responseCode, skuDetailsList -> if (responseCode == BillingClient.BillingResponseCode.OK && skuDetailsList != null) { // 处理订阅详情,比如显示价格、名称 for (skuDetails in skuDetailsList) { val price = skuDetails.price val title = skuDetails.title // 更新UI展示订阅信息 } } } - 步骤3:处理查询结果
在回调里判断返回码是否为OK,如果是,skuDetailsList里就包含了对应SKU的订阅详情,包括价格、订阅周期、描述等信息,你可以直接拿这些数据更新UI。
注意事项
- 确保App的包名、签名和Google Play Console里配置的完全一致,否则会查询不到订阅。
- 测试时需要使用Google Play Console添加的测试账号,或者启用应用内测试,才能看到测试订阅的信息。
内容的提问来源于stack exchange,提问作者TriedAtLeast
相关产品推荐
相关产品推荐

