我目前正在测试我的InApp计费机制(使用InApp Billing版本3 API,因此以TrivialDrive示例为引用)。

我有一个托管项目,它是升级到高级版本。

现在,可以使用我的测试帐户购买该商品了,但是当我随后在Google Checkout中取消了整个订单时,我的代码仍然告诉我该商品是购买的,因此可以授予高级功能。

这是我在MainActivity中检查购买情况的方法。我不会在本地保存购买状态,因为我知道使用Billing API v3,您可以根据需要临时查询购买。

@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

        iabHelper = new IabHelper(this, Helper.getPKey());
        iabHelper.enableDebugLogging(true);

        iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {

            @Override
            public void onIabSetupFinished(IabResult result) {
                Log.d("IAB", "SETUP FINISHED");

                if(!result.isSuccess())
                {
                    Log.d("IAB", "SETUP NOT OK");
                    return;
                }
                else
                    Log.d("IAB", "SETUP OK");

                iabHelper.queryInventoryAsync(
                    new QueryInventoryFinishedListener() {

                        @Override
                        public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                            Log.d("IAB", "Query inventory finished.");
                            if (result.isFailure()) {
                                Log.d("IAB","Failed to query inventory: " + result);
                                return;
                            }

                            Log.d("IAB", "Query inventory was successful.");

                            // Do we have the premium upgrade?
                            boolean mIsPremium = inv.hasPurchase(Helper.premiumSku);
                            Purchase p = inv.getPurchase(Helper.premiumSku);
                            if(p != null)
                                Log.d("IAB PURCHASE STATE", IabHelper.getResponseDesc(p.getPurchaseState()));
                            else
                                Log.d("IAB PURCHASE STATE", "Purchase is null");

                            Log.d("IAB", "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));


                        }
                    }

                );
            }
        });
    }

我一直在获取getPurchaseState = 0,这意味着即使在取消订单一小时后也已购买。为什么?

最佳答案

在等待了大约12个小时并尝试了此处建议的所有内容之后,我仍然面临着同样的问题。下面的adb命令对我来说是个窍门:

关于android - Android应用内结算: Purchase state stays “purchased” after order cancelation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14303850/

10-09 04:07