首页 > 解决方案 > Android - queryPurchase() 返回一个空列表,但我购买了应用内产品

问题描述

我已经在我的应用程序中实现了应用程序产品。我可以成功购买,一切正常。但是在一台设备上,购买不起作用,尽管当我再次尝试购买时,我收到“产品已拥有”的响应,这表明购买很好。但是 queryPurchase() 返回一个空的购买列表。我在那个设备上只有一封电子邮件。

public void queryPurchase() {
    Runnable queryPurchaseRequest = getQueryPurchaseRequest();
    executeRequest(queryPurchaseRequest);
}

    private Runnable getQueryPurchaseRequest() {
        return new Runnable() {
            @Override
            public void run() {
                Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
                if(purchasesResult.getResponseCode() == BillingResponseCode.OK) {
                    ArrayList<Purchase> purchaseList = new ArrayList<>();
                    purchaseList.addAll(purchasesResult.getPurchasesList());
    
                    if(isSubscriptionSupported()) {
                        Purchase.PurchasesResult subscriptionResult
                                = mBillingClient.queryPurchases(BillingClient.SkuType.SUBS);
    
                        if (subscriptionResult.getResponseCode() == BillingResponseCode.OK) {
                            purchaseList.addAll(subscriptionResult.getPurchasesList());
                        } else {
                            Log.e(TAG, "Got an error response trying to query subscription purchases");
                        }
                    }
                    onQueryPurchasesFinished(purchaseList);
                } else {
                    Utilities.setPurchaseLog("onBilling manager on query purchase request: result unknown\n");
    
                }
            }
        };
    }

注意:计费结果,订阅响应代码一切似乎都成功了。一切都在其他设备上完美运行。

有人有解决办法吗?谢谢你的帮助!

标签: androidin-app-purchasebillingandroid-billinggoogle-play-billing

解决方案


自计费库 2.x 版(优先级:P1,严重性 S2)以来,这是一个已经发生多年的已知错误

https://issuetracker.google.com/issues/160473001

我认为您能做的最好的事情就是去那里并留下您的明星/评论以加快速度。

但是,有时我们可能会错过一些事情:事实证明,您需要等待 billingClient.startConnection() 调用完成它的工作,并且在提供的 BillingClientStateListener 上调用 onBillingSetupFinished() 回调。只有在那之后,您才能调用 queryPurchases 方法。如果您在完成与服务的连接之前调用 queryPurchases,您将获得一个空列表。


推荐阅读