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

BillingClient.querySkuDetails(SkuDetailsParams.builder())调用失效且返回空列表怎么办?

安卓谷歌计费服务querySkuDetails异常排查方案

1. 基础配置校验

  • 确认Google Play Console后台配置:应用包名、签名证书的SHA-256指纹必须和后台配置完全一致;测试场景下需将测试账号加入许可测试列表;要查询的SKU状态必须是激活,未激活的SKU不会被返回。
  • 确认权限配置正确:AndroidManifest.xml中必须添加<uses-permission android:name="com.android.vending.BILLING" />,Billing Library 5.0及以上版本无需额外添加旧版计费权限。

2. 调用逻辑校验

  • 调用查询前必须保证BillingClient已完成初始化且成功连接,billingClient.isReady()返回true才能发起查询,未连接状态下发请求会直接执行失败。
  • Sku类型必须和后台配置完全匹配:消耗型/非消耗型商品用BillingClient.SkuType.INAPP,订阅类商品用BillingClient.SkuType.SUBS,类型传错会直接返回空列表。
  • SKU ID拼写必须和后台完全一致,注意大小写、特殊符号,批量查询时不要传空列表或者不存在的SKU ID,参考调用示例:
val params = SkuDetailsParams.newBuilder()
    .setSkusList(listOf("sku_id_1", "sku_id_2")) // ID与后台完全匹配
    .setType(BillingClient.SkuType.INAPP) // 类型与SKU匹配
    .build()
// Billing Library 4.0+已废弃同步querySkuDetails()方法,必须调用异步接口
billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList ->
    // 后续结果处理
}

3. 运行环境校验

  • 测试设备必须安装正版Google Play商店,Billing Library 5.0及以上版本要求Google Play版本不低于20.0。
  • 测试设备登录的Google账号状态正常,无封禁、地区限制,账号所属地区必须在SKU配置的售卖地区范围内。
  • 测试用应用的版本号、版本名、签名必须和Google Play后台提交的测试包完全一致,本地debug包签名与后台不一致时无法正常获取SKU。

4. 返回结果处理校验

  • 先判断billingResult.getResponseCode()的返回值,不同错误码对应不同问题:
    • 响应码BILLING_RESPONSE_RESULT_OK (0)为调用成功,此时skuDetailsList为空说明没有匹配的SKU
    • 响应码BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE (2)为网络问题或Google Play服务不可用
    • 响应码BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE (3)为当前设备不支持对应类型的计费服务
  • 对返回的skuDetailsList做非空判断,避免空指针异常。

5. 其他常见问题排查

  • 刚在Google Play后台创建或修改的SKU存在缓存延迟,最长需要等待24小时生效,测试时可以清除Google Play商店缓存后重试。
  • 若使用内部测试/封闭测试轨道,测试账号必须被加入对应轨道的测试人员列表,且已接受测试邀请。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:42:01