首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >响应代码项已购买,但采购列表为空

响应代码项已购买,但采购列表为空
EN

Stack Overflow用户
提问于 2019-07-31 21:18:43
回答 2查看 482关注 0票数 8

我正在我的应用程序中实现IAP。一个用于删除广告,另一个用于添加更多的拼图。我正在我的设备上测试,但遇到了一个问题。购买一个项目后,我得到响应代码“项目已拥有”,但它没有显示在购买列表中。

我这样设置我的计费客户端,

代码语言:javascript
运行
复制
private void setUpBillingClient(){
        mBillingClient = BillingClient.newBuilder(this).setListener(this).build();
        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    List skuList = new ArrayList<>();
                    skuList.add(ITEM_SKU_MORE_PUZZLE);
                    skuList.add(ITEM_SKU_REMOVE_AD);
                    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 skuDetailsList) {
                                    // Process the result.
                                    if (responseCode == BillingClient.BillingResponse.OK
                                            && skuDetailsList != null) {
                                        for (Object skuDetailsObject : skuDetailsList) {
                                            SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
                                            String sku = skuDetails.getSku();
                                            String price = skuDetails.getPrice();
                                            if (ITEM_SKU_MORE_PUZZLE.equals(sku)) {
                                                btnMorePuzzle.setText(price);
                                            }
                                            else if(ITEM_SKU_REMOVE_AD.equals(sku)) {
                                                btnRemoveAd.setText(price);
                                            }
                                        }
                                    }
                                }
                            });
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                //Toast.makeText(getApplicationContext(),  getResources().getString(R.string.billing_connection_failure), Toast.LENGTH_SHORT);
            }
        });

        queryPurchases();
        queryPrefPurchases();
    }

第一个问题是,当我已经购买商品时,为什么账单响应在这里是OK的。我不想将按钮的文本设置为价格,这是在购买产品后从这个响应中设置的。

这是我的Onpurchase实现,

代码语言:javascript
运行
复制
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
    if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
        for (Purchase purchase : purchases) {
            if (purchase.getSku().equals(ITEM_SKU_REMOVE_AD)) {
                mSharedPreferences.edit().putBoolean("ad_free", true).commit();
                btnRemoveAd.setText("Done");
                btnRemoveAd.setEnabled(false);
            }
            else if(purchase.getSku().equals(ITEM_SKU_MORE_PUZZLE)){
                mSharedPreferences.edit().putBoolean("more_puzzle", true).commit();
                btnMorePuzzle.setText("Done");
                btnMorePuzzle.setEnabled(false);
            }
        }
    } else if (responseCode == BillingClient.BillingResponse.ITEM_ALREADY_OWNED ) {
        // I am getting response "Item already owned" here for item bought but purchase list here is empty 
        // so i can't do anything for  purchased item
    }
}

第二个问题,这里我得到的回应是我的商品已经被购买了,但列表仍然是空的。如何正确地实现它?

如果有人已经购买了产品,那么按钮应该被禁用。另一个疑问是,在测试时,我是否必须等待1-2个小时才能从playstore退款,以便再次测试,或者是否有其他方法。

我遵循这段代码进行应用内实现。https://github.com/patpatchpatrick/Streakr/

EN

Stack Overflow用户

发布于 2019-08-08 18:50:20

我在您的onPurchasesUpdated中发现一个错误,条件设置错误。

它应该是这样的,

代码语言:javascript
运行
复制
if(BillingResponse.OK && purchases != null) {
// update records
} else if(BillingResponse.ITEM_NOT_OWNED){ //this condition was missing
// update records if required or ask to buy
} else if(BillingResponse.ITEM_ALREADY_OWNED ){ // update records} 

我也建议为此更新db。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57291740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档