Android:如何使用 Android billing 4.0.0 恢复之前购买的商品

Android: How to restore previous purchased using Android billing 4.0.0

我正在尝试创建一个“恢复”按钮(就像在 iOS 中一样)以便用户可以恢复他以前的购买。我正在使用下面的代码,但 List<Purchase> list 返回是空的。我使用信用卡进行了实际购买,然后我删除了该应用程序并从 Google Play 商店重新安装,但我无法使用“恢复”按钮。这是我用于“恢复”按钮的代码:

private void restorePreviousPuchases () {

    billingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP, new PurchasesResponseListener() {
        @Override
        public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {

            if (list != null) {

                for (Purchase purchase : list) {
                    ArrayList<String> skus = purchase.getSkus();

                    if (skus != null) {
                        for (String sku : skus) {
                            setPurchasedItem(sku);

                        }
                    }

                }

            } else {
                Log.d("DEBUGGING...", "onCreate: NULL purchaseList" );
            }
        }
    });
    
}

我刚遇到同样的问题。经过一番调查,这似乎是一个已知的错误。

但是,如果您先启动您的计费客户端,然后调用 queryPurchase,它就可以工作。只是不要将它放在 oncreate 中(对我不起作用)。

BillingClient billingClient;

    public void setupBillingClient(){

     billingClient = BillingClient.newBuilder(mContext)
            .setListener(purchasesUpdatedListener)
            .enablePendingPurchases()
            .build();

    startConnection();
}

public void queryPurchases(Boolean consume){

        if (billingClient!=null) {
            billingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP, new PurchasesResponseListener() {

                @Override
                public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {

                        for (int i = 0; i < list.size(); i++){
                                consumePurchase(list.get(i));
                            }
                    
                }
            });
        }
    }