Android应用内结算,缺less购买

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

我使用了Google的IabHelper类,因为他们的账单看起来非常复杂。

我的问题是我想知道购买是否成功。 我认为我正确地遵循了这个stream程,但是在我的日志中,我看到很多用户都升级了,但是他们的购买从未在我的Google Play付款帐户中显示过。 (即他们免费升级)。

我正在loggingGP订单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)”,但仍然看到升级,但不支付的用户。

**也许用户正在使用自由破解? 无论如何,以防止这一点?

Solutions Collecting From Web of "Android应用内结算,缺less购买"

  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); } 

所以关于你的问题,这个代码已经validation用户是否真的购买了这个项目!

购买premiumPurchase = inventory.getPurchase(SKU);

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

如果(mIsPremium){

}

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