【问题标题】:Android in app purchase consuming errorAndroid 应用内购买消费错误
【发布时间】:2014-03-22 23:29:56
【问题描述】:

我几乎完成了我的第一个应用程序。我有我的应用内购买工作,但事实证明我在消费购买时遇到了问题,因为应该可以无休止地购买该物品。我想我已经编辑了代码以正确使用购买的商品,我将提供代码,以便您在我错了时纠正我。但是即使这段代码现在可能是正确的,我也无法再次在我的测试设备上购买该产品,因为最初购买时它没有被消耗掉。我现在如何消费该产品?这是我更新的代码。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        if (result.isFailure()) {
            Log.d("Unlock", "Error purchasing: " + result);
            return;
        } else if (purchase.getSku().equals(SKU_HINTS)) {
            consumeItem();              
        }

    }
};

public void consumeItem() {
    mHelper.queryInventoryAsync(mReceivedInventoryListener);
}

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
            Inventory inventory) {

        if (result.isFailure()) {
            // Handle failure
        } else {
            mHelper.consumeAsync(inventory.getPurchase(SKU_HINTS),
                    mConsumeFinishedListener);
        }
    }
};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
    public void onConsumeFinished(Purchase purchase, IabResult result) {

        if (result.isSuccess()) {
            add_hints();
            purchase1.setText("Purchase complete");
        } else {
            // handle error
        }
    }
};

public void onClick(View v) {
case R.id.bUnlockHints:
        mHelper.launchPurchaseFlow(this, SKU_HINTS, 10001,
                mPurchaseFinishedListener, "");
        break;
 }

【问题讨论】:

    标签: android in-app-purchase


    【解决方案1】:

    我想出了答案。我不得不更改 startSetup 方法,以便它立即查询库存。这是我的新代码。

    IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result,
                Inventory inventory) {
    
            if (result.isFailure()) {
                // Handle failure
            } 
                // This is the updated part
            Purchase hintPurchase = inventory.getPurchase(SKU_HINTS);
    
            if (hintPurchase != null) {
                mHelper.consumeAsync(inventory.getPurchase(SKU_HINTS),
                        mConsumeFinishedListener);
            }
        }
    };
    

    在这里,我在使用之前检查提示是否已购买。否则我会收到一个错误。

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    // Oh noes, there was a problem.
                    Log.d("Ultimate Quiz",
                            "Problem setting up In-app Billing: " + result);
                }
                // Hooray, IAB is fully set up!
                // Here I run the queryInventory to check right away if the product has been bought, and consume it if it has.
                mHelper.queryInventoryAsync(mReceivedInventoryListener);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多