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

使用Google Play Billing queryPurchasesAsync查询到空订阅列表,但实际存在有效订阅

Google Play Billing Library查询订阅返回空列表的排查方案

调用queryPurchasesAsync查询订阅时返回空列表,但实际存在有效订阅;已尝试清空Play Store缓存,使用的是Billing Library 6.0.1版本。结合提供的代码,可从以下几个方向排查解决:

1. 修复连接时序问题

当前代码中,若billingClientConnected为false,调用startBillingClientConnection()后不会等待连接完成就结束逻辑,导致查询操作未执行。需确保连接成功后触发查询:

public void queryPurchases() {
    if (!billingClientConnected) {
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    billingClientConnected = true;
                    // 连接成功后执行订阅查询
                    performSubscriptionQuery();
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                billingClientConnected = false;
            }
        });
    } else {
        performSubscriptionQuery();
    }
}

// 提取查询逻辑到独立方法,便于复用
private void performSubscriptionQuery() {
    QueryPurchasesParams subsPurchasesParams = QueryPurchasesParams.newBuilder()
            .setProductType(BillingClient.ProductType.SUBS)
            .build();
    billingClient.queryPurchasesAsync(subsPurchasesParams, 
        new PurchasesResponseListener() {
            @Override
            public void onQueryPurchasesResponse(@NonNull BillingResult billingResult,
                                             @NonNull List<Purchase> purchaseList) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    purchases.clear();
                    for (Purchase purchase : purchaseList) {
                        handlePurchase(purchase);
                    }
                }
            }
        });
}

2. 补充历史订阅查询

queryPurchasesAsync依赖本地缓存,可通过queryPurchaseHistoryAsync查询云端历史记录作为补充,验证是否能获取到订阅信息:

private void queryPurchaseHistory() {
    QueryPurchaseHistoryParams params = QueryPurchaseHistoryParams.newBuilder()
            .setProductType(BillingClient.ProductType.SUBS)
            .build();
    billingClient.queryPurchaseHistoryAsync(params, new PurchaseHistoryResponseListener() {
        @Override
        public void onQueryPurchaseHistoryResponse(@NonNull BillingResult billingResult,
                                                   @Nullable List<PurchaseHistoryRecord> purchaseHistoryRecords) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchaseHistoryRecords != null) {
                // 遍历历史记录,可通过purchaseToken验证订阅当前有效性
                for (PurchaseHistoryRecord record : purchaseHistoryRecords) {
                    // 处理逻辑
                }
            }
        }
    });
}

3. 其他排查点

  • 账号一致性:确认设备登录的Google账号与购买订阅的账号一致,多账号环境下可切换账号重试。
  • 订阅有效性:检查订阅是否处于有效状态(未过期、未取消),测试环境需确保测试账号已正确配置。
  • 缓存彻底刷新:清空Play Store缓存后,重启设备或重新登录Google账号,确保缓存完全更新。
  • 订阅回调处理:完善PurchasesUpdatedListener的onPurchasesUpdated方法,确保订阅状态变化时能及时更新本地列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:29:53