Android应用内结算,缺少购买

时间:2016-04-27 19:12:39

标签: android in-app-billing in-app

我正在为我的Android应用使用Google的应用内结算。

我使用了谷歌的IabHelper课程,因为他们的结算非常复杂。

我的问题是我想知道购买是否成功。我认为我正确地遵循了这一流程,但在我的日志中,我看到很多用户都获得了升级,但是我的Google Play付款帐户中却没有显示其购买情况。 (即他们免费升级)。

我记录了GP订单ID,有时候会记录下这样的数字,

GPA.1234-5678-9123-1234

但有时它就像,

1234567891234.1234567891234

通常情况下,我认为非GPA订单不会收取费用。

此外,我认为您可以下订单,然后取消订单,仍然可以升级吗?

您如何确保用户真正付款?

代码:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, final Purchase purchase) {
        if (result.isFailure()) {
            showMessage("Google Billing Purchase Error");                   
            return;
        } else if (purchase.getSku().equals(sku)) {
            IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
                public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
                    if (result.isFailure()) {
                        showMessage("Google Billing Error");
                        return;
                    } else {
                        if (inventory.hasPurchase(sku)) {
                            showMessage("Thank you for upgrading");
                            grantUpgrade();
                            // ** This line gets call, but no payment occurs.
                        }
                    }
                }
            };
            mHelper.queryInventoryAsync(mReceivedInventoryListener);
        }
    }
};
mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

***更新以检查" inventory.hasPurchase(sku)"但仍然看到升级但不付费的用户。

**也许用户正在使用Freedom hack?无论如何要防止这种情况?

3 个答案:

答案 0 :(得分:3)

 if (result.isFailure()) {
    //If the user aborts or any other problems it will jump here 
  }
  else {
    //The user purchased some item, check out which it is 
    mIsPremium = inventory.hasPurchase(SKU_ANY_ITEM);        
  }

所以关于你的问题,这段代码已经验证用户是否真的购买了该物品!

答案 1 :(得分:2)

Purchase premiumPurchase = inventory.getPurchase(SKU);

boolean mIsPremium = (premiumPurchase != null 
           && verifyDeveloperPayload(premiumPurchase));

if(mIsPremium){
    ...
}

答案 2 :(得分:1)

Google Play商店会跟踪您的购买情况,因此您不应该认为仅仅因为购买成功,该商品就会被购买。用户可以获得购买退款。因此,您需要在每次启动时查询用户的库存并适当调整您的拨款。无论如何,您都需要执行此检查,以便支持在切换到新设备或卸载/重新安装应用程序时希望获得授权的用户。