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

Android Google Play Billing 4.0调用querySkuDetailsAsync返回空列表排查

谷歌支付库迁移问题排查指南

License Key配置说明

com.android.billingclient 4.0.0版本不需要在客户端代码中显式配置旧版要求的license key,该参数仅用于服务端对购买收据做验签使用,客户端无需声明,因此该配置不是你查询SKU返回空的诱因。

querySkuDetailsAsync返回空结果排查方案

  • 确认BillingClient初始化完成后再调用查询接口:必须在BillingClientStateListener的onBillingSetupFinished回调返回响应码为0(BILLING_RESPONSE_RESULT_OK)之后,再执行SKU查询操作,未完成初始化就调用接口会直接返回空列表。
  • 检查SKU类型匹配是否正确:如果查询的是订阅类商品,setType参数需要传入SkuType.SUBS,仅一次性购买商品(消耗/非消耗)可传入SkuType.INAPP,类型不匹配会返回空结果。
  • 核对应用配置与测试环境:

    测试设备的Google Play商店版本需≥18.0.0,且登录的谷歌账号已被加入Google Play后台的应用内部测试/封闭测试白名单
    当前安装的应用包名、签名信息(需使用release签名,和Google Play后台上传的测试/正式包签名完全一致),签名不匹配会导致所有支付接口调用异常

  • 确认Google Play后台商品状态:需要查询的SKU对应的商品必须设置为「激活」状态,未激活的商品无法被查询到。
  • 增加错误码日志定位具体问题:在onSkuDetailsResponse回调中优先打印返回的响应码和调试信息,可直接定位根因,示例代码如下:
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
    // 先打印错误信息排查问题
    Log.i("BillingDebug", "响应码:" + billingResult.getResponseCode() + " 错误信息:" + billingResult.getDebugMessage());
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
        // 正常业务逻辑
    }
}

常见响应码说明:3表示当前设备不支持对应版本的Billing API,7表示用户已经持有该商品,8表示用户账号未绑定支付方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:03