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

Android内购测试时querySkuDetailsAsync返回responseCode=-1问题排查

问题分析与解决方案

从你的日志顺序就能直接定位核心问题:你在BillingClient完成连接建立之前,就调用了querySkuDetailsAsync。日志里先打印了查询响应(返回-1),之后才显示连接完成,这说明查询请求发起时,Google Play Billing服务还未成功连上,自然会返回服务断开的错误码。

核心修复:调整查询时机

你需要把查询商品详情的代码,移到onBillingSetupFinished方法内部,确保只有当连接成功建立后,才发起商品查询。修改后的代码如下:

mBillingClient = BillingClient.newBuilder(getContext())
    .setListener(new PurchasesUpdatedListener() {
        @Override
        public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
            Log.d(TAG, "Purchase Updated!");
        }
    })
    .build();

mBillingClient.startConnection(new BillingClientStateListener() {
    @Override
    public void onBillingSetupFinished(int billingResponseCode) {
        if (billingResponseCode == BillingClient.BillingResponse.OK) {
            Log.d(TAG, "Billing setup complete!");
            // 连接成功后,才发起商品查询
            List<String> skuList = new ArrayList<>();
            skuList.add("plaque001");
            SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
            mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
                    Log.d(TAG, "details response received!");
                    Log.d(TAG, Integer.toString(responseCode));
                }
            });
        }
    }

    @Override
    public void onBillingServiceDisconnected() {
        Log.d(TAG, "DISCONNECTED!");
        // 实现自动重试逻辑,避免连接断开后无法恢复
        new Handler(Looper.getMainLooper()).postDelayed(() -> {
            if (!mBillingClient.isReady()) {
                mBillingClient.startConnection(this);
            }
        }, 3000);
    }
});

额外检查点(排查潜在问题)

除了调整查询时机,你还需要确认以下几点:

  • 你的测试账号已经被添加到Play Console的内部测试人员列表,并且已经通过邮件链接接受了测试邀请(必须完成这一步,才能访问Alpha版本的内购商品)。
  • 确认商品plaque001的类型是应用内商品(INAPP),和你代码中设置的BillingClient.SkuType.INAPP完全匹配(如果是订阅商品,要改成SkuType.SUBS)。
  • 测试设备必须登录授权的测试账号,且安装的是从Play Store下载的Alpha版本(本地调试APK无法测试正式内购流程)。
  • 确保应用签名和Play Console中上传的Alpha版本签名一致,签名不匹配会导致内购验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:46